diff options
author | Erik Schnetter <schnetter@gmail.com> | 2013-01-30 14:11:10 -0500 |
---|---|---|
committer | Erik Schnetter <schnetter@gmail.com> | 2013-01-30 14:11:10 -0500 |
commit | 1552fdd1aff91a5babf40ac94fdb39db5c5573b6 (patch) | |
tree | 3e8531d945db1db64c0fba13a7f39749bde133b8 /test.cc | |
parent | 3093469cc24f519082328ee0ca814581c34a7faf (diff) | |
download | vecmathlib-1552fdd1aff91a5babf40ac94fdb39db5c5573b6.zip vecmathlib-1552fdd1aff91a5babf40ac94fdb39db5c5573b6.tar.gz |
Be more verbose about failing tests
Diffstat (limited to 'test.cc')
-rw-r--r-- | test.cc | 18 |
1 files changed, 11 insertions, 7 deletions
@@ -41,7 +41,7 @@ struct vecmathlib_test { // Test each function with this many random values static int const imax = 10000; - // Require that 3/4 of the digits are correct + // Require (arbitrarily) that 3/4 of the digits are correct static real_t constexpr accuracy = pow(realvec_t::epsilon(), R(0.75)); @@ -83,14 +83,16 @@ struct vecmathlib_test { } realvec_t const rvml = fvml(x); realvec_t const dr = rstd - rvml; - if (any(fabs(dr) > - realvec_t(accuracy) * (fabs(rstd) + fabs(rvml) + realvec_t(1.0)))) - { + realvec_t const scale = fabs(rstd) + fabs(rvml) + realvec_t(1.0); + boolvec_t const isbad = fabs(dr) > realvec_t(accuracy) * scale; + if (any(isbad)) { ++ num_errors; cout << setprecision(realvec_t::digits10+2) << "Error in " << func << "(" << x << "):\n" << " fstd(x)=" << rstd << "\n" << " fvml(x)=" << rvml << "\n" + << " rel-error(x)=" << fabs(dr) / scale << "\n" + << " isbad(x)=" << isbad << "\n" << flush; } } @@ -108,14 +110,16 @@ struct vecmathlib_test { } realvec_t const rvml = fvml(x, y); realvec_t const dr = rstd - rvml; - if (any(fabs(dr) > - realvec_t(accuracy) * (fabs(rstd) + fabs(rvml) + realvec_t(1.0)))) - { + realvec_t const scale = fabs(rstd) + fabs(rvml) + realvec_t(1.0); + boolvec_t const isbad = fabs(dr) > realvec_t(accuracy) * scale; + if (any(isbad)) { ++ num_errors; cout << setprecision(realvec_t::digits10+1) << "Error in " << func << "(" << x << "," << y << "):\n" << " fstd(x,y)=" << rstd << "\n" << " fvml(x,y)=" << rvml << "\n" + << " rel-error(x,y)=" << fabs(dr) / scale << "\n" + << " isbad(x,y)=" << isbad << "\n" << flush; } } |