generator_test.go (761B)
1 package snowflakes 2 3 import ( 4 "testing" 5 "time" 6 ) 7 8 const nodeID = 0x3ff 9 10 func TestGenerator_Generate(t *testing.T) { 11 var ( 12 now = time.Now() 13 gen = NewWithEpoch(nodeID, now) 14 id uint64 15 ) 16 17 if gen.Epoch != now.UnixMilli() { 18 t.Fatalf("NewWithEpoch failed: got %d, want %d", gen.Epoch, now.UnixMilli()) 19 } 20 21 t.Run("NodeID", func(t *testing.T) { 22 id = gen.Next() 23 if (id>>12)&0x3ff != nodeID { 24 t.Fatalf( 25 "invalid node id: got: %d, want: %d", 26 (id>>12)&0x3ff, nodeID, 27 ) 28 } 29 }) 30 31 t.Run("id must be different from the previous", func(t *testing.T) { 32 for j := 0; j < 10000; j++ { 33 a := gen.Next() 34 b := gen.Next() 35 if a == b { 36 t.Fatalf( 37 "two is same; a is %d, b is %d. (%dth loop)", 38 a, b, j, 39 ) 40 break 41 } 42 } 43 }) 44 }