xref: /aosp_15_r20/external/AFLplusplus/test/test-fp_Infcases.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 #ifdef INFINITY
16   FLOAT_TYPE inf = (FLOAT_TYPE)INFINITY;
17 #else
18   FLOAT_TYPE inf = 1.0 / 0.0;                          /* produces infinity */
19 #endif
20   FLOAT_TYPE negZero = 1.0 / -inf;
21   FLOAT_TYPE posZero = 0.0;
22 
23   /* plus infinity */
24   a = (1.0 / 0.0);                                     /* positive infinity */
25   b = (1.0 / 0.0);                                     /* positive infinity */
26   assert(!(a < b));
27   assert((a <= b));
28   assert(!(a > b));
29   assert((a >= b));
30   assert(!(a != b));
31   assert((a == b));
32 
33   b = -(1.0 / 0.0);                                    /* negative infinity */
34   assert(!(a < b));
35   assert(!(a <= b));
36   assert((a > b));
37   assert((a >= b));
38   assert((a != b));
39   assert(!(a == b));
40 
41   b = 1.0 / -(1.0 / 0.0);                                     /* negative 0 */
42   assert(!(a < b));
43   assert(!(a <= b));
44   assert((a > b));
45   assert((a >= b));
46   assert((a != b));
47   assert(!(a == b));
48 
49   b = 0.0;                                                    /* positive 0 */
50   assert(!(a < b));
51   assert(!(a <= b));
52   assert((a > b));
53   assert((a >= b));
54   assert((a != b));
55   assert(!(a == b));
56 
57   b = -42.0;
58   assert(!(a < b));
59   assert(!(a <= b));
60   assert((a > b));
61   assert((a >= b));
62   assert((a != b));
63   assert(!(a == b));
64 
65   b = 42.0;
66   assert(!(a < b));
67   assert(!(a <= b));
68   assert((a > b));
69   assert((a >= b));
70   assert((a != b));
71   assert(!(a == b));
72 
73   /* negative infinity */
74   a = -(1.0 / 0.0);
75   b = (1.0 / 0.0);                                     /* positive infinity */
76   assert((a < b));
77   assert((a <= b));
78   assert(!(a > b));
79   assert(!(a >= b));
80   assert((a != b));
81   assert(!(a == b));
82 
83   b = -(1.0 / 0.0);                                    /* negative infinity */
84   assert(!(a < b));
85   assert((a <= b));
86   assert(!(a > b));
87   assert((a >= b));
88   assert(!(a != b));
89   assert((a == b));
90 
91   b = 1.0 / -(1.0 / 0.0);                                     /* negative 0 */
92   assert((a < b));
93   assert((a <= b));
94   assert(!(a > b));
95   assert(!(a >= b));
96   assert((a != b));
97   assert(!(a == b));
98 
99   b = 0.0;                                                    /* positive 0 */
100   assert((a < b));
101   assert((a <= b));
102   assert(!(a > b));
103   assert(!(a >= b));
104   assert((a != b));
105   assert(!(a == b));
106 
107   b = -42.0;
108   assert((a < b));
109   assert((a <= b));
110   assert(!(a > b));
111   assert(!(a >= b));
112   assert((a != b));
113   assert(!(a == b));
114 
115   b = 42.0;
116   assert((a < b));
117   assert((a <= b));
118   assert(!(a > b));
119   assert(!(a >= b));
120   assert((a != b));
121   assert(!(a == b));
122 
123 }
124 
125