github.com/lingyao2333/mo-zero@v1.4.1/zrpc/resolver/internal/subset_test.go (about) 1 package internal 2 3 import ( 4 "strconv" 5 "testing" 6 7 "github.com/lingyao2333/mo-zero/core/mathx" 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func TestSubset(t *testing.T) { 12 tests := []struct { 13 name string 14 set int 15 sub int 16 }{ 17 { 18 name: "more vals to subset", 19 set: 100, 20 sub: 36, 21 }, 22 { 23 name: "less vals to subset", 24 set: 100, 25 sub: 200, 26 }, 27 } 28 29 for _, test := range tests { 30 test := test 31 t.Run(test.name, func(t *testing.T) { 32 var vals []string 33 for i := 0; i < test.set; i++ { 34 vals = append(vals, strconv.Itoa(i)) 35 } 36 37 m := make(map[interface{}]int) 38 for i := 0; i < 1000; i++ { 39 set := subset(append([]string(nil), vals...), test.sub) 40 if test.sub < test.set { 41 assert.Equal(t, test.sub, len(set)) 42 } else { 43 assert.Equal(t, test.set, len(set)) 44 } 45 46 for _, val := range set { 47 m[val]++ 48 } 49 } 50 51 assert.True(t, mathx.CalcEntropy(m) > 0.95) 52 }) 53 } 54 }