yuid

A small, unique, URL-safe ID generator written in Go.
git clone git://git.lair.cx/yuid
Log | Files | Refs | README | LICENSE

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 }