aboutsummaryrefslogtreecommitdiff
path: root/test/bench
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2012-05-30 10:26:59 -0400
committerRuss Cox <rsc@golang.org>2012-05-30 10:26:59 -0400
commitcb9759d067289fef850251c9425b56446086e24c (patch)
tree16b194947c627ede8801943112ec1b1eb62ee4d0 /test/bench
parentde96df1b029af554886f6d83a08deb812b0416b6 (diff)
downloadgo-cb9759d067289fef850251c9425b56446086e24c.tar.gz
go-cb9759d067289fef850251c9425b56446086e24c.zip
test/bench/go1: add mandelbrot for floating point
R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/6244063
Diffstat (limited to 'test/bench')
-rw-r--r--test/bench/go1/mandel_test.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/test/bench/go1/mandel_test.go b/test/bench/go1/mandel_test.go
new file mode 100644
index 0000000000..888c5e4ea8
--- /dev/null
+++ b/test/bench/go1/mandel_test.go
@@ -0,0 +1,41 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// This benchmark, taken from the shootuot, tests floating point performance.
+
+package go1
+
+import "testing"
+
+func mandelbrot(n int) int {
+ const Iter = 50
+ const Zero float64 = 0
+ const Limit = 2.0
+ ok := 0
+ for y := 0; y < n; y++ {
+ for x := 0; x < n; x++ {
+ Zr, Zi, Tr, Ti := Zero, Zero, Zero, Zero
+ Cr := (2*float64(x)/float64(n) - 1.5)
+ Ci := (2*float64(y)/float64(n) - 1.0)
+
+ for i := 0; i < Iter && (Tr+Ti <= Limit*Limit); i++ {
+ Zi = 2*Zr*Zi + Ci
+ Zr = Tr - Ti + Cr
+ Tr = Zr * Zr
+ Ti = Zi * Zi
+ }
+
+ if Tr+Ti <= Limit*Limit {
+ ok++
+ }
+ }
+ }
+ return ok
+}
+
+func BenchmarkMandelbrot200(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ mandelbrot(200)
+ }
+}