7840108142d355bd02bc44aeaebd5461bec727f5
[gcc.git] / gcc / testsuite / gcc.dg / dfp / compare-rel.h
1 /* Basic test of runtime relational comparisons using simple values that
2 are not affected by rounding. */
3
4 #include <stdlib.h>
5 #include "dfp-dbg.h"
6
7 #undef FAILURE
8 #ifdef DBG
9 #define FAILURE(OP,KIND) \
10 { printf ("failed at line %d: %s for %s values\n", __LINE__, OP, KIND); \
11 failures++; }
12 #else
13 #define FAILURE(OP,KIND) __builtin_abort ();
14 #endif
15
16 #define PASTE2(A,B) A ## B
17 #define PASTE(A,B) PASTE2(A,B)
18
19 #ifndef WIDTH
20 #error define WIDTH as decimal float size in bytes
21 #endif
22
23 #if WIDTH == 32
24 #define DTYPE _Decimal32
25 #define SUFFIX DF
26 #elif WIDTH == 64
27 #define DTYPE _Decimal64
28 #define SUFFIX DD
29 #elif WIDTH == 128
30 #define DTYPE _Decimal128
31 #define SUFFIX DL
32 #elif WIDTH == 0
33 /* This is for testing the test using a type known to work. */
34 #define DTYPE double
35 #define SUFFIX
36 #else
37 #error invalid width for decimal float type
38 #endif
39
40 DTYPE m_two = PASTE(-2.0, SUFFIX);
41 DTYPE m_one = PASTE(-1.0, SUFFIX);
42 DTYPE zero = PASTE(0.0, SUFFIX);
43 DTYPE one = PASTE(1.0, SUFFIX);
44 DTYPE two = PASTE(2.0, SUFFIX);
45
46 void
47 test_compares (void)
48 {
49 DTYPE x = one;
50 DTYPE y = zero;
51 DTYPE z = m_one;
52
53 /* Less than or equal to: comparisons against equal values. */
54
55 if (! (x <= one)) FAILURE ("<=", "equal")
56 if (! (y <= zero)) FAILURE ("<=", "equal")
57 if (! (z <= m_one)) FAILURE ("<=", "equal")
58
59 /* Less than or equal to: comparisons against lesser values. */
60
61 if (x <= m_one) FAILURE ("<=", "lesser")
62 if (x <= zero) FAILURE ("<=", "lesser")
63 if (y <= m_one) FAILURE ("<=", "lesser")
64 if (z <= m_two) FAILURE ("<=", "lesser")
65
66 /* Less than or equal to: comparisons against greater values. */
67
68 if (! (x <= two)) FAILURE ("<=", "greater")
69 if (! (y <= one)) FAILURE ("<=", "greater")
70 if (! (z <= zero)) FAILURE ("<=", "greater")
71 if (! (z <= one)) FAILURE ("<=", "greater")
72
73 /* Less than: comparisons against equal values. */
74
75 if (x < one) FAILURE ("<", "equal")
76 if (y < zero) FAILURE ("<", "equal")
77 if (z < m_one) FAILURE ("<", "equal")
78
79 /* Less than: comparisons against lesser values. */
80
81 if (x < m_one) FAILURE ("<", "lesser")
82 if (x < zero) FAILURE ("<", "lesser")
83 if (y < m_one) FAILURE ("<", "lesser")
84 if (z < m_two) FAILURE ("<", "lesser")
85
86 /* Less than: comparisons against greater values. */
87
88 if (! (x < two)) FAILURE ("<", "greater")
89 if (! (y < one)) FAILURE ("<", "greater")
90 if (! (z < zero)) FAILURE ("<", "greater")
91 if (! (z < one)) FAILURE ("<", "greater")
92
93 /* Greater than or equal to: comparisons against equal values. */
94
95 if (! (x >= one)) FAILURE (">=", "equal")
96 if (! (y >= zero)) FAILURE (">=", "equal")
97 if (! (z >= m_one)) FAILURE (">=", "equal")
98
99 /* Greater than or equal to: comparisons against lesser values. */
100
101 if (! (x >= m_one)) FAILURE (">=", "lesser")
102 if (! (x >= zero)) FAILURE (">=", "lesser")
103 if (! (y >= m_one)) FAILURE (">=", "lesser")
104 if (! (z >= m_two)) FAILURE (">=", "lesser")
105
106 /* Greater than or equal to: comparisons against greater values. */
107
108 if (x >= two) FAILURE (">=", "greater")
109 if (y >= one) FAILURE (">=", "greater")
110 if (z >= zero) FAILURE (">=", "greater")
111 if (z >= one) FAILURE (">=", "greater")
112
113 /* Greater than: comparisons against equal values. */
114
115 if (x > one) FAILURE (">", "equal")
116 if (y > zero) FAILURE (">", "equal")
117 if (z > m_one) FAILURE (">", "equal")
118
119 /* Greater than: comparisons against lesser values. */
120
121 if (! (x > m_one)) FAILURE (">", "lesser")
122 if (! (x > zero)) FAILURE (">", "lesser")
123 if (! (y > m_one)) FAILURE (">", "lesser")
124 if (! (z > m_two)) FAILURE (">", "lesser")
125
126 /* Greater than: comparisons against greater values. */
127
128 if (x > two) FAILURE (">", "greater")
129 if (y > one) FAILURE (">", "greater")
130 if (z > zero) FAILURE (">", "greater")
131 if (z > one) FAILURE (">", "greater")
132 }