}
}
+func BenchmarkSprintfEmpty(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ Sprintf("")
+ }
+}
+
+func BenchmarkSprintfString(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ Sprintf("%s", "hello")
+ }
+}
+
+func BenchmarkSprintfInt(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ Sprintf("%d", 5)
+ }
+}
+
type flagPrinter struct{}
func (*flagPrinter) Format(f State, c int) {
}
}
}
+
+func BenchmarkCrc32KB(b *testing.B) {
+ b.StopTimer();
+ data := make([]uint8, 1024);
+ for i := 0; i < 1024; i++ {
+ data[i] = uint8(i)
+ }
+ c := NewIEEE();
+ b.StartTimer();
+
+ for i := 0; i < b.N; i++ {
+ c.Write(data)
+ }
+}
import (
"fmt";
"rand";
+ "strconv";
"testing";
)
}
}
+func BenchmarkSortString1K(b *testing.B) {
+ b.StopTimer();
+ for i := 0; i < b.N; i++ {
+ data := make([]string, 1<<10);
+ for i := 0; i < len(data); i++ {
+ data[i] = strconv.Itoa(i ^ 0x2cc)
+ }
+ b.StartTimer();
+ SortStrings(data);
+ b.StopTimer();
+ }
+}
+
+func BenchmarkSortInt1K(b *testing.B) {
+ b.StopTimer();
+ for i := 0; i < b.N; i++ {
+ data := make([]int, 1<<10);
+ for i := 0; i < len(data); i++ {
+ data[i] = i ^ 0x2cc
+ }
+ b.StartTimer();
+ SortInts(data);
+ b.StopTimer();
+ }
+}
+
+func BenchmarkSortInt64K(b *testing.B) {
+ b.StopTimer();
+ for i := 0; i < b.N; i++ {
+ data := make([]int, 1<<16);
+ for i := 0; i < len(data); i++ {
+ data[i] = i ^ 0xcccc
+ }
+ b.StartTimer();
+ SortInts(data);
+ b.StopTimer();
+ }
+}
+
const (
_Sawtooth = iota;
_Rand;
func TestAtof(t *testing.T) { testAtof(t, true) }
func TestAtofSlow(t *testing.T) { testAtof(t, false) }
+
+func BenchmarkAtofDecimal(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ Atof("33909")
+ }
+}
+
+func BenchmarkAtofFloat(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ Atof("339.7784")
+ }
+}
+
+func BenchmarkAtofFloatExp(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ Atof("-5.09e75")
+ }
+}
+
+func BenchmarkAtofBig(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ Atof("123456789123456789123456789")
+ }
+}
}
}
}
+
+func BenchmarkAtoi(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ Atoi("12345678")
+ }
+}
+
+func BenchmarkAtoiNeg(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ Atoi("-12345678")
+ }
+}
+
+func BenchmarkAtoi64(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ Atoi64("12345678901234")
+ }
+}
+
+func BenchmarkAtoi64Neg(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ Atoi64("-12345678901234")
+ }
+}
"testing";
)
-func HammerSemaphore(s *uint32, cdone chan bool) {
- for i := 0; i < 1000; i++ {
+func HammerSemaphore(s *uint32, loops int, cdone chan bool) {
+ for i := 0; i < loops; i++ {
runtime.Semacquire(s);
runtime.Semrelease(s);
}
*s = 1;
c := make(chan bool);
for i := 0; i < 10; i++ {
- go HammerSemaphore(s, c)
+ go HammerSemaphore(s, 1000, c)
}
for i := 0; i < 10; i++ {
<-c
}
}
+func BenchmarkUncontendedSemaphore(b *testing.B) {
+ s := new(uint32);
+ *s = 1;
+ HammerSemaphore(s, b.N, make(chan bool, 2));
+}
+
+func BenchmarkContendedSemaphore(b *testing.B) {
+ b.StopTimer();
+ s := new(uint32);
+ *s = 1;
+ c := make(chan bool);
+ runtime.GOMAXPROCS(2);
+ b.StartTimer();
+
+ go HammerSemaphore(s, b.N/2, c);
+ go HammerSemaphore(s, b.N/2, c);
+ <-c;
+ <-c;
+}
-func HammerMutex(m *Mutex, cdone chan bool) {
- for i := 0; i < 1000; i++ {
+
+func HammerMutex(m *Mutex, loops int, cdone chan bool) {
+ for i := 0; i < loops; i++ {
m.Lock();
m.Unlock();
}
m := new(Mutex);
c := make(chan bool);
for i := 0; i < 10; i++ {
- go HammerMutex(m, c)
+ go HammerMutex(m, 1000, c)
}
for i := 0; i < 10; i++ {
<-c
}
}
+
+func BenchmarkUncontendedMutex(b *testing.B) {
+ m := new(Mutex);
+ HammerMutex(m, b.N, make(chan bool, 2));
+}
+
+func BenchmarkContendedMutex(b *testing.B) {
+ b.StopTimer();
+ m := new(Mutex);
+ c := make(chan bool);
+ runtime.GOMAXPROCS(2);
+ b.StartTimer();
+
+ go HammerMutex(m, b.N/2, c);
+ go HammerMutex(m, b.N/2, c);
+ <-c;
+ <-c;
+}
}
}
}
+
+func BenchmarkSeconds(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ Seconds()
+ }
+}
+
+func BenchmarkNanoseconds(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ Nanoseconds()
+ }
+}