generator_test.go (1051B)
1 package yuid 2 3 import ( 4 "testing" 5 ) 6 7 func TestGenerator_Next(t *testing.T) { 8 g := NewGenerator() 9 m := make(map[ID]struct{}) 10 id := ID{} 11 12 for i := 0; i < 1000000; i++ { 13 err := g.Next(&id) 14 if err != nil { 15 t.Fatalf("Failed to generate ID: %v", err) 16 } 17 18 if _, ok := m[id]; ok { 19 t.Fatalf("Duplicate ID found: %v", id) 20 } 21 22 m[id] = struct{}{} 23 } 24 } 25 26 func TestGenerator_MustNext(t *testing.T) { 27 defer func() { 28 if r := recover(); r != nil { 29 t.Errorf("Generator panicked: %v", r) 30 } 31 }() 32 33 g := NewGenerator() 34 id := ID{} 35 36 // Just calling it many times to see if any panic occurs 37 for i := 0; i < 1000000; i++ { 38 g.MustNext(&id) 39 } 40 } 41 42 func BenchmarkGenerator_Next(b *testing.B) { 43 g := NewGenerator() 44 id := ID{} 45 46 b.ResetTimer() 47 for i := 0; i < b.N; i++ { 48 _ = g.Next(&id) 49 } 50 } 51 52 func BenchmarkPutHeader(b *testing.B) { 53 id := ID{} 54 55 b.ResetTimer() 56 for i := 0; i < b.N; i++ { 57 putHeader(&id, 1234567890, 123) 58 } 59 } 60 61 func BenchmarkSetBody(b *testing.B) { 62 id := ID{} 63 64 b.ResetTimer() 65 for i := 0; i < b.N; i++ { 66 setBody(&id) 67 } 68 }