From 6e3b4d416ec5b8a438720b860110cf0704e7b3e1 Mon Sep 17 00:00:00 2001 From: Tom Henderson Date: Sun, 27 Nov 2016 07:55:09 -0800 Subject: [PATCH] stats: Increase floating-point arithmetic tolerance in a test The 'average' test suite, which used a constant TOLERANCE value of 1e-14 to check the MinMaxAvgTotalCalculator class computations, started to fail on a 32-bit Fedora 24 test machine because the arithmetic slightly exceeded a difference of 1e-14. This patch doubles the tolerance to 2e-14 to make this test pass again. --- src/stats/test/average-test-suite.cc | 40 +++++++++++++++------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/src/stats/test/average-test-suite.cc b/src/stats/test/average-test-suite.cc index dd1489f53..e94e9bb11 100644 --- a/src/stats/test/average-test-suite.cc +++ b/src/stats/test/average-test-suite.cc @@ -25,7 +25,9 @@ using namespace ns3; -const double TOLERANCE = 1e-14; +// Note, the rationale for this particular value of TOLERANCE is not +// documented. Current value is sufficient for all test platforms. +const double TOLERANCE = 2e-14; // =========================================================================== // Test case for a single integer. @@ -87,12 +89,12 @@ OneIntegerAverageTestCase::DoRun (void) stddev = std::sqrt (variance); // Test the calculator. - NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Count (), count, TOLERANCE, "Count value wrong"); - NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Min (), min, TOLERANCE, "Min value wrong"); - NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Max (), max, TOLERANCE, "Max value wrong"); - NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Mean (), mean, TOLERANCE, "Mean value wrong"); - NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Stddev (), stddev, TOLERANCE, "Stddev value wrong"); - NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Var (), variance, TOLERANCE, "Variance value wrong"); + NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Count (), count, TOLERANCE, "Count value outside of tolerance " << TOLERANCE << "; difference: " << calculator.Count () - count); + NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Min (), min, TOLERANCE, "Min value outside of tolerance " << TOLERANCE << "; difference: " << calculator.Min () - min); + NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Max (), max, TOLERANCE, "Max value outside of tolerance " << TOLERANCE << "; difference: " << calculator.Max () - max); + NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Mean (), mean, TOLERANCE, "Mean value outside of tolerance " << TOLERANCE << "; difference: " << calculator.Mean () - mean); + NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Stddev (), stddev, TOLERANCE, "Stddev value outside of tolerance " << TOLERANCE << "; difference: " << calculator.Stddev () - stddev); + NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Var (), variance, TOLERANCE, "Variance value outside of tolerance " << TOLERANCE << "; difference: " << calculator.Var () - variance); } @@ -156,12 +158,12 @@ FiveIntegersAverageTestCase::DoRun (void) stddev = std::sqrt (variance); // Test the calculator. - NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Count (), count, TOLERANCE, "Count value wrong"); - NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Min (), min, TOLERANCE, "Min value wrong"); - NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Max (), max, TOLERANCE, "Max value wrong"); - NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Mean (), mean, TOLERANCE, "Mean value wrong"); - NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Stddev (), stddev, TOLERANCE, "Stddev value wrong"); - NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Var (), variance, TOLERANCE, "Variance value wrong"); + NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Count (), count, TOLERANCE, "Count value outside of tolerance " << TOLERANCE << "; difference: " << calculator.Count () - count); + NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Min (), min, TOLERANCE, "Min value outside of tolerance " << TOLERANCE << "; difference: " << calculator.Min () - min); + NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Max (), max, TOLERANCE, "Max value outside of tolerance " << TOLERANCE << "; difference: " << calculator.Max () - max); + NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Mean (), mean, TOLERANCE, "Mean value outside of tolerance " << TOLERANCE << "; difference: " << calculator.Mean () - mean); + NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Stddev (), stddev, TOLERANCE, "Stddev value outside of tolerance " << TOLERANCE << "; difference: " << calculator.Stddev () - stddev); + NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Var (), variance, TOLERANCE, "Variance value outside of tolerance " << TOLERANCE << "; difference: " << calculator.Var () - variance); } @@ -225,12 +227,12 @@ FiveDoublesAverageTestCase::DoRun (void) stddev = std::sqrt (variance); // Test the calculator. - NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Count (), count, TOLERANCE, "Count value wrong"); - NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Min (), min, TOLERANCE, "Min value wrong"); - NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Max (), max, TOLERANCE, "Max value wrong"); - NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Mean (), mean, TOLERANCE, "Mean value wrong"); - NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Stddev (), stddev, TOLERANCE, "Stddev value wrong"); - NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Var (), variance, TOLERANCE, "Variance value wrong"); + NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Count (), count, TOLERANCE, "Count value outside of tolerance " << TOLERANCE << "; difference: " << calculator.Count () - count); + NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Min (), min, TOLERANCE, "Min value outside of tolerance " << TOLERANCE << "; difference: " << calculator.Min () - min); + NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Max (), max, TOLERANCE, "Max value outside of tolerance " << TOLERANCE << "; difference: " << calculator.Max () - max); + NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Mean (), mean, TOLERANCE, "Mean value outside of tolerance " << TOLERANCE << "; difference: " << calculator.Mean () - mean); + NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Stddev (), stddev, TOLERANCE, "Stddev value outside of tolerance " << TOLERANCE << "; difference: " << calculator.Stddev () - stddev); + NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Var (), variance, TOLERANCE, "Variance value outside of tolerance " << TOLERANCE << "; difference: " << calculator.Var () - variance); }