Files
nats-server/server/util_test.go
Colin Sullivan 6281894cc5 Add staticcheck static analyzer to travis.
Included are small fixes to address warnings found in test code.  No functional changes.
2016-10-27 09:51:15 -06:00

122 lines
2.1 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()
// see noDeferUnlock
if false {
return
}
}
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()
// prevent staticcheck warning about empty critical section
if false {
return
}
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
}
}
}