Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions matrix.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,26 @@ package matrix
import (
"iter"
"reflect"
"slices"
)

type testingT interface {
Helper()
Fatalf(format string, args ...any)
}

// GenerateAndCollect generates all possible combinations of values for fields of the type T.
// It returns a collected slice of generated test cases.
// Use this function if you need all test cases at once, use a for-range loop on Generate otherwise.
// - len(dims) must equal len(fields(T))
// - dimensions[i].(type) must equal [](fields(T)[i].(type))
// - T must only have exported fields.
func GenerateAndCollect[T any](t testingT, tcase T, dimensions ...any) []T {
return slices.Collect(Generate(t, tcase, dimensions...))
}

// Generate generates all possible combinations of values for fields of the type T.
// It returns an iter.Seq[T] that can be for-ranged over.
// - len(dims) must equal len(fields(T))
// - dimensions[i].(type) must equal [](fields(T)[i].(type))
// - T must only have exported fields.
Expand Down
22 changes: 17 additions & 5 deletions matrix_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -134,11 +134,23 @@ func TestNilPointers(t *testing.T) {
{Y: nil},
{Y: ptrTo(1)},
}
generated := slices.Collect(Generate(t, tcase{},
[]*int{nil, ptrTo(1)}))
generated := GenerateAndCollect(t, tcase{}, []*int{nil, ptrTo(1)})

if !reflect.DeepEqual(expected, generated) {
t.Logf("Expected: %v, got: %v", expected, generated)
t.Fail()
assert.Equal(t, expected, generated)
}

func TestGenerateAndCollect(t *testing.T) {
t.Parallel()

type tcase struct {
Y bool
}

expected := []tcase{
{Y: false},
{Y: true},
}
generated := GenerateAndCollect(t, tcase{}, []bool{false, true})

assert.Equal(t, expected, generated)
}