# HG changeset patch # User Chris Cannam # Date 1525943533 -3600 # Node ID 2b2b58ae8b592e0581cea38d295bfcf5a86f274d # Parent aab2d7177d3df944920dd1a74ac1725f7af1d2cb Tidy up rounding + tests diff -r aab2d7177d3d -r 2b2b58ae8b59 base/ScaleTickIntervals.h --- a/base/ScaleTickIntervals.h Fri May 04 14:05:41 2018 +0100 +++ b/base/ScaleTickIntervals.h Thu May 10 10:12:13 2018 +0100 @@ -266,7 +266,11 @@ if (display == Auto) { - int digits = (value != 0.0 ? 1 + int(floor(log10(abs(value)))) : 0); + double eps = 1e-10; + + int digits = (value != 0.0 ? + 1 + int(floor(eps + log10(abs(value)))) : + 0); // This is not the same logic as %g uses for determining // whether to delegate to use scientific or fixed notation diff -r aab2d7177d3d -r 2b2b58ae8b59 base/test/TestScaleTickIntervals.h --- a/base/test/TestScaleTickIntervals.h Fri May 04 14:05:41 2018 +0100 +++ b/base/test/TestScaleTickIntervals.h Thu May 10 10:12:13 2018 +0100 @@ -32,14 +32,14 @@ void printDiff(vector ticks, vector expected) { - SVCERR << "Have " << ticks.size() << " ticks, expected " - << expected.size() << endl; + SVCERR << "Have " << ticks.size() << " ticks, expected " + << expected.size() << endl; for (int i = 0; i < int(ticks.size()); ++i) { SVCERR << i << ": have " << ticks[i].value << " \"" - << ticks[i].label << "\", expected "; + << ticks[i].label << "\", expected "; if (i < int(expected.size())) { SVCERR << expected[i].value << " \"" << expected[i].label - << "\"" << endl; + << "\"" << endl; } else { SVCERR << "(n/a)" << endl; } @@ -50,27 +50,24 @@ ScaleTickIntervals::Ticks expected, bool fuzzier = false) { - double eps = 1e-7; for (int i = 0; i < int(expected.size()); ++i) { if (i < int(ticks.size())) { 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) { + double eps = fuzzier ? 1e-5 : 1e-10; + double diff = fabs(ticks[i].value - expected[i].value); + double limit = max(eps, fabs(ticks[i].value) * eps); + if (diff > limit) { 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()) {