nanoid

A tiny, secure, URL-friendly, unique string ID generator for Go
git clone git://git.lair.cx/nanoid
Log | Files | Refs | README

nanoid_test.go (2024B)


      1 package nanoid
      2 
      3 import (
      4 	"math/rand"
      5 	"testing"
      6 	"time"
      7 )
      8 
      9 const benchBufLength = 10
     10 
     11 var expectedIDs = []NanoID{
     12 	{0x2d, 0x69, 0x58, 0x30, 0x55, 0x4a, 0x57, 0x5f, 0x2d, 0x68, 0x5a, 0x67, 0x32, 0x70, 0x4e, 0x36, 0x49, 0x64, 0x54, 0x74, 0x51},
     13 	{0x77, 0x7a, 0x49, 0x43, 0x45, 0x58, 0x4f, 0x38, 0x48, 0x39, 0x50, 0x56, 0x6d, 0x62, 0x4a, 0x36, 0x42, 0x73, 0x75, 0x4c, 0x62},
     14 	{0x54, 0x34, 0x66, 0x33, 0x64, 0x69, 0x76, 0x53, 0x37, 0x49, 0x77, 0x33, 0x47, 0x76, 0x66, 0x69, 0x6a, 0x53, 0x36, 0x50, 0x6b},
     15 	{0x63, 0x77, 0x68, 0x65, 0x65, 0x73, 0x46, 0x53, 0x54, 0x4f, 0x61, 0x43, 0x74, 0x4b, 0x32, 0x34, 0x4c, 0x53, 0x56, 0x63, 0x36},
     16 	{0x56, 0x5a, 0x33, 0x55, 0x46, 0x6e, 0x33, 0x4d, 0x67, 0x35, 0x30, 0x71, 0x4d, 0x4e, 0x43, 0x49, 0x52, 0x73, 0x53, 0x6b, 0x51},
     17 	{0x6e, 0x2d, 0x64, 0x62, 0x63, 0x61, 0x52, 0x35, 0x73, 0x55, 0x2d, 0x5a, 0x73, 0x42, 0x74, 0x42, 0x64, 0x77, 0x30, 0x64, 0x57},
     18 	{0x31, 0x69, 0x4e, 0x48, 0x77, 0x6b, 0x59, 0x61, 0x63, 0x78, 0x49, 0x73, 0x36, 0x67, 0x45, 0x74, 0x38, 0x6c, 0x39, 0x39, 0x73},
     19 	{0x4d, 0x69, 0x41, 0x68, 0x69, 0x51, 0x62, 0x48, 0x44, 0x6c, 0x76, 0x45, 0x73, 0x64, 0x6f, 0x41, 0x49, 0x31, 0x57, 0x53, 0x34},
     20 	{0x45, 0x75, 0x2d, 0x47, 0x2d, 0x75, 0x35, 0x75, 0x4a, 0x62, 0x47, 0x45, 0x32, 0x51, 0x67, 0x73, 0x75, 0x56, 0x75, 0x78, 0x4c},
     21 	{0x4a, 0x6b, 0x72, 0x62, 0x65, 0x72, 0x50, 0x32, 0x71, 0x5a, 0x5f, 0x64, 0x38, 0x54, 0x46, 0x63, 0x47, 0x66, 0x47, 0x53, 0x2d},
     22 }
     23 
     24 func TestNanoID(t *testing.T) {
     25 	randomSource := rand.New(rand.NewSource(0))
     26 	gen := NewWithReader(randomSource, 1)
     27 
     28 	for _, expectedID := range expectedIDs {
     29 		id := gen.Generate()
     30 		if id != expectedID {
     31 			t.Errorf("Expected %s, got %s", expectedID, id)
     32 		}
     33 	}
     34 }
     35 
     36 func BenchmarkMathNanoID(b *testing.B) {
     37 	gen := NewWithReader(rand.New(rand.NewSource(time.Now().UnixNano())), benchBufLength)
     38 
     39 	for i := 0; i < b.N; i++ {
     40 		gen.Generate()
     41 	}
     42 }
     43 
     44 // BenchmarkNanoID benchmarks the NanoID generation.
     45 func BenchmarkNanoID(b *testing.B) {
     46 	gen := New(benchBufLength)
     47 
     48 	for i := 0; i < b.N; i++ {
     49 		gen.Generate()
     50 	}
     51 }