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  }