github.com/safing/portbase@v0.19.5/rng/get_test.go (about)

     1  package rng
     2  
     3  import (
     4  	"testing"
     5  )
     6  
     7  func TestNumberRandomness(t *testing.T) {
     8  	t.Parallel()
     9  
    10  	// skip in automated tests
    11  	t.Logf("Integer number bias test deactivated, as it sometimes triggers.")
    12  	t.SkipNow()
    13  
    14  	if testing.Short() {
    15  		t.Skip()
    16  	}
    17  
    18  	var subjects uint64 = 10
    19  	var testSize uint64 = 10000
    20  
    21  	results := make([]uint64, int(subjects))
    22  	for i := 0; i < int(subjects*testSize); i++ {
    23  		n, err := Number(subjects - 1)
    24  		if err != nil {
    25  			t.Fatal(err)
    26  			return
    27  		}
    28  		results[int(n)]++
    29  	}
    30  
    31  	// catch big mistakes in the number function, eg. massive % bias
    32  	lowerMargin := testSize - testSize/50
    33  	upperMargin := testSize + testSize/50
    34  	for subject, result := range results {
    35  		if result < lowerMargin || result > upperMargin {
    36  			t.Errorf("subject %d is outside of margins: %d", subject, result)
    37  		}
    38  	}
    39  
    40  	t.Fatal(results)
    41  }