Merge from mainline
[official-gcc.git] / gcc / testsuite / gcc.dg / dfp / compare-eq.h
blob809d642593c5ac422821d335dc72006029e1dca2
1 /* Basic test of runtime equality comparisons using simple values that
2 are not affected by rounding. */
4 #include <stdlib.h>
6 static int failcnt;
8 #define PASTE2(A,B) A ## B
9 #define PASTE(A,B) PASTE2(A,B)
11 #ifdef DBG
12 #include <stdio.h>
13 #define FAILURE(OP,KIND) \
14 { printf ("failed at line %d: %s for %s values\n", __LINE__, OP, KIND); \
15 failcnt++; }
16 #else
17 #define FAILURE(OP,KIND) abort ();
18 #endif
20 #ifndef WIDTH
21 #error define WIDTH as decimal float size in bytes
22 #endif
24 #if WIDTH == 32
25 #define DTYPE _Decimal32
26 #define SUFFIX DF
27 #elif WIDTH == 64
28 #define DTYPE _Decimal64
29 #define SUFFIX DD
30 #elif WIDTH == 128
31 #define DTYPE _Decimal128
32 #define SUFFIX DL
33 #elif WIDTH == 0
34 /* This is for testing the test using a type known to work. */
35 #define DTYPE double
36 #define SUFFIX
37 #else
38 #error invalid width for decimal float type
39 #endif
41 DTYPE m_two = PASTE(-2.0, SUFFIX);
42 DTYPE m_one = PASTE(-1.0, SUFFIX);
43 DTYPE zero = PASTE(0.0, SUFFIX);
44 DTYPE one = PASTE(1.0, SUFFIX);
45 DTYPE two = PASTE(2.0, SUFFIX);
47 void
48 test_compares (void)
50 DTYPE x = one;
51 DTYPE y = zero;
52 DTYPE z = m_one;
54 /* Equal to: comparisons against equal values. */
56 if (! (x == one)) FAILURE ("==", "equal")
57 if (! (y == zero)) FAILURE ("==", "equal")
58 if (! (z == m_one)) FAILURE ("==", "equal")
60 /* Equal to: comparisons against lesser values. */
62 if (x == m_one) FAILURE ("==", "lesser")
63 if (x == zero) FAILURE ("==", "lesser")
64 if (y == m_one) FAILURE ("==", "lesser")
65 if (z == m_two) FAILURE ("==", "lesser")
67 /* Equal to: comparisons against greater values. */
69 if (x == two) FAILURE ("==", "greater")
70 if (y == one) FAILURE ("==", "greater")
71 if (z == zero) FAILURE ("==", "greater")
72 if (z == one) FAILURE ("==", "greater")
74 /* Not equal to: comparisons against equal values. */
76 if (x != one) FAILURE ("!=", "equal")
77 if (y != zero) FAILURE ("!=", "equal")
78 if (z != m_one) FAILURE ("!=", "equal")
80 /* Not equal to: comparisons against lesser values. */
82 if (! (x != m_one)) FAILURE ("!=", "lesser")
83 if (! (x != zero)) FAILURE ("!=", "lesser")
84 if (! (y != m_one)) FAILURE ("!=", "lesser")
85 if (! (z != m_two)) FAILURE ("!=", "lesser")
87 /* Not equal to: comparisons against greater values. */
89 if (! (x != m_one)) FAILURE ("!=", "greater")
90 if (! (x != zero)) FAILURE ("!=", "greater")
91 if (! (y != m_one)) FAILURE ("!=", "greater")
92 if (! (z != m_two)) FAILURE ("!=", "greater")
94 if (failcnt)
95 abort ();