1// Copyright 2015 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package runtime_test
6
7import (
8	"math"
9	"runtime"
10	"testing"
11)
12
13func TestFastLog2(t *testing.T) {
14	// Compute the euclidean distance between math.Log2 and the FastLog2
15	// implementation over the range of interest for heap sampling.
16	const randomBitCount = 26
17	var e float64
18
19	inc := 1
20	if testing.Short() {
21		// Check 1K total values, down from 64M.
22		inc = 1 << 16
23	}
24	for i := 1; i < 1<<randomBitCount; i += inc {
25		l, fl := math.Log2(float64(i)), runtime.Fastlog2(float64(i))
26		d := l - fl
27		e += d * d
28	}
29	e = math.Sqrt(e)
30
31	if e > 1.0 {
32		t.Fatalf("imprecision on fastlog2 implementation, want <=1.0, got %f", e)
33	}
34}
35