snowflake

Snowflake ID Generator
git clone git://git.lair.cx/snowflake
Log | Files | Refs | LICENSE

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 }