stat/combin: allow user allocation for Cartesian product

This commit is contained in:
Dan Kortschak
2019-10-24 19:27:42 +10:30
parent 7e1144f373
commit f54cad9e6d
3 changed files with 4 additions and 4 deletions

View File

@@ -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

View File

@@ -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)
}

View File

@@ -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++
}