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