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