mirror of
https://github.com/gogrlx/nats-server.git
synced 2026-04-02 03:38:42 -07:00
114 lines
2.0 KiB
Go
114 lines
2.0 KiB
Go
// Copyright 2014-2016 Apcera Inc. All rights reserved.
|
|
|
|
package server
|
|
|
|
import (
|
|
"math/rand"
|
|
"strconv"
|
|
"sync"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestParseSize(t *testing.T) {
|
|
if parseSize(nil) != -1 {
|
|
t.Fatal("Should error on nil byte slice")
|
|
}
|
|
n := []byte("12345678")
|
|
if pn := parseSize(n); pn != 12345678 {
|
|
t.Fatalf("Did not parse %q correctly, res=%d\n", n, pn)
|
|
}
|
|
}
|
|
|
|
func TestParseSInt64(t *testing.T) {
|
|
if parseInt64(nil) != -1 {
|
|
t.Fatal("Should error on nil byte slice")
|
|
}
|
|
n := []byte("12345678")
|
|
if pn := parseInt64(n); pn != 12345678 {
|
|
t.Fatalf("Did not parse %q correctly, res=%d\n", n, pn)
|
|
}
|
|
}
|
|
|
|
func BenchmarkParseInt(b *testing.B) {
|
|
b.SetBytes(1)
|
|
n := "12345678"
|
|
for i := 0; i < b.N; i++ {
|
|
strconv.ParseInt(n, 10, 0)
|
|
}
|
|
}
|
|
|
|
func BenchmarkParseSize(b *testing.B) {
|
|
b.SetBytes(1)
|
|
n := []byte("12345678")
|
|
for i := 0; i < b.N; i++ {
|
|
parseSize(n)
|
|
}
|
|
}
|
|
|
|
func deferUnlock(mu *sync.Mutex) {
|
|
mu.Lock()
|
|
defer mu.Unlock()
|
|
}
|
|
|
|
func BenchmarkDeferMutex(b *testing.B) {
|
|
var mu sync.Mutex
|
|
b.SetBytes(1)
|
|
for i := 0; i < b.N; i++ {
|
|
deferUnlock(&mu)
|
|
}
|
|
}
|
|
|
|
func noDeferUnlock(mu *sync.Mutex) {
|
|
mu.Lock()
|
|
mu.Unlock()
|
|
}
|
|
|
|
func BenchmarkNoDeferMutex(b *testing.B) {
|
|
var mu sync.Mutex
|
|
b.SetBytes(1)
|
|
for i := 0; i < b.N; i++ {
|
|
noDeferUnlock(&mu)
|
|
}
|
|
}
|
|
|
|
func createTestSub() *subscription {
|
|
return &subscription{
|
|
subject: []byte("foo"),
|
|
queue: []byte("bar"),
|
|
sid: []byte("22"),
|
|
}
|
|
}
|
|
|
|
func BenchmarkArrayRand(b *testing.B) {
|
|
b.StopTimer()
|
|
r := rand.New(rand.NewSource(time.Now().UnixNano()))
|
|
// Create an array of 10 items
|
|
subs := []*subscription{}
|
|
for i := 0; i < 10; i++ {
|
|
subs = append(subs, createTestSub())
|
|
}
|
|
b.StartTimer()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
index := r.Intn(len(subs))
|
|
_ = subs[index]
|
|
}
|
|
}
|
|
|
|
func BenchmarkMapRange(b *testing.B) {
|
|
b.StopTimer()
|
|
// Create an map of 10 items
|
|
subs := map[int]*subscription{}
|
|
for i := 0; i < 10; i++ {
|
|
subs[i] = createTestSub()
|
|
}
|
|
b.StartTimer()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
for range subs {
|
|
break
|
|
}
|
|
}
|
|
}
|