github.com/nsqio/nsq@v1.3.0/nsqd/guid_test.go (about) 1 package nsqd 2 3 import ( 4 "testing" 5 "unsafe" 6 ) 7 8 func BenchmarkGUIDCopy(b *testing.B) { 9 source := make([]byte, 16) 10 var dest MessageID 11 for i := 0; i < b.N; i++ { 12 copy(dest[:], source) 13 } 14 } 15 16 func BenchmarkGUIDUnsafe(b *testing.B) { 17 source := make([]byte, 16) 18 var dest MessageID 19 for i := 0; i < b.N; i++ { 20 dest = *(*MessageID)(unsafe.Pointer(&source[0])) 21 } 22 _ = dest 23 } 24 25 func BenchmarkGUID(b *testing.B) { 26 var okays, errors, fails int64 27 var previd guid 28 factory := &guidFactory{} 29 for i := 0; i < b.N; i++ { 30 id, err := factory.NewGUID() 31 if err != nil { 32 errors++ 33 } else if id == previd { 34 fails++ 35 b.Fail() 36 } else { 37 okays++ 38 } 39 id.Hex() 40 } 41 b.Logf("okays=%d errors=%d bads=%d", okays, errors, fails) 42 }