Skip to content

Commit 81fdc60

Browse files
committed
feat: add GenerateAndCollect helper that calls slices.Collect on the result of Generate to return a slice with all generated test cases
1 parent 6c3eff0 commit 81fdc60

2 files changed

Lines changed: 29 additions & 5 deletions

File tree

matrix.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,26 @@ package matrix
33
import (
44
"iter"
55
"reflect"
6+
"slices"
67
)
78

89
type testingT interface {
910
Helper()
1011
Fatalf(format string, args ...any)
1112
}
1213

14+
// GenerateAndCollect generates all possible combinations of values for fields of the type T.
15+
// It returns a collected slice of generated test cases.
16+
// Use this function if you need all test cases at once, use a for-range loop on Generate otherwise.
17+
// - len(dims) must equal len(fields(T))
18+
// - dimensions[i].(type) must equal [](fields(T)[i].(type))
19+
// - T must only have exported fields.
20+
func GenerateAndCollect[T any](t testingT, tcase T, dimensions ...any) []T {
21+
return slices.Collect(Generate(t, tcase, dimensions...))
22+
}
23+
1324
// Generate generates all possible combinations of values for fields of the type T.
25+
// It returns an iter.Seq[T] that can be for-ranged over.
1426
// - len(dims) must equal len(fields(T))
1527
// - dimensions[i].(type) must equal [](fields(T)[i].(type))
1628
// - T must only have exported fields.

matrix_test.go

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -134,11 +134,23 @@ func TestNilPointers(t *testing.T) {
134134
{Y: nil},
135135
{Y: ptrTo(1)},
136136
}
137-
generated := slices.Collect(Generate(t, tcase{},
138-
[]*int{nil, ptrTo(1)}))
137+
generated := GenerateAndCollect(t, tcase{}, []*int{nil, ptrTo(1)})
139138

140-
if !reflect.DeepEqual(expected, generated) {
141-
t.Logf("Expected: %v, got: %v", expected, generated)
142-
t.Fail()
139+
assert.Equal(t, expected, generated)
140+
}
141+
142+
func TestGenerateAndCollect(t *testing.T) {
143+
t.Parallel()
144+
145+
type tcase struct {
146+
Y bool
147+
}
148+
149+
expected := []tcase{
150+
{Y: false},
151+
{Y: true},
143152
}
153+
generated := GenerateAndCollect(t, tcase{}, []bool{false, true})
154+
155+
assert.Equal(t, expected, generated)
144156
}

0 commit comments

Comments
 (0)