github.com/whatap/golib@v0.0.22/util/hll/HyperLogLog_test.go (about)

     1  package hll
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  )
     8  
     9  func TestHllCardinality(t *testing.T) {
    10  	assert := assert.New(t)
    11  
    12  	hll := NewHyperLogLogDefault()
    13  	hll.Offer(1)
    14  	hll.Offer(2)
    15  	hll.Offer(3)
    16  	hll.Offer(4)
    17  	hll.Offer(5)
    18  	hll.Offer(6)
    19  	hll.Offer(7)
    20  	assert.Equal(int(hll.Cardinality()), 7)
    21  
    22  	hll.Offer(2)
    23  	hll.Offer(3)
    24  	hll.Offer(4)
    25  	hll.Offer(5)
    26  	hll.Offer(6)
    27  	hll.Offer(7)
    28  	assert.Equal(int(hll.Cardinality()), 7)
    29  
    30  	hll.Offer(8)
    31  	hll.Offer(9)
    32  	hll.Offer(10)
    33  	assert.Equal(int(hll.Cardinality()), 10)
    34  }
    35  
    36  func TestHllMerge(t *testing.T) {
    37  	assert := assert.New(t)
    38  
    39  	hll := NewHyperLogLogDefault()
    40  	hll2 := NewHyperLogLogDefault()
    41  
    42  	hll.Offer(1)
    43  	hll.Offer(2)
    44  	hll.Offer(3)
    45  	hll.Offer(4)
    46  	hll.Offer(5)
    47  
    48  	hll2.Offer(3)
    49  	hll2.Offer(4)
    50  	hll2.Offer(5)
    51  	hll2.Offer(6)
    52  	hll2.Offer(7)
    53  
    54  	mergedHll := hll.Merge(hll2)
    55  	assert.Equal(int(mergedHll.Cardinality()), 7)
    56  
    57  	hll = NewHyperLogLogDefault()
    58  	hll.Offer(8)
    59  	hll.Offer(9)
    60  	hll.Offer(10)
    61  
    62  	mergedHll = mergedHll.Merge(hll)
    63  	assert.Equal(int(mergedHll.Cardinality()), 10)
    64  
    65  }
    66  
    67  func TestHllByte(t *testing.T) {
    68  	assert := assert.New(t)
    69  
    70  	hll := NewHyperLogLogDefault()
    71  	hll.Offer(1)
    72  	hll.Offer(2)
    73  	hll.Offer(3)
    74  	hll.Offer(4)
    75  	hll.Offer(5)
    76  	hll.Offer(6)
    77  	hll.Offer(7)
    78  
    79  	buildHll := BuildHyperLogLog(hll.GetBytes())
    80  	assert.Equal(int(buildHll.Cardinality()), 7)
    81  
    82  }
    83  
    84  func TestMain(m *testing.M) {
    85  	m.Run()
    86  }