github.com/andy2046/gopie@v0.7.0/pkg/sequence/memflake_test.go (about)

     1  package sequence_test
     2  
     3  import (
     4  	. "github.com/andy2046/gopie/pkg/sequence"
     5  	"testing"
     6  	"time"
     7  )
     8  
     9  func TestIceflake_Next(t *testing.T) {
    10  	s := NewMemFlake(time.Time{}, 0, 0)
    11  	if s == nil {
    12  		t.Fatal("error: nil Iceflake")
    13  	}
    14  	test := tester{t, s}
    15  
    16  	n0 := test.Next()
    17  	for i := 0; i < 3; i++ {
    18  		test.Next()
    19  	}
    20  	n := test.Next()
    21  	if n <= n0 {
    22  		t.Errorf("error: expected %d greater than %d", n, n0)
    23  	}
    24  
    25  	n0 = test.NextN(1000)
    26  	if n0 <= n {
    27  		t.Errorf("error: expected %d greater than %d", n0, n)
    28  	}
    29  
    30  	n = test.Next()
    31  	if n <= n0 {
    32  		t.Errorf("error: expected %d greater than %d", n, n0)
    33  	}
    34  }
    35  
    36  func TestIceflake_Parallel(t *testing.T) {
    37  	s := NewMemFlake(time.Time{}, 0, 0)
    38  	test := tester{t, s}
    39  
    40  	consumer := make(chan uint64)
    41  	const numID = 10000
    42  	generate := func() {
    43  		for i := 0; i < numID; i++ {
    44  			consumer <- test.Next()
    45  		}
    46  	}
    47  	const numGenerator = 10
    48  	for i := 0; i < numGenerator; i++ {
    49  		go generate()
    50  	}
    51  	set := make(map[uint64]bool)
    52  	for i := 0; i < numID*numGenerator; i++ {
    53  		id := <-consumer
    54  		if _, exist := set[id]; exist {
    55  			t.Fatal("error: duplicated")
    56  		}
    57  		set[id] = true
    58  	}
    59  }