Skip to content

Commit 2b50c15

Browse files
author
Ulrik Sverdrup
committed
test: Display benchmark results with thousands separators
Example display: ``` running 9 tests test a ... bench: 0 ns/iter (+/- 0) test b ... bench: 52 ns/iter (+/- 0) test c ... bench: 88 ns/iter (+/- 0) test d ... bench: 618 ns/iter (+/- 111) test e ... bench: 5,933 ns/iter (+/- 87) test f ... bench: 59,280 ns/iter (+/- 1,052) test g ... bench: 588,672 ns/iter (+/- 3,381) test h ... bench: 5,894,227 ns/iter (+/- 303,489) test i ... bench: 59,112,382 ns/iter (+/- 1,500,110) ``` Fixes rust-lang#10953 Fixes rust-lang#26109
1 parent 32037a5 commit 2b50c15

File tree

1 file changed

+35
-8
lines changed

1 file changed

+35
-8
lines changed

Diff for: src/libtest/lib.rs

+35-8
Original file line numberDiff line numberDiff line change
@@ -625,17 +625,44 @@ impl<T: Write> ConsoleTestState<T> {
625625
}
626626
}
627627

628+
// Format a number with thousands separators
629+
fn fmt_thousands_sep(mut n: usize, sep: char) -> String {
630+
use std::fmt::Write;
631+
let mut output = String::new();
632+
let mut first = true;
633+
for &pow in &[9, 6, 3, 0] {
634+
let base = 10_usize.pow(pow);
635+
if pow == 0 || n / base != 0 {
636+
if first {
637+
output.write_fmt(format_args!("{}", n / base)).unwrap();
638+
} else {
639+
output.write_fmt(format_args!("{:03}", n / base)).unwrap();
640+
}
641+
if pow != 0 {
642+
output.push(sep);
643+
}
644+
first = false;
645+
}
646+
n %= base;
647+
}
648+
649+
output
650+
}
651+
628652
pub fn fmt_bench_samples(bs: &BenchSamples) -> String {
653+
use std::fmt::Write;
654+
let mut output = String::new();
655+
656+
let median = bs.ns_iter_summ.median as usize;
657+
let deviation = (bs.ns_iter_summ.max - bs.ns_iter_summ.min) as usize;
658+
659+
output.write_fmt(format_args!("{:>11} ns/iter (+/- {})",
660+
fmt_thousands_sep(median, ','),
661+
fmt_thousands_sep(deviation, ','))).unwrap();
629662
if bs.mb_s != 0 {
630-
format!("{:>9} ns/iter (+/- {}) = {} MB/s",
631-
bs.ns_iter_summ.median as usize,
632-
(bs.ns_iter_summ.max - bs.ns_iter_summ.min) as usize,
633-
bs.mb_s)
634-
} else {
635-
format!("{:>9} ns/iter (+/- {})",
636-
bs.ns_iter_summ.median as usize,
637-
(bs.ns_iter_summ.max - bs.ns_iter_summ.min) as usize)
663+
output.write_fmt(format_args!(" = {} MB/s", bs.mb_s)).unwrap();
638664
}
665+
output
639666
}
640667

641668
// A simple console test runner

0 commit comments

Comments
 (0)