From cb9759d067289fef850251c9425b56446086e24c Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Wed, 30 May 2012 10:26:59 -0400 Subject: [PATCH] test/bench/go1: add mandelbrot for floating point R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/6244063 --- test/bench/go1/mandel_test.go | 41 +++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 test/bench/go1/mandel_test.go diff --git a/test/bench/go1/mandel_test.go b/test/bench/go1/mandel_test.go new file mode 100644 index 00000000000..888c5e4ea82 --- /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) + } +}