IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 12390


Ignore:
Timestamp:
Mar 9, 2007, 2:56:02 PM (19 years ago)
Author:
jhoblitt
Message:

correctly compare float/double NAN values

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/test/pstap/src/pstap.h

    r12384 r12390  
     1#include <math.h>
     2
    13#include <pslib.h>
    24
     
    2224
    2325// use to test the value of a float
    24 # define ok_float(VALUE, EXPECT, ...)\
     26# define ok_float(VALUE, EXPECT, ...) \
    2527{ \
    26     bool status = (fabsf(VALUE - EXPECT) < FLT_EPSILON); \
     28    bool status = false; \
     29    if (isnan(EXPECT)) { \
     30        status = isnan(VALUE); \
     31    } else { \
     32        status = (fabsf(VALUE - EXPECT) < FLT_EPSILON); \
     33    } \
    2734    ok(status, __VA_ARGS__); \
    2835    if (!status) { \
     
    3643# define ok_float_tol(VALUE,EXPECT,TOL,...)\
    3744{ \
    38     bool status = (fabsf((VALUE) - (EXPECT)) < (TOL)); \
     45    bool status = false; \
     46    if (isnan(EXPECT)) { \
     47        status = isnan(VALUE); \
     48    } else { \
     49        status = (fabsf((VALUE) - (EXPECT)) < (TOL)); \
     50    } \
    3951    ok(status, __VA_ARGS__); \
    4052    if (!status) { \
     
    4759# define ok_double(VALUE,EXPECT,...)\
    4860{ \
    49     bool status = (fabs(VALUE - EXPECT) < DBL_EPSILON); \
     61    bool status = false; \
     62    if (isnan(EXPECT)) { \
     63        status = isnan(VALUE); \
     64    } else { \
     65        status = (fabs(VALUE - EXPECT) < DBL_EPSILON); \
     66    } \
    5067    ok(status, __VA_ARGS__); \
    5168    if (!status) { \
     
    5572}
    5673
    57 // use to test the value of a float
    58 # define ok_float_tol(VALUE,EXPECT,TOL, ...)\
    59 { \
    60     bool status = (fabsf((VALUE) - (EXPECT)) < (TOL)); \
    61     ok(status, __VA_ARGS__); \
    62     if (!status) { \
    63         diag("         got: '%f'", VALUE); \
    64         diag("    expected: '%f' +/- %f", EXPECT, TOL); \
    65     } \
    66 }
    67 
    6874// use to test the value of a double
    6975# define ok_double_tol(VALUE,EXPECT,TOL, ...)\
    7076{ \
    71     bool status = (fabs((VALUE) - (EXPECT)) < (TOL)); \
     77    bool status = false; \
     78    if (isnan(EXPECT)) { \
     79        status = isnan(VALUE); \
     80    } else { \
     81        status = (fabs((VALUE) - (EXPECT)) < (TOL)); \
     82    } \
    7283    ok(status, __VA_ARGS__); \
    7384    if (!status) { \
Note: See TracChangeset for help on using the changeset viewer.