blob: 37676d97a18d685a12667828d0cd3e75646232e9 [file] [log] [blame]
package sets
import (
"testing"
"github.com/stretchr/testify/assert"
)
func readAllFromChannel(in <-chan []int) [][]int {
ret := [][]int{}
for s := range in {
ret = append(ret, s)
}
return ret
}
func TestCartesianProduct_EmptySlice_EmptyChannel(t *testing.T) {
in, err := CartesianProduct([]int{})
assert.NoError(t, err)
assert.Equal(t, [][]int{}, readAllFromChannel(in))
}
func TestCartesianProduct_SliceOfLengthOne_ChannelJustCountsDown(t *testing.T) {
in, err := CartesianProduct([]int{5})
assert.NoError(t, err)
assert.Equal(t, [][]int{
{4},
{3},
{2},
{1},
{0},
}, readAllFromChannel(in))
}
func TestCartesianProduct_SliceOfLengthTwoButOneCountIsOne_ChannelJustCountsDown(t *testing.T) {
in, err := CartesianProduct([]int{5, 1})
assert.NoError(t, err)
assert.Equal(t, [][]int{
{4, 0},
{3, 0},
{2, 0},
{1, 0},
{0, 0},
}, readAllFromChannel(in))
}
func TestCartesianProduct_SliceOfLengthTwoButOtherCountIsOne_ChannelJustCountsDown(t *testing.T) {
in, err := CartesianProduct([]int{1, 5})
assert.NoError(t, err)
assert.Equal(t, [][]int{
{0, 4},
{0, 3},
{0, 2},
{0, 1},
{0, 0},
}, readAllFromChannel(in))
}
func TestCartesianProduct_SliceOfLengthTwoButCountIsZero_ReturnsError(t *testing.T) {
_, err := CartesianProduct([]int{1, 0})
assert.Error(t, err)
}
func TestCartesianProduct_SliceOfLengthTwo_ChannelEmitsCartesianProduct(t *testing.T) {
in, err := CartesianProduct([]int{3, 2})
assert.NoError(t, err)
assert.Equal(t, [][]int{
{2, 1},
{1, 1},
{0, 1},
{2, 0},
{1, 0},
{0, 0},
}, readAllFromChannel(in))
}
func TestCartesianProduct_SliceOfLengthThree_ChannelEmitsCartesianProduct(t *testing.T) {
in, err := CartesianProduct([]int{2, 2, 3})
assert.NoError(t, err)
assert.Equal(t, [][]int{
{1, 1, 2},
{0, 1, 2},
{1, 0, 2},
{0, 0, 2},
{1, 1, 1},
{0, 1, 1},
{1, 0, 1},
{0, 0, 1},
{1, 1, 0},
{0, 1, 0},
{1, 0, 0},
{0, 0, 0},
}, readAllFromChannel(in))
}