/// @file /// @brief Test for iue::num::islcose #include "iue-num/numerics.hpp" // iue::num::islcose #include // assert #include // EXIT_SUCCESS #include // std::numeric_limits int main() { const double eps = std::numeric_limits::epsilon(); const double inf = std::numeric_limits::infinity(); const double nan = std::numeric_limits::quiet_NaN(); { // infinity assert(iue::num::isclose(inf, inf, 0.0, 0.0)); assert(iue::num::isclose(-inf, -inf, 0.0, 0.0)); assert(!iue::num::isclose(-inf, inf, 0.0, 0.0)); assert(!iue::num::isclose(inf, -inf, 0.0, 0.0)); } { // nan assert(!iue::num::isclose(nan, nan, inf, inf)); } { // around 1.0 double a = 1.0; double b = 1.0 + eps; // rel error assert(iue::num::isclose(a, b, 0.0, 2 * eps)); assert(!iue::num::isclose(a, b, 0.0, 0.0)); // abs error assert(iue::num::isclose(a, b, 2 * eps, 0.0)); assert(!iue::num::isclose(a, b, 0.0, 0.0)); } { // around 1e10 double a = 1.0 * 1e10; double b = (1.0 + eps) * 1e10; // rel error assert(iue::num::isclose(a, b, 0.0, 2 * eps)); assert(!iue::num::isclose(a, b, 0.0, 0.0)); // abs error assert(iue::num::isclose(a, b, 1e10 * 2 * eps, 0.0)); assert(!iue::num::isclose(a, b, 1e9 * 2 * eps, 0.0)); } { // around 1e-10 double a = 1.0 * 1e-10; double b = (1.0 + eps) * 1e-10; // rel error assert(iue::num::isclose(a, b, 0.0, 2 * eps)); assert(!iue::num::isclose(a, b, 0.0, 0.0)); // abs error assert(iue::num::isclose(a, b, 1e-10 * 2 * eps, 0.0)); assert(!iue::num::isclose(a, b, 1e-11 * 2 * eps, 0.0)); } return EXIT_SUCCESS; }