From 2b50c157d62f566fc367693cd15d55568fb5e33e Mon Sep 17 00:00:00 2001 From: Ulrik Sverdrup Date: Sun, 7 Jun 2015 19:23:56 +0200 Subject: [PATCH] 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 #10953 Fixes #26109 --- src/libtest/lib.rs | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/src/libtest/lib.rs b/src/libtest/lib.rs index da86e727c6874..cb14d16b525be 100644 --- a/src/libtest/lib.rs +++ b/src/libtest/lib.rs @@ -625,17 +625,44 @@ impl ConsoleTestState { } } +// Format a number with thousands separators +fn fmt_thousands_sep(mut n: usize, sep: char) -> String { + use std::fmt::Write; + let mut output = String::new(); + let mut first = true; + for &pow in &[9, 6, 3, 0] { + let base = 10_usize.pow(pow); + if pow == 0 || n / base != 0 { + if first { + output.write_fmt(format_args!("{}", n / base)).unwrap(); + } else { + output.write_fmt(format_args!("{:03}", n / base)).unwrap(); + } + if pow != 0 { + output.push(sep); + } + first = false; + } + n %= base; + } + + output +} + pub fn fmt_bench_samples(bs: &BenchSamples) -> String { + use std::fmt::Write; + let mut output = String::new(); + + let median = bs.ns_iter_summ.median as usize; + let deviation = (bs.ns_iter_summ.max - bs.ns_iter_summ.min) as usize; + + output.write_fmt(format_args!("{:>11} ns/iter (+/- {})", + fmt_thousands_sep(median, ','), + fmt_thousands_sep(deviation, ','))).unwrap(); if bs.mb_s != 0 { - format!("{:>9} ns/iter (+/- {}) = {} MB/s", - bs.ns_iter_summ.median as usize, - (bs.ns_iter_summ.max - bs.ns_iter_summ.min) as usize, - bs.mb_s) - } else { - format!("{:>9} ns/iter (+/- {})", - bs.ns_iter_summ.median as usize, - (bs.ns_iter_summ.max - bs.ns_iter_summ.min) as usize) + output.write_fmt(format_args!(" = {} MB/s", bs.mb_s)).unwrap(); } + output } // A simple console test runner