stat/combin: allow user allocation for Cartesian product
MODIFY
stat/combin/combin.go
stat/combin/combin.go
@@ -341,8 +341,8 @@ func (g *CartesianGenerator) Next() bool {
// Product generates one product of the cartesian set according to the current index which is increased by Next().
// Next needs to be called at least one time before this method, otherwise it will panic.
-func (g *CartesianGenerator) Product() []int {
- return SubFor(nil, g.idx, g.lens)
+func (g *CartesianGenerator) Product(dst []int) []int {
+ return SubFor(dst, g.idx, g.lens)
}
// IdxFor converts a multi-dimensional index into a linear index for a

MODIFY
stat/combin/combin_test.go
stat/combin/combin_test.go
@@ -318,7 +318,7 @@ func TestCartesianGenerator(t *testing.T) {
gen := NewCartesianGenerator([]int{1, 2, 3})
iterations := 0
for gen.Next() {
- got := gen.Product()
+ got := gen.Product(nil)
if !reflect.DeepEqual(got, want[iterations]) {
t.Errorf("Cartesian product does not match. want: %v got: %v", want[iterations], got)
}

MODIFY
stat/combin/combinations_example_test.go
stat/combin/combinations_example_test.go
@@ -39,7 +39,7 @@ func ExampleCartesianGenerator() {
// Now loop over all products.
var i int
for gen.Next() {
- fmt.Println(i, gen.Product())
+ fmt.Println(i, gen.Product(nil))
i++
}

stat/combin: allow user allocation for Cartesian product