benchmark: make measuring small snippets of code less verbose/easier to use

pull/3853/head
Delyan Angelov 2020-02-26 17:29:46 +02:00 committed by GitHub
parent 857cbfb0d2
commit 9d61f4fad1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 34 additions and 0 deletions

View File

@ -23,12 +23,32 @@ for {
bmark.stop() // call when you want to finalize the benchmark
println( bmark.total_message('remarks about the benchmark') )
```
benchmark.start() and b.measure() are convenience methods,
intended to be used in combination. Their goal is to make
benchmarking of small snippets of code as *short*, easy to
write, and then to read and analyze the results, as possible.
Example:
```v
import benchmark
b := benchmark.start()
// your code 1 ...
b.measure('code_1')
// your code 2 ...
b.measure('code_2')
```
... which will produce on stdout something like this:
SPENT 17 ms in code_1
SPENT 462 ms in code_2
*/
const (
BOK = term.ok_message('OK')
BFAIL = term.fail_message('FAIL')
BSPENT = term.ok_message('SPENT')
)
pub struct Benchmark {
@ -95,6 +115,20 @@ pub fn (b mut Benchmark) neither_fail_nor_ok() {
b.step_end_time = benchmark.now()
}
pub fn start() Benchmark {
mut b := new_benchmark()
b.step()
return b
}
pub fn (b mut Benchmark) measure(label string) i64 {
b.ok()
res := b.step_end_time - b.step_start_time
println(b.step_message_with_label(BSPENT, 'in $label'))
b.step()
return res
}
pub fn (b &Benchmark) step_message_with_label(label string, msg string) string {
mut timed_line := ''
if b.nexpected_steps > 0 {