1 |
747 |
jeremybenn |
// Package testing provides support for automated testing of Go ...
|
2 |
|
|
PACKAGE testing
|
3 |
|
|
|
4 |
|
|
IMPORTPATH
|
5 |
|
|
testdata/testing
|
6 |
|
|
|
7 |
|
|
IMPORTS
|
8 |
|
|
bytes
|
9 |
|
|
flag
|
10 |
|
|
fmt
|
11 |
|
|
io
|
12 |
|
|
os
|
13 |
|
|
runtime
|
14 |
|
|
runtime/pprof
|
15 |
|
|
strconv
|
16 |
|
|
strings
|
17 |
|
|
time
|
18 |
|
|
|
19 |
|
|
FILENAMES
|
20 |
|
|
testdata/benchmark.go
|
21 |
|
|
testdata/example.go
|
22 |
|
|
testdata/testing.go
|
23 |
|
|
|
24 |
|
|
VARIABLES
|
25 |
|
|
//
|
26 |
|
|
var (
|
27 |
|
|
// The short flag requests that tests run more quickly, but its functionality
|
28 |
|
|
// is provided by test writers themselves. The testing package is just its
|
29 |
|
|
// home. The all.bash installation script sets it to make installation more
|
30 |
|
|
// efficient, but by default the flag is off so a plain "gotest" will do a
|
31 |
|
|
// full test of the package.
|
32 |
|
|
short = flag.Bool("test.short", false, "run smaller test suite to save time")
|
33 |
|
|
|
34 |
|
|
// Report as tests are run; default is silent for success.
|
35 |
|
|
chatty = flag.Bool("test.v", false, "verbose: print additional output")
|
36 |
|
|
match = flag.String("test.run", "", "regular expression to select tests to run")
|
37 |
|
|
memProfile = flag.String("test.memprofile", "", "write a memory profile to the named file after execution")
|
38 |
|
|
memProfileRate = flag.Int("test.memprofilerate", 0, "if >=0, sets runtime.MemProfileRate")
|
39 |
|
|
cpuProfile = flag.String("test.cpuprofile", "", "write a cpu profile to the named file during execution")
|
40 |
|
|
timeout = flag.Duration("test.timeout", 0, "if positive, sets an aggregate time limit for all tests")
|
41 |
|
|
cpuListStr = flag.String("test.cpu", "", "comma-separated list of number of CPUs to use for each test")
|
42 |
|
|
parallel = flag.Int("test.parallel", runtime.GOMAXPROCS(0), "maximum test parallelism")
|
43 |
|
|
|
44 |
|
|
cpuList []int
|
45 |
|
|
)
|
46 |
|
|
|
47 |
|
|
//
|
48 |
|
|
var benchTime = flag.Float64("test.benchtime", 1, "approximate run time for each benchmark, in seconds")
|
49 |
|
|
|
50 |
|
|
//
|
51 |
|
|
var matchBenchmarks = flag.String("test.bench", "", "regular expression to select benchmarks to run")
|
52 |
|
|
|
53 |
|
|
//
|
54 |
|
|
var timer *time.Timer
|
55 |
|
|
|
56 |
|
|
|
57 |
|
|
FUNCTIONS
|
58 |
|
|
// An internal function but exported because it is cross-package; ...
|
59 |
|
|
func Main(matchString func(pat, str string) (bool, error), tests []InternalTest, benchmarks []InternalBenchmark, examples []InternalExample)
|
60 |
|
|
|
61 |
|
|
// An internal function but exported because it is cross-package; ...
|
62 |
|
|
func RunBenchmarks(matchString func(pat, str string) (bool, error), benchmarks []InternalBenchmark)
|
63 |
|
|
|
64 |
|
|
//
|
65 |
|
|
func RunExamples(examples []InternalExample) (ok bool)
|
66 |
|
|
|
67 |
|
|
//
|
68 |
|
|
func RunTests(matchString func(pat, str string) (bool, error), tests []InternalTest) (ok bool)
|
69 |
|
|
|
70 |
|
|
// Short reports whether the -test.short flag is set.
|
71 |
|
|
func Short() bool
|
72 |
|
|
|
73 |
|
|
// after runs after all testing.
|
74 |
|
|
func after()
|
75 |
|
|
|
76 |
|
|
// alarm is called if the timeout expires.
|
77 |
|
|
func alarm()
|
78 |
|
|
|
79 |
|
|
// before runs before all testing.
|
80 |
|
|
func before()
|
81 |
|
|
|
82 |
|
|
// decorate inserts the final newline if needed and indentation ...
|
83 |
|
|
func decorate(s string, addFileLine bool) string
|
84 |
|
|
|
85 |
|
|
//
|
86 |
|
|
func max(x, y int) int
|
87 |
|
|
|
88 |
|
|
//
|
89 |
|
|
func min(x, y int) int
|
90 |
|
|
|
91 |
|
|
//
|
92 |
|
|
func parseCpuList()
|
93 |
|
|
|
94 |
|
|
// roundDown10 rounds a number down to the nearest power of 10.
|
95 |
|
|
func roundDown10(n int) int
|
96 |
|
|
|
97 |
|
|
// roundUp rounds x up to a number of the form [1eX, 2eX, 5eX].
|
98 |
|
|
func roundUp(n int) int
|
99 |
|
|
|
100 |
|
|
// startAlarm starts an alarm if requested.
|
101 |
|
|
func startAlarm()
|
102 |
|
|
|
103 |
|
|
// stopAlarm turns off the alarm.
|
104 |
|
|
func stopAlarm()
|
105 |
|
|
|
106 |
|
|
//
|
107 |
|
|
func tRunner(t *T, test *InternalTest)
|
108 |
|
|
|
109 |
|
|
|
110 |
|
|
TYPES
|
111 |
|
|
// B is a type passed to Benchmark functions to manage benchmark ...
|
112 |
|
|
type B struct {
|
113 |
|
|
common
|
114 |
|
|
N int
|
115 |
|
|
benchmark InternalBenchmark
|
116 |
|
|
bytes int64
|
117 |
|
|
timerOn bool
|
118 |
|
|
result BenchmarkResult
|
119 |
|
|
}
|
120 |
|
|
|
121 |
|
|
// Error is equivalent to Log() followed by Fail().
|
122 |
|
|
func (c *B) Error(args ...interface{})
|
123 |
|
|
|
124 |
|
|
// Errorf is equivalent to Logf() followed by Fail().
|
125 |
|
|
func (c *B) Errorf(format string, args ...interface{})
|
126 |
|
|
|
127 |
|
|
// Fail marks the function as having failed but continues ...
|
128 |
|
|
func (c *B) Fail()
|
129 |
|
|
|
130 |
|
|
// FailNow marks the function as having failed and stops its ...
|
131 |
|
|
func (c *B) FailNow()
|
132 |
|
|
|
133 |
|
|
// Failed returns whether the function has failed.
|
134 |
|
|
func (c *B) Failed() bool
|
135 |
|
|
|
136 |
|
|
// Fatal is equivalent to Log() followed by FailNow().
|
137 |
|
|
func (c *B) Fatal(args ...interface{})
|
138 |
|
|
|
139 |
|
|
// Fatalf is equivalent to Logf() followed by FailNow().
|
140 |
|
|
func (c *B) Fatalf(format string, args ...interface{})
|
141 |
|
|
|
142 |
|
|
// Log formats its arguments using default formatting, analogous ...
|
143 |
|
|
func (c *B) Log(args ...interface{})
|
144 |
|
|
|
145 |
|
|
// Logf formats its arguments according to the format, analogous ...
|
146 |
|
|
func (c *B) Logf(format string, args ...interface{})
|
147 |
|
|
|
148 |
|
|
// ResetTimer sets the elapsed benchmark time to zero. It does not ...
|
149 |
|
|
func (b *B) ResetTimer()
|
150 |
|
|
|
151 |
|
|
// SetBytes records the number of bytes processed in a single ...
|
152 |
|
|
func (b *B) SetBytes(n int64)
|
153 |
|
|
|
154 |
|
|
// StartTimer starts timing a test. This function is called ...
|
155 |
|
|
func (b *B) StartTimer()
|
156 |
|
|
|
157 |
|
|
// StopTimer stops timing a test. This can be used to pause the ...
|
158 |
|
|
func (b *B) StopTimer()
|
159 |
|
|
|
160 |
|
|
// launch launches the benchmark function. It gradually increases ...
|
161 |
|
|
func (b *B) launch()
|
162 |
|
|
|
163 |
|
|
// log generates the output. It's always at the same stack depth.
|
164 |
|
|
func (c *B) log(s string)
|
165 |
|
|
|
166 |
|
|
//
|
167 |
|
|
func (b *B) nsPerOp() int64
|
168 |
|
|
|
169 |
|
|
// run times the benchmark function in a separate goroutine.
|
170 |
|
|
func (b *B) run() BenchmarkResult
|
171 |
|
|
|
172 |
|
|
// runN runs a single benchmark for the specified number of ...
|
173 |
|
|
func (b *B) runN(n int)
|
174 |
|
|
|
175 |
|
|
// trimOutput shortens the output from a benchmark, which can be ...
|
176 |
|
|
func (b *B) trimOutput()
|
177 |
|
|
|
178 |
|
|
// The results of a benchmark run.
|
179 |
|
|
type BenchmarkResult struct {
|
180 |
|
|
N int // The number of iterations.
|
181 |
|
|
T time.Duration // The total time taken.
|
182 |
|
|
Bytes int64 // Bytes processed in one iteration.
|
183 |
|
|
}
|
184 |
|
|
|
185 |
|
|
// Benchmark benchmarks a single function. Useful for creating ...
|
186 |
|
|
func Benchmark(f func(b *B)) BenchmarkResult
|
187 |
|
|
|
188 |
|
|
//
|
189 |
|
|
func (r BenchmarkResult) NsPerOp() int64
|
190 |
|
|
|
191 |
|
|
//
|
192 |
|
|
func (r BenchmarkResult) String() string
|
193 |
|
|
|
194 |
|
|
//
|
195 |
|
|
func (r BenchmarkResult) mbPerSec() float64
|
196 |
|
|
|
197 |
|
|
// An internal type but exported because it is cross-package; part ...
|
198 |
|
|
type InternalBenchmark struct {
|
199 |
|
|
Name string
|
200 |
|
|
F func(b *B)
|
201 |
|
|
}
|
202 |
|
|
|
203 |
|
|
//
|
204 |
|
|
type InternalExample struct {
|
205 |
|
|
Name string
|
206 |
|
|
F func()
|
207 |
|
|
Output string
|
208 |
|
|
}
|
209 |
|
|
|
210 |
|
|
// An internal type but exported because it is cross-package; part ...
|
211 |
|
|
type InternalTest struct {
|
212 |
|
|
Name string
|
213 |
|
|
F func(*T)
|
214 |
|
|
}
|
215 |
|
|
|
216 |
|
|
// T is a type passed to Test functions to manage test state and ...
|
217 |
|
|
type T struct {
|
218 |
|
|
common
|
219 |
|
|
name string // Name of test.
|
220 |
|
|
startParallel chan bool // Parallel tests will wait on this.
|
221 |
|
|
}
|
222 |
|
|
|
223 |
|
|
// Error is equivalent to Log() followed by Fail().
|
224 |
|
|
func (c *T) Error(args ...interface{})
|
225 |
|
|
|
226 |
|
|
// Errorf is equivalent to Logf() followed by Fail().
|
227 |
|
|
func (c *T) Errorf(format string, args ...interface{})
|
228 |
|
|
|
229 |
|
|
// Fail marks the function as having failed but continues ...
|
230 |
|
|
func (c *T) Fail()
|
231 |
|
|
|
232 |
|
|
// FailNow marks the function as having failed and stops its ...
|
233 |
|
|
func (c *T) FailNow()
|
234 |
|
|
|
235 |
|
|
// Failed returns whether the function has failed.
|
236 |
|
|
func (c *T) Failed() bool
|
237 |
|
|
|
238 |
|
|
// Fatal is equivalent to Log() followed by FailNow().
|
239 |
|
|
func (c *T) Fatal(args ...interface{})
|
240 |
|
|
|
241 |
|
|
// Fatalf is equivalent to Logf() followed by FailNow().
|
242 |
|
|
func (c *T) Fatalf(format string, args ...interface{})
|
243 |
|
|
|
244 |
|
|
// Log formats its arguments using default formatting, analogous ...
|
245 |
|
|
func (c *T) Log(args ...interface{})
|
246 |
|
|
|
247 |
|
|
// Logf formats its arguments according to the format, analogous ...
|
248 |
|
|
func (c *T) Logf(format string, args ...interface{})
|
249 |
|
|
|
250 |
|
|
// Parallel signals that this test is to be run in parallel with ...
|
251 |
|
|
func (t *T) Parallel()
|
252 |
|
|
|
253 |
|
|
// log generates the output. It's always at the same stack depth.
|
254 |
|
|
func (c *T) log(s string)
|
255 |
|
|
|
256 |
|
|
//
|
257 |
|
|
func (t *T) report()
|
258 |
|
|
|
259 |
|
|
// common holds the elements common between T and B and captures ...
|
260 |
|
|
type common struct {
|
261 |
|
|
output []byte // Output generated by test or benchmark.
|
262 |
|
|
failed bool // Test or benchmark has failed.
|
263 |
|
|
start time.Time // Time test or benchmark started
|
264 |
|
|
duration time.Duration
|
265 |
|
|
self interface{} // To be sent on signal channel when done.
|
266 |
|
|
signal chan interface{} // Output for serial tests.
|
267 |
|
|
}
|
268 |
|
|
|
269 |
|
|
// Error is equivalent to Log() followed by Fail().
|
270 |
|
|
func (c *common) Error(args ...interface{})
|
271 |
|
|
|
272 |
|
|
// Errorf is equivalent to Logf() followed by Fail().
|
273 |
|
|
func (c *common) Errorf(format string, args ...interface{})
|
274 |
|
|
|
275 |
|
|
// Fail marks the function as having failed but continues ...
|
276 |
|
|
func (c *common) Fail()
|
277 |
|
|
|
278 |
|
|
// FailNow marks the function as having failed and stops its ...
|
279 |
|
|
func (c *common) FailNow()
|
280 |
|
|
|
281 |
|
|
// Failed returns whether the function has failed.
|
282 |
|
|
func (c *common) Failed() bool
|
283 |
|
|
|
284 |
|
|
// Fatal is equivalent to Log() followed by FailNow().
|
285 |
|
|
func (c *common) Fatal(args ...interface{})
|
286 |
|
|
|
287 |
|
|
// Fatalf is equivalent to Logf() followed by FailNow().
|
288 |
|
|
func (c *common) Fatalf(format string, args ...interface{})
|
289 |
|
|
|
290 |
|
|
// Log formats its arguments using default formatting, analogous ...
|
291 |
|
|
func (c *common) Log(args ...interface{})
|
292 |
|
|
|
293 |
|
|
// Logf formats its arguments according to the format, analogous ...
|
294 |
|
|
func (c *common) Logf(format string, args ...interface{})
|
295 |
|
|
|
296 |
|
|
// log generates the output. It's always at the same stack depth.
|
297 |
|
|
func (c *common) log(s string)
|
298 |
|
|
|