| package cartesian |
| |
| import ( |
| "fmt" |
| "testing" |
| |
| "github.com/google/go-cmp/cmp" |
| ) |
| |
| func TestProduct(t *testing.T) { |
| for i, te := range []struct { |
| data [][]string |
| want [][]string |
| }{ |
| { |
| data: [][]string{ |
| {"a", "b"}, |
| {"c", "d"}, |
| }, |
| want: [][]string{ |
| {"a", "c"}, |
| {"a", "d"}, |
| {"b", "c"}, |
| {"b", "d"}, |
| }, |
| }, |
| { |
| data: [][]string{ |
| {"a", "b"}, |
| }, |
| want: [][]string{ |
| {"a"}, |
| {"b"}, |
| }, |
| }, |
| { |
| data: [][]string{}, |
| want: nil, |
| }, |
| } { |
| t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { |
| got := Product(te.data...) |
| if diff := cmp.Diff(te.want, got); diff != "" { |
| t.Fatalf("Diff:\n%s", diff) |
| } |
| }) |
| } |
| } |