xref: /aosp_15_r20/external/AFLplusplus/test/test-fp_NaNcases.c (revision 08b48e0b10e97b33e7b60c5b6e2243bd915777f2)
1 /* test cases for floating point comparison transformations
2  * compile with -DFLOAT_TYPE=float
3  *          or  -DFLOAT_TYPE=double
4  *          or  -DFLOAT_TYPE="long double"
5  */
6 
7 #include <assert.h>
8 #define _GNU_SOURCE
9 #include <math.h>                           /* for NaNs and infinity values */
10 
main()11 int main() {
12 
13   volatile FLOAT_TYPE a, b;
14 
15   /* NaN */
16 #ifdef NAN
17   a = (FLOAT_TYPE)NAN;                                      /* produces NaN */
18 #else
19   a = 0.0 / 0.0;                                            /* produces NaN */
20 #endif
21 #ifdef INFINITY
22   FLOAT_TYPE inf = (FLOAT_TYPE)INFINITY;
23 #else
24   FLOAT_TYPE inf = 1.0 / 0.0;                          /* produces infinity */
25 #endif
26   FLOAT_TYPE negZero = 1.0 / -inf;
27   FLOAT_TYPE posZero = 0.0;
28   b = a;
29 
30   assert(!(a < b));
31   assert(!(a <= b));
32   assert(!(a > b));
33   assert(!(a >= b));
34   assert((a != b));
35   assert(!(a == b));
36 
37   b = 0.0;
38   assert(!(a < b));
39   assert(!(a <= b));
40   assert(!(a > b));
41   assert(!(a >= b));
42   assert((a != b));
43   assert(!(a == b));
44 
45   b = 1.0 / -(1.0 / 0.0);                                     /* negative 0 */
46   assert(!(a < b));
47   assert(!(a <= b));
48   assert(!(a > b));
49   assert(!(a >= b));
50   assert((a != b));
51   assert(!(a == b));
52 
53   b = 42.0;
54   assert(!(a < b));
55   assert(!(a <= b));
56   assert(!(a > b));
57   assert(!(a >= b));
58   assert((a != b));
59   assert(!(a == b));
60 
61   b = -42.0;
62   assert(!(a < b));
63   assert(!(a <= b));
64   assert(!(a > b));
65   assert(!(a >= b));
66   assert((a != b));
67   assert(!(a == b));
68 
69   b = (1.0 / 0.0);                                     /* positive infinity */
70   assert(!(a < b));
71   assert(!(a <= b));
72   assert(!(a > b));
73   assert(!(a >= b));
74   assert((a != b));
75   assert(!(a == b));
76 
77   b = -(1.0 / 0.0);                                    /* negative infinity */
78   assert(!(a < b));
79   assert(!(a <= b));
80   assert(!(a > b));
81   assert(!(a >= b));
82   assert((a != b));
83   assert(!(a == b));
84 
85 }
86 
87