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 /* 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