From 60b47bf5e0878f014eb1e33e7784c92e43e2fcb6 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Sat, 25 Sep 2010 11:52:27 +0930 Subject: [PATCH] tally: invert histograms so maximum is on top. --- ccan/tally/tally.c | 13 ++++++++----- ccan/tally/test/run-histogram.c | 21 ++++++--------------- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/ccan/tally/tally.c b/ccan/tally/tally.c index b3ac863b..b89b0600 100644 --- a/ccan/tally/tally.c +++ b/ccan/tally/tally.c @@ -455,14 +455,17 @@ char *tally_histogram(const struct tally *tally, } for (i = 0; i < height; i++) { - unsigned covered = 1; - count = (double)tally->counts[i] / largest_bucket * (width-1)+1; + unsigned covered = 1, row; - if (i == 0) + /* People expect minimum at the bottom. */ + row = height - i - 1; + count = (double)tally->counts[row] / largest_bucket * (width-1)+1; + + if (row == 0) covered = snprintf(p, width, "%zi", tally->min); - else if (i == height - 1) + else if (row == height - 1) covered = snprintf(p, width, "%zi", tally->max); - else if (i == bucket_of(tally->min, tally->step_bits, 0)) + else if (row == bucket_of(tally->min, tally->step_bits, 0)) *p = '+'; else *p = '|'; diff --git a/ccan/tally/test/run-histogram.c b/ccan/tally/test/run-histogram.c index 2690cebd..a9894ecd 100644 --- a/ccan/tally/test/run-histogram.c +++ b/ccan/tally/test/run-histogram.c @@ -6,7 +6,6 @@ int main(void) int i; struct tally *tally; char *graph, *p; - bool trunc; plan_tests(100 + 1 + 10 + 1 + 100 + 1 + 10 + 1 + 10 * 2 + 1); @@ -28,21 +27,13 @@ int main(void) free(graph); /* Reduced height. */ - trunc = false; graph = p = tally_histogram(tally, 20, 10); for (i = 0; i < 10; i++) { char *eol = strchr(p, '\n'); - /* Last once can be truncated (bucket aliasing) */ + /* First once can be truncated (bucket aliasing) */ if (eol) { - if (eol - p < 20) { - ok1(!trunc); - trunc = true; - } else if (eol - p == 20) { - ok1(!trunc); - } else { - fail("Overwidth line %s", p); - } + ok1(eol - p == 20 || (eol - p < 20 && i == 0)); } else /* We should, at worst, half-fill graph */ ok1(i > 5); @@ -76,7 +67,7 @@ int main(void) graph = p = tally_histogram(tally, 10, 10); for (i = 0; i < 10; i++) { char *eol = strchr(p, '\n'); - ok1(eol - p == i+1); + ok1(eol - p == 10 - i); p = eol + 1; } ok1(!*p); @@ -99,10 +90,10 @@ int main(void) /* Check min/max labels. */ if (i == 0) - ok1(strncmp(p, "-5*", 3) == 0); - else if (i == 9) ok1(strncmp(p, "4*", 2) == 0); - else if (i == 5) + else if (i == 9) + ok1(strncmp(p, "-5*", 3) == 0); + else if (i == 4) ok1(p[0] == '+'); /* 0 marker */ else ok1(p[0] == '|'); -- 2.39.2