Commit f586870e authored by Trevor Strohman's avatar Trevor Strohman Committed by Russ Cox

Add benchmarks for commonly used routines.

R=rsc, r, r1
https://golang.org/cl/160046
parent a9d0da75
...@@ -250,6 +250,24 @@ func TestSprintf(t *testing.T) { ...@@ -250,6 +250,24 @@ func TestSprintf(t *testing.T) {
} }
} }
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{} type flagPrinter struct{}
func (*flagPrinter) Format(f State, c int) { func (*flagPrinter) Format(f State, c int) {
......
...@@ -60,3 +60,17 @@ func TestGolden(t *testing.T) { ...@@ -60,3 +60,17 @@ func TestGolden(t *testing.T) {
} }
} }
} }
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)
}
}
...@@ -7,6 +7,7 @@ package sort ...@@ -7,6 +7,7 @@ package sort
import ( import (
"fmt"; "fmt";
"rand"; "rand";
"strconv";
"testing"; "testing";
) )
...@@ -86,6 +87,45 @@ func TestSortLarge_Random(t *testing.T) { ...@@ -86,6 +87,45 @@ func TestSortLarge_Random(t *testing.T) {
} }
} }
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 ( const (
_Sawtooth = iota; _Sawtooth = iota;
_Rand; _Rand;
......
...@@ -138,3 +138,27 @@ func testAtof(t *testing.T, opt bool) { ...@@ -138,3 +138,27 @@ func testAtof(t *testing.T, opt bool) {
func TestAtof(t *testing.T) { testAtof(t, true) } func TestAtof(t *testing.T) { testAtof(t, true) }
func TestAtofSlow(t *testing.T) { testAtof(t, false) } 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")
}
}
...@@ -277,3 +277,27 @@ func TestAtoi(t *testing.T) { ...@@ -277,3 +277,27 @@ func TestAtoi(t *testing.T) {
} }
} }
} }
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")
}
}
...@@ -12,8 +12,8 @@ import ( ...@@ -12,8 +12,8 @@ import (
"testing"; "testing";
) )
func HammerSemaphore(s *uint32, cdone chan bool) { func HammerSemaphore(s *uint32, loops int, cdone chan bool) {
for i := 0; i < 1000; i++ { for i := 0; i < loops; i++ {
runtime.Semacquire(s); runtime.Semacquire(s);
runtime.Semrelease(s); runtime.Semrelease(s);
} }
...@@ -25,16 +25,36 @@ func TestSemaphore(t *testing.T) { ...@@ -25,16 +25,36 @@ func TestSemaphore(t *testing.T) {
*s = 1; *s = 1;
c := make(chan bool); c := make(chan bool);
for i := 0; i < 10; i++ { for i := 0; i < 10; i++ {
go HammerSemaphore(s, c) go HammerSemaphore(s, 1000, c)
} }
for i := 0; i < 10; i++ { for i := 0; i < 10; i++ {
<-c <-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.Lock();
m.Unlock(); m.Unlock();
} }
...@@ -45,9 +65,27 @@ func TestMutex(t *testing.T) { ...@@ -45,9 +65,27 @@ func TestMutex(t *testing.T) {
m := new(Mutex); m := new(Mutex);
c := make(chan bool); c := make(chan bool);
for i := 0; i < 10; i++ { for i := 0; i < 10; i++ {
go HammerMutex(m, c) go HammerMutex(m, 1000, c)
} }
for i := 0; i < 10; i++ { for i := 0; i < 10; i++ {
<-c <-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;
}
...@@ -82,3 +82,15 @@ func TestSecondsToLocalTime(t *testing.T) { ...@@ -82,3 +82,15 @@ func TestSecondsToLocalTime(t *testing.T) {
} }
} }
} }
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()
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment