diff options
Diffstat (limited to 'Build/source/libs/icu/icu-src/source/test/intltest/intltest.cpp')
-rw-r--r-- | Build/source/libs/icu/icu-src/source/test/intltest/intltest.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/intltest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/intltest.cpp index 7ff28961271..f2956ebcb48 100644 --- a/Build/source/libs/icu/icu-src/source/test/intltest/intltest.cpp +++ b/Build/source/libs/icu/icu-src/source/test/intltest/intltest.cpp @@ -2188,14 +2188,20 @@ UBool IntlTest::assertEqualsNear(const char* message, double expected, double actual, double delta) { + bool bothNaN = std::isnan(expected) && std::isnan(actual); + bool bothPosInf = uprv_isPositiveInfinity(expected) && uprv_isPositiveInfinity(actual); + bool bothNegInf = uprv_isNegativeInfinity(expected) && uprv_isNegativeInfinity(actual); + if (bothPosInf || bothNegInf || bothNaN) { + // We don't care about delta in these cases + return TRUE; + } if (std::isnan(delta) || std::isinf(delta)) { errln((UnicodeString)("FAIL: ") + message + "; nonsensical delta " + delta + - " - delta may not be NaN or Inf"); + " - delta may not be NaN or Inf. (Got " + actual + "; expected " + expected + ".)"); return FALSE; } - bool bothNaN = std::isnan(expected) && std::isnan(actual); double difference = std::abs(expected - actual); - if (expected != actual && (difference > delta || std::isnan(difference)) && !bothNaN) { + if (expected != actual && (difference > delta || std::isnan(difference))) { errln((UnicodeString)("FAIL: ") + message + "; got " + actual + "; expected " + expected + "; acceptable delta " + delta); return FALSE; |