package main import ( "fmt" "math/rand" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestCombinations(t *testing.T) { input := map[string][]interface{}{ "bool": {false, true}, "int": {1, 2, 3}, "string": {"foo", "bar"}, } c := combinations(input) assert.Equal(t, []map[string]interface{}{ {"bool": false, "int": 1, "string": "foo"}, {"bool": false, "int": 1, "string": "bar"}, {"bool": false, "int": 2, "string": "foo"}, {"bool": false, "int": 2, "string": "bar"}, {"bool": false, "int": 3, "string": "foo"}, {"bool": false, "int": 3, "string": "bar"}, {"bool": true, "int": 1, "string": "foo"}, {"bool": true, "int": 1, "string": "bar"}, {"bool": true, "int": 2, "string": "foo"}, {"bool": true, "int": 2, "string": "bar"}, {"bool": true, "int": 3, "string": "foo"}, {"bool": true, "int": 3, "string": "bar"}, }, c) } func TestUniformSetChoice(t *testing.T) { set := uniformSetChoice([]string{"a", "b", "c"}) r := rand.New(rand.NewSource(2384)) for i := 0; i < 100; i++ { t.Run(fmt.Sprintf("Iteration%03d", i), func(t *testing.T) { set = append(set, t.Name()) t.Run("ChooseAtLeastSubset", func(t *testing.T) { require.True(t, len(set.ChooseAtLeast(r, 1)) >= 1) require.True(t, len(set.ChooseAtLeast(r, 2)) >= 2) require.True(t, len(set.ChooseAtLeast(r, len(set)/2)) >= len(set)/2) }) t.Run("ChooseAtLeastEqualOrGreaterToLength", func(t *testing.T) { require.Len(t, set.ChooseAtLeast(r, len(set)), len(set)) require.Len(t, set.ChooseAtLeast(r, len(set)+1), len(set)) require.Len(t, set.ChooseAtLeast(r, len(set)*10), len(set)) }) t.Run("ChooseSingle", func(t *testing.T) { require.True(t, len(set.Choose(r)) >= 1) }) }) } }