github.com/viant/toolbox@v0.34.5/sampler/service_test.go (about) 1 package sampler 2 3 import ( 4 "github.com/stretchr/testify/assert" 5 "testing" 6 ) 7 8 func TestService_Accept(t *testing.T) { 9 10 useCases := []struct { 11 description string 12 goalPCT float64 13 testCount int 14 }{ 15 16 { 17 description: "50% goal", 18 goalPCT: 50, 19 testCount: 100000, 20 }, 21 22 { 23 description: "95.1% goal", 24 goalPCT: 95.1, 25 testCount: 100000, 26 }, 27 } 28 29 for _, useCase := range useCases { 30 sampler := New(useCase.goalPCT) 31 acceptCount := 0 32 for i := 0; i < useCase.testCount; i++ { 33 if sampler.Accept() { 34 acceptCount++ 35 } 36 } 37 38 actualAcceptPCT := int(100.0 * (float64(acceptCount) / float64(useCase.testCount))) 39 if actualAcceptPCT > int(useCase.goalPCT) { //allows -1 diff 40 actualAcceptPCT-- 41 } 42 if actualAcceptPCT < int(useCase.goalPCT) { //allows +1 diff 43 actualAcceptPCT++ 44 } 45 assert.Equal(t, int(useCase.goalPCT), actualAcceptPCT, useCase.description) 46 } 47 } 48 49 func TestService_AcceptWithThreshold(t *testing.T) { 50 sampler := New(100) // should not affect the result 51 acceptCount := 0 52 testcount := 100000 53 for i := 0; i < testcount; i++ { 54 if sampler.AcceptWithThreshold(50.0) { 55 acceptCount++ 56 } 57 } 58 actualAcceptPCT := int(100.0 * (float64(acceptCount) / float64(testcount))) 59 if actualAcceptPCT > int(50.0) { //allows -1 diff 60 actualAcceptPCT-- 61 } 62 if actualAcceptPCT < int(50.0) { //allows +1 diff 63 actualAcceptPCT++ 64 } 65 assert.Equal(t, int(50), actualAcceptPCT, "accept with threshold off ") 66 }