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 }