2
2
// Use of this source code is governed by a BSD-style
3
3
// license that can be found in the LICENSE file.
4
4
5
- package testing_test
5
+ package testing
6
6
7
7
import (
8
8
"bytes"
9
9
"runtime"
10
10
"sort"
11
11
"strings"
12
12
"sync/atomic"
13
- "testing"
14
13
"text/template"
15
14
"time"
16
15
)
@@ -32,19 +31,19 @@ var prettyPrintTests = []struct {
32
31
{0.0000999949999 , " 0.0001000 x" },
33
32
}
34
33
35
- func TestPrettyPrint (t * testing. T ) {
34
+ func TestPrettyPrint (t * T ) {
36
35
for _ , tt := range prettyPrintTests {
37
36
buf := new (strings.Builder )
38
- testing . PrettyPrint (buf , tt .v , "x" )
37
+ PrettyPrint (buf , tt .v , "x" )
39
38
if tt .expected != buf .String () {
40
39
t .Errorf ("prettyPrint(%v): expected %q, actual %q" , tt .v , tt .expected , buf .String ())
41
40
}
42
41
}
43
42
}
44
43
45
- func TestResultString (t * testing. T ) {
44
+ func TestResultString (t * T ) {
46
45
// Test fractional ns/op handling
47
- r := testing. BenchmarkResult {
46
+ r := BenchmarkResult {
48
47
N : 100 ,
49
48
T : 240 * time .Nanosecond ,
50
49
}
@@ -68,15 +67,15 @@ func TestResultString(t *testing.T) {
68
67
}
69
68
}
70
69
71
- func TestRunParallel (t * testing. T ) {
72
- if testing . Short () {
70
+ func TestRunParallel (t * T ) {
71
+ if Short () {
73
72
t .Skip ("skipping in short mode" )
74
73
}
75
- testing . Benchmark (func (b * testing. B ) {
74
+ Benchmark (func (b * B ) {
76
75
procs := uint32 (0 )
77
76
iters := uint64 (0 )
78
77
b .SetParallelism (3 )
79
- b .RunParallel (func (pb * testing. PB ) {
78
+ b .RunParallel (func (pb * PB ) {
80
79
atomic .AddUint32 (& procs , 1 )
81
80
for pb .Next () {
82
81
atomic .AddUint64 (& iters , 1 )
@@ -91,9 +90,9 @@ func TestRunParallel(t *testing.T) {
91
90
})
92
91
}
93
92
94
- func TestRunParallelFail (t * testing. T ) {
95
- testing . Benchmark (func (b * testing. B ) {
96
- b .RunParallel (func (pb * testing. PB ) {
93
+ func TestRunParallelFail (t * T ) {
94
+ Benchmark (func (b * B ) {
95
+ b .RunParallel (func (pb * PB ) {
97
96
// The function must be able to log/abort
98
97
// w/o crashing/deadlocking the whole benchmark.
99
98
b .Log ("log" )
@@ -102,9 +101,9 @@ func TestRunParallelFail(t *testing.T) {
102
101
})
103
102
}
104
103
105
- func TestRunParallelFatal (t * testing. T ) {
106
- testing . Benchmark (func (b * testing. B ) {
107
- b .RunParallel (func (pb * testing. PB ) {
104
+ func TestRunParallelFatal (t * T ) {
105
+ Benchmark (func (b * B ) {
106
+ b .RunParallel (func (pb * PB ) {
108
107
for pb .Next () {
109
108
if b .N > 1 {
110
109
b .Fatal ("error" )
@@ -114,9 +113,9 @@ func TestRunParallelFatal(t *testing.T) {
114
113
})
115
114
}
116
115
117
- func TestRunParallelSkipNow (t * testing. T ) {
118
- testing . Benchmark (func (b * testing. B ) {
119
- b .RunParallel (func (pb * testing. PB ) {
116
+ func TestRunParallelSkipNow (t * T ) {
117
+ Benchmark (func (b * B ) {
118
+ b .RunParallel (func (pb * PB ) {
120
119
for pb .Next () {
121
120
if b .N > 1 {
122
121
b .SkipNow ()
@@ -128,11 +127,11 @@ func TestRunParallelSkipNow(t *testing.T) {
128
127
129
128
func ExampleB_RunParallel () {
130
129
// Parallel benchmark for text/template.Template.Execute on a single object.
131
- testing . Benchmark (func (b * testing. B ) {
130
+ Benchmark (func (b * B ) {
132
131
templ := template .Must (template .New ("test" ).Parse ("Hello, {{.}}!" ))
133
132
// RunParallel will create GOMAXPROCS goroutines
134
133
// and distribute work among them.
135
- b .RunParallel (func (pb * testing. PB ) {
134
+ b .RunParallel (func (pb * PB ) {
136
135
// Each goroutine has its own bytes.Buffer.
137
136
var buf bytes.Buffer
138
137
for pb .Next () {
@@ -144,8 +143,8 @@ func ExampleB_RunParallel() {
144
143
})
145
144
}
146
145
147
- func TestReportMetric (t * testing. T ) {
148
- res := testing . Benchmark (func (b * testing. B ) {
146
+ func TestReportMetric (t * T ) {
147
+ res := Benchmark (func (b * B ) {
149
148
b .ReportMetric (12345 , "ns/op" )
150
149
b .ReportMetric (0.2 , "frobs/op" )
151
150
})
@@ -164,7 +163,7 @@ func TestReportMetric(t *testing.T) {
164
163
func ExampleB_ReportMetric () {
165
164
// This reports a custom benchmark metric relevant to a
166
165
// specific algorithm (in this case, sorting).
167
- testing . Benchmark (func (b * testing. B ) {
166
+ Benchmark (func (b * B ) {
168
167
var compares int64
169
168
for i := 0 ; i < b .N ; i ++ {
170
169
s := []int {5 , 4 , 3 , 2 , 1 }
@@ -178,3 +177,23 @@ func ExampleB_ReportMetric() {
178
177
b .ReportMetric (float64 (compares )/ float64 (b .N ), "compares/op" )
179
178
})
180
179
}
180
+
181
+ func TestBenchmarkLaunch (t * T ) {
182
+ tmp := benchTime
183
+ t .cleanups = append (t .cleanups , func () {
184
+ t .Logf ("reset benchTime" )
185
+ benchTime = tmp
186
+ })
187
+ // Set a long benchtime.
188
+ benchTime = durationOrCountFlag {
189
+ d : 150 * time .Second ,
190
+ }
191
+ var try int32 = 0
192
+ Benchmark (func (b * B ) {
193
+ c := atomic .AddInt32 (& try , 1 )
194
+ t .Logf ("try %d %d\n " , c , b .N )
195
+ if c > 6 {
196
+ t .Fatalf ("benchmark try to many times %d" , c )
197
+ }
198
+ })
199
+ }
0 commit comments