* Assert that ``actual`` is within ± ``epsilon`` of ``expected``. * * @param {number} actual - Test value. * @param {number} expected - Value number is expected to be close to. * @param {number} epsilon - Magnitude of allowed difference between ``actual`` and ``expected``. *
(actual, expected, epsilon, description)
| 1797 | * @param {string} [description] - Description of the condition being tested. |
| 1798 | */ |
| 1799 | function assert_approx_equals(actual, expected, epsilon, description) |
| 1800 | { |
| 1801 | /* |
| 1802 | * Test if two primitive numbers are equal within +/- epsilon |
| 1803 | */ |
| 1804 | assert(typeof actual === "number", |
| 1805 | "assert_approx_equals", description, |
| 1806 | "expected a number but got a ${type_actual}", |
| 1807 | {type_actual:typeof actual}); |
| 1808 | |
| 1809 | // The epsilon math below does not place nice with NaN and Infinity |
| 1810 | // But in this case Infinity = Infinity and NaN = NaN |
| 1811 | if (isFinite(actual) || isFinite(expected)) { |
| 1812 | assert(Math.abs(actual - expected) <= epsilon, |
| 1813 | "assert_approx_equals", description, |
| 1814 | "expected ${expected} +/- ${epsilon} but got ${actual}", |
| 1815 | {expected:expected, actual:actual, epsilon:epsilon}); |
| 1816 | } else { |
| 1817 | assert_equals(actual, expected); |
| 1818 | } |
| 1819 | } |
| 1820 | expose_assert(assert_approx_equals, "assert_approx_equals"); |
| 1821 | |
| 1822 | /** |
no test coverage detected