1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
/* Basic test of runtime equality comparisons using simple values that
are not affected by rounding. */
#include <stdlib.h>
#include "dfp-dbg.h"
#define PASTE2(A,B) A ## B
#define PASTE(A,B) PASTE2(A,B)
#undef FAILURE
#ifdef DBG
#define FAILURE(OP,KIND) \
{ printf ("failed at line %d: %s for %s values\n", __LINE__, OP, KIND); \
failures++; }
#else
#define FAILURE(OP,KIND) __builtin_abort ();
#endif
#ifndef WIDTH
#error define WIDTH as decimal float size in bytes
#endif
#if WIDTH == 32
#define DTYPE _Decimal32
#define SUFFIX DF
#elif WIDTH == 64
#define DTYPE _Decimal64
#define SUFFIX DD
#elif WIDTH == 128
#define DTYPE _Decimal128
#define SUFFIX DL
#elif WIDTH == 0
/* This is for testing the test using a type known to work. */
#define DTYPE double
#define SUFFIX
#else
#error invalid width for decimal float type
#endif
DTYPE m_two = PASTE(-2.0, SUFFIX);
DTYPE m_one = PASTE(-1.0, SUFFIX);
DTYPE zero = PASTE(0.0, SUFFIX);
DTYPE one = PASTE(1.0, SUFFIX);
DTYPE two = PASTE(2.0, SUFFIX);
void
test_compares (void)
{
DTYPE x = one;
DTYPE y = zero;
DTYPE z = m_one;
/* Equal to: comparisons against equal values. */
if (! (x == one)) FAILURE ("==", "equal")
if (! (y == zero)) FAILURE ("==", "equal")
if (! (z == m_one)) FAILURE ("==", "equal")
/* Equal to: comparisons against lesser values. */
if (x == m_one) FAILURE ("==", "lesser")
if (x == zero) FAILURE ("==", "lesser")
if (y == m_one) FAILURE ("==", "lesser")
if (z == m_two) FAILURE ("==", "lesser")
/* Equal to: comparisons against greater values. */
if (x == two) FAILURE ("==", "greater")
if (y == one) FAILURE ("==", "greater")
if (z == zero) FAILURE ("==", "greater")
if (z == one) FAILURE ("==", "greater")
/* Not equal to: comparisons against equal values. */
if (x != one) FAILURE ("!=", "equal")
if (y != zero) FAILURE ("!=", "equal")
if (z != m_one) FAILURE ("!=", "equal")
/* Not equal to: comparisons against lesser values. */
if (! (x != m_one)) FAILURE ("!=", "lesser")
if (! (x != zero)) FAILURE ("!=", "lesser")
if (! (y != m_one)) FAILURE ("!=", "lesser")
if (! (z != m_two)) FAILURE ("!=", "lesser")
/* Not equal to: comparisons against greater values. */
if (! (x != m_one)) FAILURE ("!=", "greater")
if (! (x != zero)) FAILURE ("!=", "greater")
if (! (y != m_one)) FAILURE ("!=", "greater")
if (! (z != m_two)) FAILURE ("!=", "greater")
}
|