ReactOS 0.4.16-dev-178-g8ba6102
floatconv.c File Reference
#include <apitest.h>
Include dependency graph for floatconv.c:

Go to the source code of this file.

Macros

#define ULONG_OVERFLOW   0ul
 
#define ULONGLONG_OVERFLOW   0x8000000000000000ull
 
#define todo_gcc
 

Functions

 __declspec (noinline)
 
void Test_float (void)
 
void Test_double (void)
 
 START_TEST (floatconv)
 

Macro Definition Documentation

◆ todo_gcc

#define todo_gcc

Definition at line 44 of file floatconv.c.

◆ ULONG_OVERFLOW

#define ULONG_OVERFLOW   0ul

Definition at line 37 of file floatconv.c.

◆ ULONGLONG_OVERFLOW

#define ULONGLONG_OVERFLOW   0x8000000000000000ull

Definition at line 38 of file floatconv.c.

Function Documentation

◆ __declspec()

__declspec ( noinline  )

Definition at line 47 of file floatconv.c.

49{
50 return (long)f;
51}
#define f
Definition: ke_i.h:83

Referenced by iskeyword().

◆ START_TEST()

START_TEST ( floatconv  )

Definition at line 273 of file floatconv.c.

274{
275 Test_float();
276 Test_double();
277}
void Test_float(void)
Definition: floatconv.c:95
void Test_double(void)
Definition: floatconv.c:185

◆ Test_double()

void Test_double ( void  )

Definition at line 185 of file floatconv.c.

186{
187 // double to long cast
188 ok_eq_long(cast_double_to_long(0.0), 0l);
189 ok_eq_long(cast_double_to_long(1.0), 1l);
190 ok_eq_long(cast_double_to_long(-1.0), -1l);
191 ok_eq_long(cast_double_to_long(0.5), 0l);
192 ok_eq_long(cast_double_to_long(-0.5), 0l);
193 ok_eq_long(cast_double_to_long(0.999999999), 0l);
194 ok_eq_long(cast_double_to_long(-0.999999999), 0l);
195 ok_eq_long(cast_double_to_long(2147483647.99999), 2147483647l);
196 ok_eq_long(cast_double_to_long(-2147483647.99999), -2147483647l);
197 ok_eq_long(cast_double_to_long(2147483648.0), LONG_MIN); // -2147483648
198 ok_eq_long(cast_double_to_long(-2147483648.0), LONG_MIN); // -2147483648
199 ok_eq_long(cast_double_to_long(10000000000.0), LONG_MIN);
200 ok_eq_long(cast_double_to_long(-10000000000.0), LONG_MIN);
201
202 // double to unsigned long cast (positive values)
203 ok_eq_ulong(cast_double_to_ulong(0.0), 0ul);
204 ok_eq_ulong(cast_double_to_ulong(1.0), 1ul);
205 ok_eq_ulong(cast_double_to_ulong(0.5), 0ul);
206 ok_eq_ulong(cast_double_to_ulong(0.999999999), 0ul);
207 ok_eq_ulong(cast_double_to_ulong(2147483648.0), 2147483648ul); // 0x80000000
208 ok_eq_ulong(cast_double_to_ulong(4294967295.0), 4294967295ul); // 0xFFFFFFFF
209 ok_eq_ulong(cast_double_to_ulong(4294967296.0), ULONG_OVERFLOW);
210
211 // double to unsigned long cast (negative values)
212 ok_eq_ulong(cast_double_to_ulong(-0.0), 0ul);
213 ok_eq_ulong(cast_double_to_ulong(-0.5), 0ul);
214 ok_eq_ulong(cast_double_to_ulong(-1.0), ULONG_MAX);
215#ifdef OLD_BEHAVIOR
216 ok_eq_ulong(cast_double_to_ulong(-10.0), ULONG_MAX);
217 ok_eq_ulong(cast_double_to_ulong(-1147483648.0), ULONG_MAX);
218 ok_eq_ulong(cast_double_to_ulong(-2147483648.0), ULONG_MAX);
219#else
220 ok_eq_ulong(cast_double_to_ulong(-10.0), (unsigned long)-10);
221 ok_eq_ulong(cast_double_to_ulong(-1147483648.0), (unsigned long)-1147483648ll);
222 ok_eq_ulong(cast_double_to_ulong(-2147483648.0), (unsigned long)-2147483648ll);
223#endif
224
225 // double to long long cast
226 ok_eq_longlong(cast_double_to_longlong(0.0), 0ll);
227 ok_eq_longlong(cast_double_to_longlong(1.0), 1ll);
228 ok_eq_longlong(cast_double_to_longlong(-1.0), -1ll);
229 ok_eq_longlong(cast_double_to_longlong(0.5), 0ll);
230 ok_eq_longlong(cast_double_to_longlong(-0.5), 0ll);
231 ok_eq_longlong(cast_double_to_longlong(0.999999), 0ll);
232 ok_eq_longlong(cast_double_to_longlong(-0.999999), 0ll);
233 ok_eq_longlong(cast_double_to_longlong(9223372036854775295.9), 9223372036854774784ll);
234 ok_eq_longlong(cast_double_to_longlong(9223372036854775296.0), LLONG_MIN);
235 ok_eq_longlong(cast_double_to_longlong(-9223372036854775295.9), -9223372036854774784ll);
236 ok_eq_longlong(cast_double_to_longlong(-9223372036854775296.0), LLONG_MIN);
237 ok_eq_longlong(cast_double_to_longlong(100000000000000000000.0), LLONG_MIN);
238 ok_eq_longlong(cast_double_to_longlong(-100000000000000000000.0), LLONG_MIN);
239
240 // double to unsigned long long cast (positive values)
241 ok_eq_ulonglong(cast_double_to_ulonglong(0.0), 0ull);
242 ok_eq_ulonglong(cast_double_to_ulonglong(1.0), 1ull);
243 ok_eq_ulonglong(cast_double_to_ulonglong(0.5), 0ull);
244 ok_eq_ulonglong(cast_double_to_ulonglong(0.999999), 0ull);
245 ok_eq_ulonglong(cast_double_to_ulonglong(9223372036854774784.0), 9223372036854774784ull); // 0x7FFFFFFFFFFFFC00
246 ok_eq_ulonglong(cast_double_to_ulonglong(9223372036854775808.0), 9223372036854775808ull); // 0x8000000000000000
247 ok_eq_ulonglong(cast_double_to_ulonglong(18446744073709550591.9), 18446744073709549568ull); // 0xFFFFFFFFFFFFF800
248 todo_gcc ok_eq_ulonglong(cast_double_to_ulonglong(18446744073709550592.0), ULONGLONG_OVERFLOW); // 0x8000000000000000 / 0xFFFFFFFFFFFFFFFF
249 todo_gcc ok_eq_ulonglong(cast_double_to_ulonglong(18446744073709551616.0), ULONGLONG_OVERFLOW); // 0x8000000000000000 / 0xFFFFFFFFFFFFFFFF
250 todo_gcc ok_eq_ulonglong(cast_double_to_ulonglong(20000000000000000000.0), ULONGLONG_OVERFLOW); // 0x8000000000000000 / 0xFFFFFFFFFFFFFFFF
251
252 // float to unsigned long long cast (negative values)
253 ok_eq_ulonglong(cast_double_to_ulonglong(-0.0), 0ull);
254 ok_eq_ulonglong(cast_double_to_ulonglong(-0.5), 0ull);
255 ok_eq_ulonglong(cast_double_to_ulonglong(-1.0), 18446744073709551615ull);
256#ifdef OLD_BEHAVIOR
257 ok_eq_ulonglong(cast_double_to_ulonglong(-10.0), ULLONG_MAX);
258 ok_eq_ulonglong(cast_double_to_ulonglong(-1147483648.0), ULLONG_MAX);
259 ok_eq_ulonglong(cast_double_to_ulonglong(-2147483648.0), ULLONG_MAX);
260 ok_eq_ulonglong(cast_double_to_ulonglong(-9223371761976868863.9), ULLONG_MAX);
261 ok_eq_ulonglong(cast_double_to_ulonglong(-9223371761976868864.0), ULLONG_MAX);
262 ok_eq_ulonglong(cast_double_to_ulonglong(-9223372036854775808.0), ULLONG_MAX);
263#else
264 ok_eq_ulonglong(cast_double_to_ulonglong(-10.0), (unsigned long long)-10);
265 ok_eq_ulonglong(cast_double_to_ulonglong(-1147483648.0), (unsigned long long)-1147483648ll);
266 ok_eq_ulonglong(cast_double_to_ulonglong(-2147483648.0), (unsigned long long)-2147483648ll);
267 ok_eq_ulonglong(cast_double_to_ulonglong(-9223372036854775000.0), (unsigned long long)-9223372036854774784ll);
268 ok_eq_ulonglong(cast_double_to_ulonglong(-9223372036854775808.0), (unsigned long long)(-9223372036854775807ll - 1));
269#endif
270 ok_eq_ulonglong(cast_double_to_ulonglong(-100000000000000000000.0), ULONGLONG_OVERFLOW);
271}
#define ok_eq_ulong(value, expected)
Definition: apitest.h:63
#define ok_eq_longlong(value, expected)
Definition: apitest.h:64
#define ok_eq_long(value, expected)
Definition: apitest.h:62
#define ok_eq_ulonglong(value, expected)
Definition: apitest.h:65
w ll
Definition: byte_order.h:167
r l[0]
Definition: byte_order.h:168
#define ULONG_OVERFLOW
Definition: floatconv.c:37
#define todo_gcc
Definition: floatconv.c:44
#define ULONGLONG_OVERFLOW
Definition: floatconv.c:38
#define ULONG_MAX
Definition: limits.h:44
#define ULLONG_MAX
Definition: limits.h:47
#define LONG_MIN
Definition: limits.h:42
#define LLONG_MIN
Definition: limits.h:46

Referenced by START_TEST().

◆ Test_float()

void Test_float ( void  )

Definition at line 95 of file floatconv.c.

96{
97 // float to long cast
98 ok_eq_long(cast_float_to_long(0.0f), 0l);
99 ok_eq_long(cast_float_to_long(1.0f), 1l);
100 ok_eq_long(cast_float_to_long(-1.0f), -1l);
101 ok_eq_long(cast_float_to_long(0.5f), 0l);
102 ok_eq_long(cast_float_to_long(-0.5f), 0l);
103 ok_eq_long(cast_float_to_long(0.999999f), 0l);
104 ok_eq_long(cast_float_to_long(-0.999999f), 0l);
105 ok_eq_long(cast_float_to_long(2147483500.0f), 2147483520l);
106 ok_eq_long(cast_float_to_long(2147483583.999f), 2147483520l);
107 ok_eq_long(cast_float_to_long(-2147483583.999f), -2147483520l);
108 ok_eq_long(cast_float_to_long(2147483584.0f), LONG_MIN); // -2147483648
109 ok_eq_long(cast_float_to_long(2147483648.0f), LONG_MIN); // -2147483648
110 ok_eq_long(cast_float_to_long(-2147483648.0f), LONG_MIN); // -2147483648
111 ok_eq_long(cast_float_to_long(10000000000.0f), LONG_MIN);
112 ok_eq_long(cast_float_to_long(-10000000000.0f), LONG_MIN);
113
114 // float to unsigned long cast (positive values)
115 ok_eq_ulong(cast_float_to_ulong(0.0f), 0ul);
116 ok_eq_ulong(cast_float_to_ulong(1.0f), 1ul);
117 ok_eq_ulong(cast_float_to_ulong(0.5f), 0ul);
118 ok_eq_ulong(cast_float_to_ulong(0.999999f), 0ul);
119 ok_eq_ulong(cast_float_to_ulong(2147483648.0f), 2147483648ul); // 0x80000000
120 ok_eq_ulong(cast_float_to_ulong(4294967150.0f), 4294967040ul); // 0xFFFFFF00
121 ok_eq_ulong(cast_float_to_ulong(4294967294.0f), ULONG_OVERFLOW);
122
123 // float to unsigned long cast (negative values)
124 ok_eq_ulong(cast_float_to_ulong(-0.0f), 0ul);
125 ok_eq_ulong(cast_float_to_ulong(-0.5f), 0ul);
126 ok_eq_ulong(cast_float_to_ulong(-1.0f), ULONG_MAX);
127#ifdef OLD_BEHAVIOR
128 ok_eq_ulong(cast_float_to_ulong(-10.0f), ULONG_MAX);
129 ok_eq_ulong(cast_float_to_ulong(-1147483648.0f), ULONG_MAX);
130 ok_eq_ulong(cast_float_to_ulong(-2147483648.0f), ULONG_MAX);
131#else
132 ok_eq_ulong(cast_float_to_ulong(-10.0f), (unsigned long)-10);
133 ok_eq_ulong(cast_float_to_ulong(-1147483648.0f), (unsigned long)-1147483648ll);
134 ok_eq_ulong(cast_float_to_ulong(-2147483648.0f), (unsigned long)-2147483648ll);
135#endif
136
137 // float to long long cast
138 ok_eq_longlong(cast_float_to_longlong(0.0f), 0ll);
139 ok_eq_longlong(cast_float_to_longlong(1.0f), 1ll);
140 ok_eq_longlong(cast_float_to_longlong(-1.0f), -1ll);
141 ok_eq_longlong(cast_float_to_longlong(0.5f), 0ll);
142 ok_eq_longlong(cast_float_to_longlong(-0.5f), 0ll);
143 ok_eq_longlong(cast_float_to_longlong(0.999999f), 0ll);
144 ok_eq_longlong(cast_float_to_longlong(-0.999999f), 0ll);
145 ok_eq_longlong(cast_float_to_longlong(9223371761976868863.9999f), 9223371487098961920ll);
146 ok_eq_longlong(cast_float_to_longlong(9223371761976868864.0f), LLONG_MIN);
147 ok_eq_longlong(cast_float_to_longlong(-9223371761976868863.9999f), -9223371487098961920ll);
148 ok_eq_longlong(cast_float_to_longlong(-9223371761976868864.0f), LLONG_MIN);
149 ok_eq_longlong(cast_float_to_longlong(100000000000000000000.0f), LLONG_MIN);
150 ok_eq_longlong(cast_float_to_longlong(-100000000000000000000.0f), LLONG_MIN);
151
152 // float to unsigned long long cast (positive values)
153 ok_eq_ulonglong(cast_float_to_ulonglong(0.0f), 0ull);
154 ok_eq_ulonglong(cast_float_to_ulonglong(1.0f), 1ull);
155 ok_eq_ulonglong(cast_float_to_ulonglong(0.5f), 0ull);
156 ok_eq_ulonglong(cast_float_to_ulonglong(0.999999f), 0ull);
157 ok_eq_ulonglong(cast_float_to_ulonglong(9223371487098961920.0f), 9223371487098961920ull); // 0x7FFFFF8000000000
158 ok_eq_ulonglong(cast_float_to_ulonglong(9223372036854775808.0f), 9223372036854775808ull); // 0x8000000000000000
159 ok_eq_ulonglong(cast_float_to_ulonglong(18446743523953737727.9f), 18446742974197923840ull); // 0xFFFFFF0000000000
160 todo_gcc ok_eq_ulonglong(cast_float_to_ulonglong(18446743523953737728.0f), ULONGLONG_OVERFLOW); // 0x8000000000000000 / 0xFFFFFFFFFFFFFFFF
161 todo_gcc ok_eq_ulonglong(cast_float_to_ulonglong(20000000000000000000.0f), ULONGLONG_OVERFLOW); // 0x8000000000000000 / 0xFFFFFFFFFFFFFFFF
162
163 // float to unsigned long long cast (negative values)
164 ok_eq_ulonglong(cast_float_to_ulonglong(-0.0f), 0ull);
165 ok_eq_ulonglong(cast_float_to_ulonglong(-0.5f), 0ull);
166 ok_eq_ulonglong(cast_float_to_ulonglong(-1.0f), 18446744073709551615ull);
167#ifdef OLD_BEHAVIOR
168 ok_eq_ulonglong(cast_float_to_ulonglong(-10.0f), ULLONG_MAX);
169 ok_eq_ulonglong(cast_float_to_ulonglong(-1147483648.0f), ULLONG_MAX);
170 ok_eq_ulonglong(cast_float_to_ulonglong(-2147483648.0f), ULLONG_MAX);
171 ok_eq_ulonglong(cast_float_to_ulonglong(-9223371761976868863.9f), ULLONG_MAX);
172 ok_eq_ulonglong(cast_float_to_ulonglong(-9223371761976868864.0f), ULLONG_MAX);
173 ok_eq_ulonglong(cast_float_to_ulonglong(-9223372036854775808.0f), ULLONG_MAX);
174#else
175 ok_eq_ulonglong(cast_float_to_ulonglong(-10.0f), (unsigned long long)-10);
176 ok_eq_ulonglong(cast_float_to_ulonglong(-1147483648.0f), (unsigned long long)-1147483648ll);
177 ok_eq_ulonglong(cast_float_to_ulonglong(-2147483648.0f), (unsigned long long)-2147483648ll);
178 ok_eq_ulonglong(cast_float_to_ulonglong(-9223371761976868863.9f), (unsigned long long)-9223371487098961920);
179 ok_eq_ulonglong(cast_float_to_ulonglong(-9223371761976868864.0f), (unsigned long long)(-9223372036854775807ll - 1)); // 0x8000000000000000 / ULONGLONG_OVERFLOW
180 ok_eq_ulonglong(cast_float_to_ulonglong(-9223372036854775808.0f), (unsigned long long)(-9223372036854775807ll - 1)); // 0x8000000000000000 / ULONGLONG_OVERFLOW
181#endif
182 ok_eq_ulonglong(cast_float_to_ulonglong(-100000000000000000000.0f), ULONGLONG_OVERFLOW);
183}

Referenced by START_TEST().