]> Cypherpunks repositories - gostls13.git/commitdiff
Add benchmarks for commonly used routines.
authorTrevor Strohman <trevor.strohman@gmail.com>
Tue, 24 Nov 2009 08:21:50 +0000 (00:21 -0800)
committerRuss Cox <rsc@golang.org>
Tue, 24 Nov 2009 08:21:50 +0000 (00:21 -0800)
R=rsc, r, r1
https://golang.org/cl/160046

src/pkg/fmt/fmt_test.go
src/pkg/hash/crc32/crc32_test.go
src/pkg/sort/sort_test.go
src/pkg/strconv/atof_test.go
src/pkg/strconv/atoi_test.go
src/pkg/sync/mutex_test.go
src/pkg/time/time_test.go

index e2e59576f194c9965f887637275c1f8bbbea4e28..0556c5d6090b530d36713bfb79ebe579d1ed6901 100644 (file)
@@ -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{}
 
 func (*flagPrinter) Format(f State, c int) {
index f42530e7bd36e5774cef0bf09c30a40172beead5..f9e6053ed9c2db5072789428fcde3d4819ae4c13 100644 (file)
@@ -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)
+       }
+}
index ae10099b3eae4eeab6a1acd9d3dd22cecb1867d6..8d1807b6d210b7d3ba09146946c8f1291a81e689 100644 (file)
@@ -7,6 +7,7 @@ package sort
 import (
        "fmt";
        "rand";
+       "strconv";
        "testing";
 )
 
@@ -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 (
        _Sawtooth       = iota;
        _Rand;
index c9b374d3525e4daf10c861fdb1522d7258904af4..a10381d077125b15534fcdc67fd4143392711573 100644 (file)
@@ -138,3 +138,27 @@ func testAtof(t *testing.T, opt bool) {
 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")
+       }
+}
index 37027aa6fd1fad626c0e2be8c69979f8c87670d1..7420cdcae7d5ce2c7fda33c6abb369b68feeef65 100644 (file)
@@ -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")
+       }
+}
index 72c9c4342a2b9678f5eccfa730f96a05c175c99a..05fef786af9ed3768c1c234bb10c01571d9fa03f 100644 (file)
@@ -12,8 +12,8 @@ import (
        "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);
        }
@@ -25,16 +25,36 @@ func TestSemaphore(t *testing.T) {
        *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();
        }
@@ -45,9 +65,27 @@ func TestMutex(t *testing.T) {
        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;
+}
index 61ca9796251c2a788ca7204efb059e10f1b0d536..8133018f1950fbdd346e992a1bb2c1c34d9397dc 100644 (file)
@@ -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()
+       }
+}