Cygwin: mmap: allow remapping part of an existing anonymous mapping
[newlib-cygwin.git] / newlib / libm / test / test_ieee.c
blobf23ceba6d399afd7940e7d9660d890c8c06e530b
2 #include "test.h"
3 #include <ieeefp.h>
6 /* Test fp getround and fp setround */
8 void
9 test_getround (void)
12 newfunc("fpgetround/fpsetround");
13 line(1);
14 fpsetround(FP_RN);
15 test_iok(fpgetround(), FP_RN);
16 line(2);
17 fpsetround(FP_RM);
18 test_iok(fpgetround(), FP_RM);
19 line(3);
20 fpsetround(FP_RP);
21 test_iok(fpgetround(), FP_RP);
22 line(4);
23 fpsetround(FP_RZ);
24 test_iok(fpgetround(), FP_RZ);
27 /* And fpset/fpgetmask */
28 void
29 test_getmask (void)
31 newfunc("fpsetmask/fpgetmask");
32 line(1);
33 fpsetmask(FP_X_INV);
34 test_iok(fpgetmask(),FP_X_INV);
35 line(2);
36 fpsetmask(FP_X_DX);
37 test_iok(fpgetmask(),FP_X_DX);
38 line(3);
39 fpsetmask(FP_X_OFL );
40 test_iok(fpgetmask(),FP_X_OFL);
41 line(4);
42 fpsetmask(FP_X_UFL);
43 test_iok(fpgetmask(),FP_X_UFL);
44 line(5);
45 fpsetmask(FP_X_IMP);
46 test_iok(fpgetmask(),FP_X_IMP);
49 void
50 test_getsticky (void)
52 newfunc("fpsetsticky/fpgetsticky");
53 line(1);
54 fpsetsticky(FP_X_INV);
55 test_iok(fpgetsticky(),FP_X_INV);
56 line(2);
57 fpsetsticky(FP_X_DX);
58 test_iok(fpgetsticky(),FP_X_DX);
59 line(3);
60 fpsetsticky(FP_X_OFL );
61 test_iok(fpgetsticky(),FP_X_OFL);
62 line(4);
63 fpsetsticky(FP_X_UFL);
64 test_iok(fpgetsticky(),FP_X_UFL);
65 line(5);
66 fpsetsticky(FP_X_IMP);
67 test_iok(fpgetsticky(),FP_X_IMP);
70 void
71 test_getroundtoi (void)
73 newfunc("fpsetroundtoi/fpgetroundtoi");
74 line(1);
75 fpsetroundtoi(FP_RDI_TOZ);
76 test_iok(fpgetroundtoi(),FP_RDI_TOZ);
78 line(2);
79 fpsetroundtoi(FP_RDI_RD);
80 test_iok(fpgetroundtoi(),FP_RDI_RD);
84 double
85 dnumber (int msw,
86 int lsw)
89 __ieee_double_shape_type v;
90 v.parts.lsw = lsw;
91 v.parts.msw = msw;
92 return v.value;
95 /* Lets see if changing the rounding alters the arithmetic.
96 Test by creating numbers which will have to be rounded when
97 added, and seeing what happens to them */
98 /* Keep them out here to stop the compiler from folding the results */
99 double n;
100 double m;
101 double add_rounded_up;
102 double add_rounded_down;
103 double sub_rounded_down ;
104 double sub_rounded_up ;
105 double r1,r2,r3,r4;
106 void
107 test_round (void)
109 n = dnumber(0x40000000, 0x00000008); /* near 2 */
110 m = dnumber(0x40400000, 0x00000003); /* near 3.4 */
112 add_rounded_up = dnumber(0x40410000, 0x00000004); /* For RN, RP */
113 add_rounded_down = dnumber(0x40410000, 0x00000003); /* For RM, RZ */
114 sub_rounded_down = dnumber(0xc0410000, 0x00000004); /* for RN, RM */
115 sub_rounded_up = dnumber(0xc0410000, 0x00000003); /* for RP, RZ */
117 newfunc("fpsetround");
119 line(1);
121 fpsetround(FP_RN);
122 r1 = n + m;
123 test_mok(r1, add_rounded_up, 64);
125 line(2);
126 fpsetround(FP_RM);
127 r2 = n + m;
128 test_mok(r2, add_rounded_down, 64);
130 fpsetround(FP_RP);
131 line(3);
132 r3 = n + m;
133 test_mok(r3,add_rounded_up, 64);
135 fpsetround(FP_RZ);
136 line(4);
137 r4 = n + m;
138 test_mok(r4,add_rounded_down,64);
141 fpsetround(FP_RN);
142 r1 = - n - m;
143 line(5);
144 test_mok(r1,sub_rounded_down,64);
146 fpsetround(FP_RM);
147 r2 = - n - m;
148 line(6);
149 test_mok(r2,sub_rounded_down,64);
152 fpsetround(FP_RP);
153 r3 = - n - m;
154 line(7);
155 test_mok(r3,sub_rounded_up,64);
157 fpsetround(FP_RZ);
158 r4 = - n - m;
159 line(8);
160 test_mok(r4,sub_rounded_up,64);
164 void
165 test_ieee (void)
167 fp_rnd old = fpgetround();
168 test_getround();
169 test_getmask();
170 test_getsticky();
171 test_getroundtoi();
173 test_round();
174 fpsetround(old);