modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/ieee/mzero4.c (about) 1 /* Copyright (C) 2003 Free Software Foundation. 2 by Roger Sayle <roger@eyesopen.com>, derived from mzero3.c 3 4 Constant folding of sin(-0.0), tan(-0.0) and atan(-0.0) should 5 all return -0.0, for both double and float forms. */ 6 7 void abort (void); 8 typedef __SIZE_TYPE__ size_t; 9 extern int memcmp (const void *, const void *, size_t); 10 11 double sin (double); 12 double tan (double); 13 double atan (double); 14 15 float sinf (float); 16 float tanf (float); 17 float atanf (float); 18 19 void expectd (double, double); 20 void expectf (float, float); 21 22 void 23 expectd (double value, double expected) 24 { 25 if (value != expected 26 || memcmp ((void *)&value, (void *) &expected, sizeof (double)) != 0) 27 abort (); 28 } 29 30 void 31 expectf (float value, float expected) 32 { 33 if (value != expected 34 || memcmp ((void *)&value, (void *) &expected, sizeof (float)) != 0) 35 abort (); 36 } 37 38 int main () 39 { 40 expectd (sin (0.0), 0.0); 41 expectd (tan (0.0), 0.0); 42 expectd (atan (0.0), 0.0); 43 44 expectd (sin (-0.0), -0.0); 45 expectd (tan (-0.0), -0.0); 46 expectd (atan (-0.0), -0.0); 47 48 expectf (sinf (0.0f), 0.0f); 49 expectf (tanf (0.0f), 0.0f); 50 expectf (atanf (0.0f), 0.0f); 51 52 expectf (sinf (-0.0f), -0.0f); 53 expectf (tanf (-0.0f), -0.0f); 54 expectf (atanf (-0.0f), -0.0f); 55 56 return 0; 57 } 58