Source file
src/math/big/gcd_test.go
1
2
3
4
5
6
7
8 package big
9
10 import (
11 "math/rand"
12 "testing"
13 )
14
15
16 func randInt(r *rand.Rand, size uint) *Int {
17 n := new(Int).Lsh(intOne, size-1)
18 x := new(Int).Rand(r, n)
19 return x.Add(x, n)
20 }
21
22 func runGCD(b *testing.B, aSize, bSize uint) {
23 if isRaceBuilder && (aSize > 1000 || bSize > 1000) {
24 b.Skip("skipping on race builder")
25 }
26 b.Run("WithoutXY", func(b *testing.B) {
27 runGCDExt(b, aSize, bSize, false)
28 })
29 b.Run("WithXY", func(b *testing.B) {
30 runGCDExt(b, aSize, bSize, true)
31 })
32 }
33
34 func runGCDExt(b *testing.B, aSize, bSize uint, calcXY bool) {
35 b.StopTimer()
36 var r = rand.New(rand.NewSource(1234))
37 aa := randInt(r, aSize)
38 bb := randInt(r, bSize)
39 var x, y *Int
40 if calcXY {
41 x = new(Int)
42 y = new(Int)
43 }
44 b.StartTimer()
45 for i := 0; i < b.N; i++ {
46 new(Int).GCD(x, y, aa, bb)
47 }
48 }
49
50 func BenchmarkGCD10x10(b *testing.B) { runGCD(b, 10, 10) }
51 func BenchmarkGCD10x100(b *testing.B) { runGCD(b, 10, 100) }
52 func BenchmarkGCD10x1000(b *testing.B) { runGCD(b, 10, 1000) }
53 func BenchmarkGCD10x10000(b *testing.B) { runGCD(b, 10, 10000) }
54 func BenchmarkGCD10x100000(b *testing.B) { runGCD(b, 10, 100000) }
55 func BenchmarkGCD100x100(b *testing.B) { runGCD(b, 100, 100) }
56 func BenchmarkGCD100x1000(b *testing.B) { runGCD(b, 100, 1000) }
57 func BenchmarkGCD100x10000(b *testing.B) { runGCD(b, 100, 10000) }
58 func BenchmarkGCD100x100000(b *testing.B) { runGCD(b, 100, 100000) }
59 func BenchmarkGCD1000x1000(b *testing.B) { runGCD(b, 1000, 1000) }
60 func BenchmarkGCD1000x10000(b *testing.B) { runGCD(b, 1000, 10000) }
61 func BenchmarkGCD1000x100000(b *testing.B) { runGCD(b, 1000, 100000) }
62 func BenchmarkGCD10000x10000(b *testing.B) { runGCD(b, 10000, 10000) }
63 func BenchmarkGCD10000x100000(b *testing.B) { runGCD(b, 10000, 100000) }
64 func BenchmarkGCD100000x100000(b *testing.B) { runGCD(b, 100000, 100000) }
65
View as plain text