modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-5.c (about) 1 /* Like fp-cmp-4.c, but test that the setcc patterns are correct. */ 2 3 static int 4 test_isunordered(double x, double y) 5 { 6 return __builtin_isunordered(x, y); 7 } 8 9 static int 10 test_not_isunordered(double x, double y) 11 { 12 return !__builtin_isunordered(x, y); 13 } 14 15 static int 16 test_isless(double x, double y) 17 { 18 return __builtin_isless(x, y); 19 } 20 21 static int 22 test_not_isless(double x, double y) 23 { 24 return !__builtin_isless(x, y); 25 } 26 27 static int 28 test_islessequal(double x, double y) 29 { 30 return __builtin_islessequal(x, y); 31 } 32 33 static int 34 test_not_islessequal(double x, double y) 35 { 36 return !__builtin_islessequal(x, y); 37 } 38 39 static int 40 test_isgreater(double x, double y) 41 { 42 return __builtin_isgreater(x, y); 43 } 44 45 static int 46 test_not_isgreater(double x, double y) 47 { 48 return !__builtin_isgreater(x, y); 49 } 50 51 static int 52 test_isgreaterequal(double x, double y) 53 { 54 return __builtin_isgreaterequal(x, y); 55 } 56 57 static int 58 test_not_isgreaterequal(double x, double y) 59 { 60 return !__builtin_isgreaterequal(x, y); 61 } 62 63 static int 64 test_islessgreater(double x, double y) 65 { 66 return __builtin_islessgreater(x, y); 67 } 68 69 static int 70 test_not_islessgreater(double x, double y) 71 { 72 return !__builtin_islessgreater(x, y); 73 } 74 75 static void 76 one_test(double x, double y, int expected, 77 int (*pos) (double, double), int (*neg) (double, double)) 78 { 79 if ((*pos)(x, y) != expected) 80 abort (); 81 if ((*neg)(x, y) != !expected) 82 abort (); 83 } 84 85 #define NAN (0.0 / 0.0) 86 87 int 88 main() 89 { 90 struct try 91 { 92 double x, y; 93 int result[6]; 94 }; 95 96 static struct try const data[] = 97 { 98 { NAN, NAN, { 1, 0, 0, 0, 0, 0 } }, 99 { 0.0, NAN, { 1, 0, 0, 0, 0, 0 } }, 100 { NAN, 0.0, { 1, 0, 0, 0, 0, 0 } }, 101 { 0.0, 0.0, { 0, 0, 1, 0, 1, 0 } }, 102 { 1.0, 2.0, { 0, 1, 1, 0, 0, 1 } }, 103 { 2.0, 1.0, { 0, 0, 0, 1, 1, 1 } }, 104 }; 105 106 struct test 107 { 108 int (*pos)(double, double); 109 int (*neg)(double, double); 110 }; 111 112 static struct test const tests[] = 113 { 114 { test_isunordered, test_not_isunordered }, 115 { test_isless, test_not_isless }, 116 { test_islessequal, test_not_islessequal }, 117 { test_isgreater, test_not_isgreater }, 118 { test_isgreaterequal, test_not_isgreaterequal }, 119 { test_islessgreater, test_not_islessgreater } 120 }; 121 122 const int n = sizeof(data) / sizeof(data[0]); 123 int i, j; 124 125 for (i = 0; i < n; ++i) 126 for (j = 0; j < 6; ++j) 127 one_test (data[i].x, data[i].y, data[i].result[j], 128 tests[j].pos, tests[j].neg); 129 130 exit (0); 131 }