Get isfinite, isinf, and isnan right in jerry-math (#4497)

- `finite` is not C99 but a BSD fp classification function, so it
  is removed.
- The standard specifies that `isnan` is a macro (just like
  `isfinite` and `isinf`), so the `isnan` function implementation
  is removed.
- `isfinite` incorrectly classified NAN as finite, which is fixed.
- `isinf` returned 1 for negative infinity. This is not a bug
  according to the standard, but is not aligned with recent glibc,
  which returns -1. This is changed to simplify testing.
- Added test cases for `isfinite` and `isinf` to the unit test of
  jerry-math.
- Added a new pass to unittests to ensure that jerry-math is
  tested.

JerryScript-DCO-1.0-Signed-off-by: Akos Kiss akiss@inf.u-szeged.hu
This commit is contained in:
Akos Kiss
2021-01-18 15:07:25 +01:00
committed by GitHub
parent c4676a21fe
commit ef8a6a9f39
8 changed files with 69 additions and 111 deletions
+30
View File
@@ -396,6 +396,36 @@ check_double ("fmod (6.5, 2.3)", fmod (6.5, 2.3), 1.90000000000000035527E+00);
check_double ("fmod (6.5, -2.3)", fmod (6.5, -2.3), 1.90000000000000035527E+00);
check_double ("fmod (-6.5, 2.3)", fmod (-6.5, 2.3), -1.90000000000000035527E+00);
check_double ("fmod (-6.5, -2.3)", fmod (-6.5, -2.3), -1.90000000000000035527E+00);
check_int ("isfinite (0.0)", isfinite (0.0), 1);
check_int ("isfinite (-0.0)", isfinite (-0.0), 1);
check_int ("isfinite (1.0)", isfinite (1.0), 1);
check_int ("isfinite (-1.0)", isfinite (-1.0), 1);
check_int ("isfinite (INFINITY)", isfinite (INFINITY), 0);
check_int ("isfinite (-INFINITY)", isfinite (-INFINITY), 0);
check_int ("isfinite (NAN)", isfinite (NAN), 0);
check_int ("isfinite (3.14)", isfinite (3.14), 1);
check_int ("isfinite (-3.14)", isfinite (-3.14), 1);
check_int ("isfinite (0.7)", isfinite (0.7), 1);
check_int ("isfinite (-0.7)", isfinite (-0.7), 1);
check_int ("isfinite (3.72e-09)", isfinite (3.72e-09), 1);
check_int ("isfinite (-3.72e-09)", isfinite (-3.72e-09), 1);
check_int ("isfinite (7.37e+19)", isfinite (7.37e+19), 1);
check_int ("isfinite (-7.37e+19)", isfinite (-7.37e+19), 1);
check_int ("isinf (0.0)", isinf (0.0), 0);
check_int ("isinf (-0.0)", isinf (-0.0), 0);
check_int ("isinf (1.0)", isinf (1.0), 0);
check_int ("isinf (-1.0)", isinf (-1.0), 0);
check_int ("isinf (INFINITY)", isinf (INFINITY), 1);
check_int ("isinf (-INFINITY)", isinf (-INFINITY), -1);
check_int ("isinf (NAN)", isinf (NAN), 0);
check_int ("isinf (3.14)", isinf (3.14), 0);
check_int ("isinf (-3.14)", isinf (-3.14), 0);
check_int ("isinf (0.7)", isinf (0.7), 0);
check_int ("isinf (-0.7)", isinf (-0.7), 0);
check_int ("isinf (3.72e-09)", isinf (3.72e-09), 0);
check_int ("isinf (-3.72e-09)", isinf (-3.72e-09), 0);
check_int ("isinf (7.37e+19)", isinf (7.37e+19), 0);
check_int ("isinf (-7.37e+19)", isinf (-7.37e+19), 0);
check_int ("isnan (0.0)", isnan (0.0), 0);
check_int ("isnan (-0.0)", isnan (-0.0), 0);
check_int ("isnan (1.0)", isnan (1.0), 0);