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:
@@ -72,6 +72,9 @@ JERRY_UNITTESTS_OPTIONS = [
|
||||
skip=skip_if((sys.platform == 'win32'), 'FEATURE_INIT_FINI build flag isn\'t supported on Windows,' +
|
||||
' because Microsoft Visual C/C++ Compiler doesn\'t support' +
|
||||
' library constructors and destructors.')),
|
||||
Options('unittests-es5.1-debug-math',
|
||||
OPTIONS_COMMON + OPTIONS_UNITTESTS + OPTIONS_PROFILE_ES51 + OPTIONS_DEBUG
|
||||
+ ['--jerry-math=on']),
|
||||
]
|
||||
|
||||
# Test options for jerry-tests
|
||||
|
||||
@@ -442,25 +442,6 @@ main (int argc, char **args)
|
||||
GEN_DBL_TEST (fabs (7.37e+19));
|
||||
GEN_DBL_TEST (fabs (-7.37e+19));
|
||||
|
||||
/* finite tests */
|
||||
/* SKIPPED: not publicly declared in jerry-math
|
||||
GEN_INT_TEST (finite (0.0));
|
||||
GEN_INT_TEST (finite (-0.0));
|
||||
GEN_INT_TEST (finite (1.0));
|
||||
GEN_INT_TEST (finite (-1.0));
|
||||
GEN_INT_TEST (finite (INFINITY));
|
||||
GEN_INT_TEST (finite (-INFINITY));
|
||||
GEN_INT_TEST (finite (NAN));
|
||||
GEN_INT_TEST (finite (3.14));
|
||||
GEN_INT_TEST (finite (-3.14));
|
||||
GEN_INT_TEST (finite (0.7));
|
||||
GEN_INT_TEST (finite (-0.7));
|
||||
GEN_INT_TEST (finite (3.72e-09));
|
||||
GEN_INT_TEST (finite (-3.72e-09));
|
||||
GEN_INT_TEST (finite (7.37e+19));
|
||||
GEN_INT_TEST (finite (-7.37e+19));
|
||||
*/
|
||||
|
||||
/* floor tests */
|
||||
GEN_DBL_TEST (floor (0.0));
|
||||
GEN_DBL_TEST (floor (-0.0));
|
||||
@@ -533,6 +514,40 @@ main (int argc, char **args)
|
||||
GEN_DBL_TEST (fmod (-6.5, 2.3));
|
||||
GEN_DBL_TEST (fmod (-6.5, -2.3));
|
||||
|
||||
/* isfinite tests */
|
||||
GEN_INT_TEST (isfinite (0.0));
|
||||
GEN_INT_TEST (isfinite (-0.0));
|
||||
GEN_INT_TEST (isfinite (1.0));
|
||||
GEN_INT_TEST (isfinite (-1.0));
|
||||
GEN_INT_TEST (isfinite (INFINITY));
|
||||
GEN_INT_TEST (isfinite (-INFINITY));
|
||||
GEN_INT_TEST (isfinite (NAN));
|
||||
GEN_INT_TEST (isfinite (3.14));
|
||||
GEN_INT_TEST (isfinite (-3.14));
|
||||
GEN_INT_TEST (isfinite (0.7));
|
||||
GEN_INT_TEST (isfinite (-0.7));
|
||||
GEN_INT_TEST (isfinite (3.72e-09));
|
||||
GEN_INT_TEST (isfinite (-3.72e-09));
|
||||
GEN_INT_TEST (isfinite (7.37e+19));
|
||||
GEN_INT_TEST (isfinite (-7.37e+19));
|
||||
|
||||
/* isinf tests */
|
||||
GEN_INT_TEST (isinf (0.0));
|
||||
GEN_INT_TEST (isinf (-0.0));
|
||||
GEN_INT_TEST (isinf (1.0));
|
||||
GEN_INT_TEST (isinf (-1.0));
|
||||
GEN_INT_TEST (isinf (INFINITY));
|
||||
GEN_INT_TEST (isinf (-INFINITY));
|
||||
GEN_INT_TEST (isinf (NAN));
|
||||
GEN_INT_TEST (isinf (3.14));
|
||||
GEN_INT_TEST (isinf (-3.14));
|
||||
GEN_INT_TEST (isinf (0.7));
|
||||
GEN_INT_TEST (isinf (-0.7));
|
||||
GEN_INT_TEST (isinf (3.72e-09));
|
||||
GEN_INT_TEST (isinf (-3.72e-09));
|
||||
GEN_INT_TEST (isinf (7.37e+19));
|
||||
GEN_INT_TEST (isinf (-7.37e+19));
|
||||
|
||||
/* isnan tests */
|
||||
GEN_INT_TEST (isnan (0.0));
|
||||
GEN_INT_TEST (isnan (-0.0));
|
||||
|
||||
Reference in New Issue
Block a user