tally: invert histograms so maximum is on top.
authorRusty Russell <rusty@rustcorp.com.au>
Sat, 25 Sep 2010 02:22:27 +0000 (11:52 +0930)
committerRusty Russell <rusty@rustcorp.com.au>
Sat, 25 Sep 2010 02:22:27 +0000 (11:52 +0930)
ccan/tally/tally.c
ccan/tally/test/run-histogram.c

index b3ac863ba68119aedc59973b72c1d3716bb35867..b89b0600ac301d0f5d088cb5a31176c841e1c8c3 100644 (file)
@@ -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 = '|';
index 2690cebdff9aec5e555298baf92e17f65fcd6a21..a9894ecd8539eb3113241a2dfa171bf4bd6a09d2 100644 (file)
@@ -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] == '|');