modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/gofast.c (about)

     1  /* { dg-skip-if "requires io" { freestanding } }  */
     2  
     3  /* Program to test gcc's usage of the gofast library.  */
     4  
     5  /* The main guiding themes are to make it trivial to add test cases over time
     6     and to make it easy for a program to parse the output to see if the right
     7     libcalls are being made.  */
     8  
     9  #include <stdio.h>
    10  
    11  float fp_add (float a, float b) { return a + b; }
    12  float fp_sub (float a, float b) { return a - b; }
    13  float fp_mul (float a, float b) { return a * b; }
    14  float fp_div (float a, float b) { return a / b; }
    15  float fp_neg (float a) { return -a; }
    16  
    17  double dp_add (double a, double b) { return a + b; }
    18  double dp_sub (double a, double b) { return a - b; }
    19  double dp_mul (double a, double b) { return a * b; }
    20  double dp_div (double a, double b) { return a / b; }
    21  double dp_neg (double a) { return -a; }
    22  
    23  double fp_to_dp (float f) { return f; }
    24  float dp_to_fp (double d) { return d; }
    25  
    26  int eqsf2 (float a, float b) { return a == b; }
    27  int nesf2 (float a, float b) { return a != b; }
    28  int gtsf2 (float a, float b) { return a > b; }
    29  int gesf2 (float a, float b) { return a >= b; }
    30  int ltsf2 (float a, float b) { return a < b; }
    31  int lesf2 (float a, float b) { return a <= b; }
    32  
    33  int eqdf2 (double a, double b) { return a == b; }
    34  int nedf2 (double a, double b) { return a != b; }
    35  int gtdf2 (double a, double b) { return a > b; }
    36  int gedf2 (double a, double b) { return a >= b; }
    37  int ltdf2 (double a, double b) { return a < b; }
    38  int ledf2 (double a, double b) { return a <= b; }
    39  
    40  float floatsisf (int i) { return i; }
    41  double floatsidf (int i) { return i; }
    42  int fixsfsi (float f) { return f; }
    43  int fixdfsi (double d) { return d; }
    44  unsigned int fixunssfsi (float f) { return f; }
    45  unsigned int fixunsdfsi (double d) { return d; }
    46  
    47  int fail_count = 0;
    48  
    49  int
    50  fail (char *msg)
    51  {
    52    fail_count++;
    53    fprintf (stderr, "Test failed: %s\n", msg);
    54  }
    55  
    56  int
    57  main()
    58  {
    59    if (fp_add (1, 1) != 2) fail ("fp_add 1+1");
    60    if (fp_sub (3, 2) != 1) fail ("fp_sub 3-2");
    61    if (fp_mul (2, 3) != 6) fail ("fp_mul 2*3");
    62    if (fp_div (3, 2) != 1.5) fail ("fp_div 3/2");
    63    if (fp_neg (1) != -1) fail ("fp_neg 1");
    64  
    65    if (dp_add (1, 1) != 2) fail ("dp_add 1+1");
    66    if (dp_sub (3, 2) != 1) fail ("dp_sub 3-2");
    67    if (dp_mul (2, 3) != 6) fail ("dp_mul 2*3");
    68    if (dp_div (3, 2) != 1.5) fail ("dp_div 3/2");
    69    if (dp_neg (1) != -1) fail ("dp_neg 1");
    70  
    71    if (fp_to_dp (1.5) != 1.5) fail ("fp_to_dp 1.5");
    72    if (dp_to_fp (1.5) != 1.5) fail ("dp_to_fp 1.5");
    73  
    74    if (floatsisf (1) != 1) fail ("floatsisf 1");
    75    if (floatsidf (1) != 1) fail ("floatsidf 1");
    76    if (fixsfsi (1.42) != 1) fail ("fixsfsi 1.42");
    77    if (fixunssfsi (1.42) != 1) fail ("fixunssfsi 1.42");
    78    if (fixdfsi (1.42) != 1) fail ("fixdfsi 1.42");
    79    if (fixunsdfsi (1.42) != 1) fail ("fixunsdfsi 1.42");
    80  
    81    if (eqsf2 (1, 1) == 0) fail ("eqsf2 1==1");
    82    if (eqsf2 (1, 2) != 0) fail ("eqsf2 1==2");
    83    if (nesf2 (1, 2) == 0) fail ("nesf2 1!=1");
    84    if (nesf2 (1, 1) != 0) fail ("nesf2 1!=1");
    85    if (gtsf2 (2, 1) == 0) fail ("gtsf2 2>1");
    86    if (gtsf2 (1, 1) != 0) fail ("gtsf2 1>1");
    87    if (gtsf2 (0, 1) != 0) fail ("gtsf2 0>1");
    88    if (gesf2 (2, 1) == 0) fail ("gesf2 2>=1");
    89    if (gesf2 (1, 1) == 0) fail ("gesf2 1>=1");
    90    if (gesf2 (0, 1) != 0) fail ("gesf2 0>=1");
    91    if (ltsf2 (1, 2) == 0) fail ("ltsf2 1<2");
    92    if (ltsf2 (1, 1) != 0) fail ("ltsf2 1<1");
    93    if (ltsf2 (1, 0) != 0) fail ("ltsf2 1<0");
    94    if (lesf2 (1, 2) == 0) fail ("lesf2 1<=2");
    95    if (lesf2 (1, 1) == 0) fail ("lesf2 1<=1");
    96    if (lesf2 (1, 0) != 0) fail ("lesf2 1<=0");
    97  
    98    if (fail_count != 0)
    99      abort ();
   100    exit (0);
   101  }