about summary refs log tree commit diff
path: root/src/libtest
diff options
context:
space:
mode:
authorUlrik Sverdrup <root@localhost>2015-06-07 19:23:56 +0200
committerUlrik Sverdrup <root@localhost>2015-06-09 02:50:42 +0200
commit2b50c157d62f566fc367693cd15d55568fb5e33e (patch)
tree8228009d829bd4eefe3c1cb6473dd42787ac8e02 /src/libtest
parent32037a5696272f1c34f3692dcdc59b4ada91bdc7 (diff)
downloadrust-2b50c157d62f566fc367693cd15d55568fb5e33e.tar.gz
rust-2b50c157d62f566fc367693cd15d55568fb5e33e.zip
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
Diffstat (limited to 'src/libtest')
-rw-r--r--src/libtest/lib.rs43
1 files changed, 35 insertions, 8 deletions
diff --git a/src/libtest/lib.rs b/src/libtest/lib.rs
index da86e727c68..cb14d16b525 100644
--- a/src/libtest/lib.rs
+++ b/src/libtest/lib.rs
@@ -625,17 +625,44 @@ impl<T: Write> ConsoleTestState<T> {
     }
 }
 
+// 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