DoublesEqualFailure::DoublesEqualFailure(UtestShell* test, const char* fileName, int lineNumber, double expected, double actual, double threshold) : TestFailure(test, fileName, lineNumber) { message_ = createButWasString(StringFromOrNan(expected), StringFromOrNan(actual)); message_ += " threshold used was <"; message_ += StringFromOrNan(threshold); message_ += ">"; if (PlatformSpecificIsNan(expected) || PlatformSpecificIsNan(actual) || PlatformSpecificIsNan(threshold)) message_ += "\n\tCannot make comparisons with Nan"; }
bool doubles_equal(double d1, double d2, double threshold) { if (PlatformSpecificIsNan(d1) || PlatformSpecificIsNan(d2) || PlatformSpecificIsNan(threshold)) return false; if (PlatformSpecificIsInf(d1) && PlatformSpecificIsInf(d2)) { return true; } return PlatformSpecificFabs(d1 - d2) <= threshold; }
SimpleString StringFrom(double value, int precision) { if (PlatformSpecificIsNan(value)) return "Nan - Not a number"; else if (PlatformSpecificIsInf(value)) return "Inf - Infinity"; else return StringFromFormat("%.*g", precision, value); }
static SimpleString StringFromOrNan(double d) { if (PlatformSpecificIsNan(d)) return "Nan - Not a number"; return StringFrom(d); }
bool doubles_equal(double d1, double d2, double threshold) { if (PlatformSpecificIsNan(d1) || PlatformSpecificIsNan(d2) || PlatformSpecificIsNan(threshold)) return false; return PlatformSpecificFabs(d1 - d2) < threshold; }