X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Ftests%2Frealops.cpp;fp=src%2Ftests%2Frealops.cpp;h=3c863a13ded3043dfeec58209f97cfe48853e02b;hp=dd45aa8dbd58a36f27bdaae9ff6bdc100144808b;hb=71df61ab8ea302247ad35ccdc973bc8e0cafd5b1;hpb=1d179b93f6a1b2a4fe3823c26fba862c24bc5d6e diff --git a/src/tests/realops.cpp b/src/tests/realops.cpp index dd45aa8..3c863a1 100644 --- a/src/tests/realops.cpp +++ b/src/tests/realops.cpp @@ -25,6 +25,8 @@ int main(int argc, char ** argv) DebugRealInfo(); unsigned failures = 0; + Real acumulate(0); + double dacumulate = 0; for (unsigned i = 0; i < TEST_CASES; ++i) { //Debug("Test %u of %u", i, TEST_CASES); @@ -129,6 +131,49 @@ int main(int argc, char ** argv) Warn("a = b = %f should be %f, a before op was %f", Double(a), da, Double(abeforeop)); } + if (NotEqual(Double(-a), -da)) + { + failures++; + Warn("-a = %f should be %f, a before op was %f", Double(-a), -da, Double(abeforeop)); + } + + if (NotEqual(Double(Sqrt(a)), Sqrt(da))) + { + failures++; + Warn("Sqrt(a) = %f should be %f, a before op was %f", Double(Sqrt(a)), Sqrt(da), Double(abeforeop)); + } + + if (NotEqual(Double(a), da)) + { + failures++; + Warn("a = %f, should be %f, a before ops was %f", Double(a), da, Double(abeforeop)); + } + + switch (rand() % 4) + { + case 0: + acumulate += a; + dacumulate += da; + break; + case 1: + acumulate -= a; + dacumulate -= da; + break; + case 2: + acumulate *= a; + dacumulate *= da; + break; + case 3: + acumulate /= a; + dacumulate /= da; + break; + } + if (NotEqual(Double(acumulate), dacumulate)) + { + Warn("Accumulated result %.30lf vs %.30lf is wrong", Double(acumulate), dacumulate); + failures++; + } + if (failures > old_failures) { Error("%u failures on case %u da = %f, db = %f, a = %f, b = %f, aa = %f, bb = %f", failures-old_failures, i, da, db, Double(a), Double(b), Double(aa), Double(bb)); @@ -136,8 +181,12 @@ int main(int argc, char ** argv) Debug("\tStrings are a = %s, b = %s, aa = %s, bb = %s", a.Str().c_str(), b.Str().c_str(), aa.Str().c_str(), bb.Str().c_str()); #endif } + } - Debug("Completed %u test cases with total of %u operations, %u failures", TEST_CASES, 12*TEST_CASES, failures); + Debug("Completed %u test cases with total of %u operations, %u failures", TEST_CASES, 18*TEST_CASES, failures); Debug("Total accumulated difference between Real and Double operations was %f", g_totalerror); + Debug("Real: %.40lf", Double(acumulate)); + Debug("Doub: %.40lf", dacumulate); + Debug("Diff: %.40lf", Double(acumulate) - dacumulate); }