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()11int 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