subset_test.go 909 B

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