Mercurial > hg > svcore
changeset 1415:12316a9bcc8f scale-ticks
After seeing them in action, I changed my mind about the wisdom of these trailing .0s
author | Chris Cannam |
---|---|
date | Thu, 04 May 2017 10:46:38 +0100 |
parents | c57994e1edd7 |
children | 9a8995785827 |
files | base/ScaleTickIntervals.h base/test/TestScaleTickIntervals.h |
diffstat | 2 files changed, 82 insertions(+), 54 deletions(-) [+] |
line wrap: on
line diff
--- a/base/ScaleTickIntervals.h Thu May 04 10:14:56 2017 +0100 +++ b/base/ScaleTickIntervals.h Thu May 04 10:46:38 2017 +0100 @@ -104,9 +104,9 @@ int prec = 1; if (fixed) { - if (precInc < 0) { + if (digInc < 0) { prec = -precInc; - } else if (precInc > 0) { + } else { prec = 0; } } else {
--- a/base/test/TestScaleTickIntervals.h Thu May 04 10:14:56 2017 +0100 +++ b/base/test/TestScaleTickIntervals.h Thu May 04 10:46:38 2017 +0100 @@ -47,17 +47,30 @@ } void compareTicks(vector<ScaleTickIntervals::Tick> ticks, - vector<ScaleTickIntervals::Tick> expected) + vector<ScaleTickIntervals::Tick> expected, + bool fuzzier = false) { double eps = 1e-7; for (int i = 0; i < int(expected.size()); ++i) { if (i < int(ticks.size())) { - if (ticks[i].label != expected[i].label || - fabs(ticks[i].value - expected[i].value) > eps) { + bool pass = true; + if (ticks[i].label != expected[i].label) { + pass = false; + } else if (!fuzzier) { + if (fabs(ticks[i].value - expected[i].value) > eps) { + pass = false; + } + } else { + if (fabs(ticks[i].value - expected[i].value) > + fabs(ticks[i].value) * 1e-5) { + pass = false; + } + } + if (!pass) { printDiff(ticks, expected); - } - QCOMPARE(ticks[i].label, expected[i].label); - QCOMPARE(ticks[i].value, expected[i].value); + QCOMPARE(ticks[i].label, expected[i].label); + QCOMPARE(ticks[i].value, expected[i].value); + } } } if (ticks.size() != expected.size()) { @@ -89,16 +102,13 @@ void linear_0_5_5() { auto ticks = ScaleTickIntervals::linear({ 0, 5, 5 }); - // generally if we have some activity in the units column, we - // should add .0 to satisfy the human worry that we aren't - // being told the whole story... vector<ScaleTickIntervals::Tick> expected { - { 0, "0.0" }, - { 1, "1.0" }, - { 2, "2.0" }, - { 3, "3.0" }, - { 4, "4.0" }, - { 5, "5.0" }, + { 0, "0" }, + { 1, "1" }, + { 2, "2" }, + { 3, "3" }, + { 4, "4" }, + { 5, "5" }, }; compareTicks(ticks.ticks, expected); } @@ -107,12 +117,12 @@ { auto ticks = ScaleTickIntervals::linear({ 0, 10, 5 }); vector<ScaleTickIntervals::Tick> expected { - { 0, "0.0" }, - { 2, "2.0" }, - { 4, "4.0" }, - { 6, "6.0" }, - { 8, "8.0" }, - { 10, "10.0" } + { 0, "0" }, + { 2, "2" }, + { 4, "4" }, + { 6, "6" }, + { 8, "8" }, + { 10, "10" } }; compareTicks(ticks.ticks, expected); } @@ -121,12 +131,12 @@ { auto ticks = ScaleTickIntervals::linear({ 10, 0, 5 }); vector<ScaleTickIntervals::Tick> expected { - { 0, "0.0" }, - { 2, "2.0" }, - { 4, "4.0" }, - { 6, "6.0" }, - { 8, "8.0" }, - { 10, "10.0" } + { 0, "0" }, + { 2, "2" }, + { 4, "4" }, + { 6, "6" }, + { 8, "8" }, + { 10, "10" } }; compareTicks(ticks.ticks, expected); } @@ -135,12 +145,12 @@ { auto ticks = ScaleTickIntervals::linear({ -10, 0, 5 }); vector<ScaleTickIntervals::Tick> expected { - { -10, "-10.0" }, - { -8, "-8.0" }, - { -6, "-6.0" }, - { -4, "-4.0" }, - { -2, "-2.0" }, - { 0, "0.0" } + { -10, "-10" }, + { -8, "-8" }, + { -6, "-6" }, + { -4, "-4" }, + { -2, "-2" }, + { 0, "0" } }; compareTicks(ticks.ticks, expected); } @@ -149,12 +159,12 @@ { auto ticks = ScaleTickIntervals::linear({ 0, -10, 5 }); vector<ScaleTickIntervals::Tick> expected { - { -10, "-10.0" }, - { -8, "-8.0" }, - { -6, "-6.0" }, - { -4, "-4.0" }, - { -2, "-2.0" }, - { 0, "0.0" } + { -10, "-10" }, + { -8, "-8" }, + { -6, "-6" }, + { -4, "-4" }, + { -2, "-2" }, + { 0, "0" } }; compareTicks(ticks.ticks, expected); } @@ -246,12 +256,12 @@ { auto ticks = ScaleTickIntervals::linear({ 10000, 10010, 5 }); vector<ScaleTickIntervals::Tick> expected { - { 10000, "10000.0" }, - { 10002, "10002.0" }, - { 10004, "10004.0" }, - { 10006, "10006.0" }, - { 10008, "10008.0" }, - { 10010, "10010.0" }, + { 10000, "10000" }, + { 10002, "10002" }, + { 10004, "10004" }, + { 10006, "10006" }, + { 10008, "10008" }, + { 10010, "10010" }, }; compareTicks(ticks.ticks, expected); } @@ -341,8 +351,8 @@ { auto ticks = ScaleTickIntervals::linear({ 2, 3, 1 }); vector<ScaleTickIntervals::Tick> expected { - { 2.0, "2.0" }, - { 3.0, "3.0" } + { 2.0, "2" }, + { 3.0, "3" } }; compareTicks(ticks.ticks, expected); } @@ -414,6 +424,7 @@ void linear_1_1_10() { + // pathological range auto ticks = ScaleTickIntervals::linear({ 1, 1, 10 }); vector<ScaleTickIntervals::Tick> expected { { 1.0, "1.0" } @@ -423,6 +434,7 @@ void linear_0_0_10() { + // pathological range auto ticks = ScaleTickIntervals::linear({ 0, 0, 10 }); vector<ScaleTickIntervals::Tick> expected { { 0.0, "0.0" } @@ -434,8 +446,8 @@ { auto ticks = ScaleTickIntervals::linear({ 0, 1, 1 }); vector<ScaleTickIntervals::Tick> expected { - { 0.0, "0.0" }, - { 1.0, "1.0" } + { 0.0, "0" }, + { 1.0, "1" } }; compareTicks(ticks.ticks, expected); } @@ -471,12 +483,28 @@ { auto ticks = ScaleTickIntervals::logarithmic({ 0, 10, 2 }); vector<ScaleTickIntervals::Tick> expected { - { 1e-10, "1.0e-10" }, - { pow(10.0, -4.5), "3.2e-05" }, - { 10.0, "1.0e+01" }, + { 1e-10, "1e-10" }, + { pow(10.0, -4.5), "3e-05" }, + { 10.0, "1e+01" }, }; compareTicks(ticks.ticks, expected); } + + void log_pi_avogadro_7() + { + auto ticks = ScaleTickIntervals::logarithmic({ M_PI, 6.022140857e23, 7 }); + vector<ScaleTickIntervals::Tick> expected { + { 3.16228, "3e+00" }, + { 6309.57, "6e+03" }, + { 1.25893e+07, "1e+07" }, + { 2.51189e+10, "3e+10" }, + { 5.01187e+13, "5e+13" }, + { 1e+17, "1e+17" }, + { 1.99526e+20, "2e+20" }, + { 3.98107e+23, "4e+23" }, + }; + compareTicks(ticks.ticks, expected, true); + } }; #endif