testLoops.c revision 1.4 1 1.4 itojun /* $NetBSD: testLoops.c,v 1.4 2002/02/21 07:38:16 itojun Exp $ */
2 1.3 ross
3 1.3 ross /* This is a derivative work. */
4 1.3 ross
5 1.3 ross /*-
6 1.3 ross * Copyright (c) 2001 The NetBSD Foundation, Inc.
7 1.3 ross * All rights reserved.
8 1.3 ross *
9 1.3 ross * This code is derived from software contributed to The NetBSD Foundation
10 1.3 ross * by Ross Harvey.
11 1.3 ross *
12 1.3 ross * Redistribution and use in source and binary forms, with or without
13 1.3 ross * modification, are permitted provided that the following conditions
14 1.3 ross * are met:
15 1.3 ross * 1. Redistributions of source code must retain the above copyright
16 1.3 ross * notice, this list of conditions and the following disclaimer.
17 1.3 ross * 2. Redistributions in binary form must reproduce the above copyright
18 1.3 ross * notice, this list of conditions and the following disclaimer in the
19 1.3 ross * documentation and/or other materials provided with the distribution.
20 1.3 ross * 3. All advertising materials mentioning features or use of this software
21 1.3 ross * must display the following acknowledgement:
22 1.3 ross * This product includes software developed by the NetBSD
23 1.3 ross * Foundation, Inc. and its contributors.
24 1.3 ross * 4. Neither the name of The NetBSD Foundation nor the names of its
25 1.3 ross * contributors may be used to endorse or promote products derived
26 1.3 ross * from this software without specific prior written permission.
27 1.3 ross *
28 1.3 ross * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
29 1.3 ross * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
30 1.3 ross * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
31 1.3 ross * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
32 1.3 ross * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
33 1.3 ross * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
34 1.3 ross * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
35 1.3 ross * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
36 1.3 ross * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
37 1.3 ross * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38 1.3 ross * POSSIBILITY OF SUCH DAMAGE.
39 1.3 ross */
40 1.1 ross
41 1.1 ross /*
42 1.1 ross ===============================================================================
43 1.1 ross
44 1.1 ross This C source file is part of TestFloat, Release 2a, a package of programs
45 1.1 ross for testing the correctness of floating-point arithmetic complying to the
46 1.1 ross IEC/IEEE Standard for Floating-Point.
47 1.1 ross
48 1.1 ross Written by John R. Hauser. More information is available through the Web
49 1.1 ross page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
50 1.1 ross
51 1.1 ross THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
52 1.1 ross has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
53 1.1 ross TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
54 1.1 ross PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
55 1.1 ross AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
56 1.1 ross
57 1.1 ross Derivative works are acceptable, even for commercial purposes, so long as
58 1.1 ross (1) they include prominent notice that the work is derivative, and (2) they
59 1.1 ross include prominent notice akin to these four paragraphs for those parts of
60 1.1 ross this code that are retained.
61 1.1 ross
62 1.1 ross ===============================================================================
63 1.1 ross */
64 1.1 ross
65 1.1 ross #include <stdlib.h>
66 1.1 ross #include <stdio.h>
67 1.1 ross #include "milieu.h"
68 1.1 ross #include "softfloat.h"
69 1.1 ross #include "testCases.h"
70 1.1 ross #include "writeHex.h"
71 1.1 ross #include "testLoops.h"
72 1.1 ross
73 1.1 ross volatile flag stop = FALSE;
74 1.1 ross
75 1.2 ross const char *trueName, *testName;
76 1.1 ross flag forever, errorStop;
77 1.1 ross uint32 maxErrorCount = 0;
78 1.1 ross flag checkNaNs = FALSE;
79 1.1 ross int8 *trueFlagsPtr;
80 1.1 ross int8 ( *testFlagsFunctionPtr )( void );
81 1.2 ross const char *functionName;
82 1.2 ross const char *roundingPrecisionName, *roundingModeName, *tininessModeName;
83 1.1 ross flag anyErrors = FALSE;
84 1.1 ross
85 1.1 ross void writeFunctionName( FILE *stream )
86 1.1 ross {
87 1.1 ross
88 1.1 ross fputs( functionName, stream );
89 1.1 ross if ( roundingModeName ) {
90 1.1 ross if ( roundingPrecisionName ) {
91 1.1 ross fputs( ", precision ", stream );
92 1.1 ross fputs( roundingPrecisionName, stream );
93 1.1 ross }
94 1.1 ross fputs( ", rounding ", stream );
95 1.1 ross fputs( roundingModeName, stream );
96 1.1 ross if ( tininessModeName ) {
97 1.1 ross fputs( ", tininess ", stream );
98 1.1 ross fputs( tininessModeName, stream );
99 1.1 ross fputs( " rounding", stream );
100 1.1 ross }
101 1.1 ross }
102 1.1 ross
103 1.1 ross }
104 1.1 ross
105 1.1 ross void exitWithStatus( void )
106 1.1 ross {
107 1.1 ross
108 1.1 ross exit( anyErrors ? EXIT_FAILURE : EXIT_SUCCESS );
109 1.1 ross
110 1.1 ross }
111 1.1 ross
112 1.1 ross static uint32 tenthousandsCount, errorCount = 0;
113 1.1 ross
114 1.1 ross static void writeTestsTotal( void )
115 1.1 ross {
116 1.1 ross
117 1.1 ross if ( forever ) {
118 1.1 ross fputs( "Unbounded tests.\n", stderr );
119 1.1 ross }
120 1.1 ross else {
121 1.2 ross fprintf( stderr, "%d tests total.\n", testCases_total );
122 1.1 ross }
123 1.1 ross
124 1.1 ross }
125 1.1 ross
126 1.1 ross static void writeTestsPerformed( int16 count )
127 1.1 ross {
128 1.1 ross
129 1.1 ross if ( tenthousandsCount ) {
130 1.1 ross fprintf(
131 1.2 ross stderr, "%d%04d tests performed", tenthousandsCount, count );
132 1.1 ross }
133 1.1 ross else {
134 1.2 ross fprintf( stderr, "%d tests performed", count );
135 1.1 ross }
136 1.1 ross if ( errorCount ) {
137 1.1 ross fprintf(
138 1.1 ross stderr,
139 1.1 ross "; %d error%s found.\n",
140 1.1 ross errorCount,
141 1.1 ross ( errorCount == 1 ) ? "" : "s"
142 1.1 ross );
143 1.1 ross }
144 1.1 ross else {
145 1.1 ross fputs( ".\n", stderr );
146 1.1 ross fputs( "No errors found in ", stdout );
147 1.1 ross writeFunctionName( stdout );
148 1.1 ross fputs( ".\n", stdout );
149 1.1 ross fflush( stdout );
150 1.1 ross }
151 1.1 ross
152 1.1 ross }
153 1.1 ross
154 1.1 ross static void checkEarlyExit( void )
155 1.1 ross {
156 1.1 ross
157 1.1 ross ++tenthousandsCount;
158 1.1 ross if ( stop ) {
159 1.1 ross writeTestsPerformed( 0 );
160 1.1 ross exitWithStatus();
161 1.1 ross }
162 1.2 ross fprintf( stderr, "%3d0000", tenthousandsCount );
163 1.1 ross
164 1.1 ross }
165 1.1 ross
166 1.1 ross static void writeErrorFound( int16 count )
167 1.1 ross {
168 1.1 ross
169 1.1 ross if ( errorCount == 1 ) {
170 1.1 ross fputs( "Errors found in ", stdout );
171 1.1 ross writeFunctionName( stdout );
172 1.1 ross fputs( ":\n", stdout );
173 1.1 ross }
174 1.1 ross if ( stop ) {
175 1.1 ross writeTestsPerformed( count );
176 1.1 ross exitWithStatus();
177 1.1 ross }
178 1.1 ross anyErrors = TRUE;
179 1.1 ross
180 1.1 ross }
181 1.1 ross
182 1.1 ross INLINE void writeInput_a_int32( void )
183 1.1 ross {
184 1.1 ross
185 1.1 ross writeHex_bits32( testCases_a_int32, stdout );
186 1.1 ross
187 1.1 ross }
188 1.1 ross
189 1.1 ross #ifdef BITS64
190 1.1 ross
191 1.1 ross INLINE void writeInput_a_int64( void )
192 1.1 ross {
193 1.1 ross
194 1.1 ross writeHex_bits64( testCases_a_int64, stdout );
195 1.1 ross
196 1.1 ross }
197 1.1 ross
198 1.1 ross #endif
199 1.1 ross
200 1.1 ross INLINE void writeInput_a_float32( void )
201 1.1 ross {
202 1.1 ross
203 1.1 ross writeHex_float32( testCases_a_float32, stdout );
204 1.1 ross
205 1.1 ross }
206 1.1 ross
207 1.1 ross static void writeInputs_ab_float32( void )
208 1.1 ross {
209 1.1 ross
210 1.1 ross writeHex_float32( testCases_a_float32, stdout );
211 1.1 ross fputs( " ", stdout );
212 1.1 ross writeHex_float32( testCases_b_float32, stdout );
213 1.1 ross
214 1.1 ross }
215 1.1 ross
216 1.1 ross INLINE void writeInput_a_float64( void )
217 1.1 ross {
218 1.1 ross
219 1.1 ross writeHex_float64( testCases_a_float64, stdout );
220 1.1 ross
221 1.1 ross }
222 1.1 ross
223 1.1 ross static void writeInputs_ab_float64( void )
224 1.1 ross {
225 1.1 ross
226 1.1 ross writeHex_float64( testCases_a_float64, stdout );
227 1.1 ross fputs( " ", stdout );
228 1.1 ross writeHex_float64( testCases_b_float64, stdout );
229 1.1 ross
230 1.1 ross }
231 1.1 ross
232 1.1 ross #ifdef FLOATX80
233 1.1 ross
234 1.1 ross INLINE void writeInput_a_floatx80( void )
235 1.1 ross {
236 1.1 ross
237 1.1 ross writeHex_floatx80( testCases_a_floatx80, stdout );
238 1.1 ross
239 1.1 ross }
240 1.1 ross
241 1.1 ross static void writeInputs_ab_floatx80( void )
242 1.1 ross {
243 1.1 ross
244 1.1 ross writeHex_floatx80( testCases_a_floatx80, stdout );
245 1.1 ross fputs( " ", stdout );
246 1.1 ross writeHex_floatx80( testCases_b_floatx80, stdout );
247 1.1 ross
248 1.1 ross }
249 1.1 ross
250 1.1 ross #endif
251 1.1 ross
252 1.1 ross #ifdef FLOAT128
253 1.1 ross
254 1.1 ross INLINE void writeInput_a_float128( void )
255 1.1 ross {
256 1.1 ross
257 1.1 ross writeHex_float128( testCases_a_float128, stdout );
258 1.1 ross
259 1.1 ross }
260 1.1 ross
261 1.1 ross static void writeInputs_ab_float128( void )
262 1.1 ross {
263 1.1 ross
264 1.1 ross writeHex_float128( testCases_a_float128, stdout );
265 1.1 ross fputs( " ", stdout );
266 1.1 ross writeHex_float128( testCases_b_float128, stdout );
267 1.1 ross
268 1.1 ross }
269 1.1 ross
270 1.1 ross #endif
271 1.1 ross
272 1.1 ross static void
273 1.1 ross writeOutputs_z_flag(
274 1.1 ross flag trueZ, uint8 trueFlags, flag testZ, uint8 testFlags )
275 1.1 ross {
276 1.1 ross
277 1.1 ross fputs( trueName, stdout );
278 1.1 ross fputs( ": ", stdout );
279 1.1 ross writeHex_flag( trueZ, stdout );
280 1.1 ross fputc( ' ', stdout );
281 1.1 ross writeHex_float_flags( trueFlags, stdout );
282 1.1 ross fputs( " ", stdout );
283 1.1 ross fputs( testName, stdout );
284 1.1 ross fputs( ": ", stdout );
285 1.1 ross writeHex_flag( testZ, stdout );
286 1.1 ross fputc( ' ', stdout );
287 1.1 ross writeHex_float_flags( testFlags, stdout );
288 1.1 ross fputc( '\n', stdout );
289 1.1 ross
290 1.1 ross }
291 1.1 ross
292 1.1 ross static void
293 1.1 ross writeOutputs_z_int32(
294 1.1 ross int32 trueZ, uint8 trueFlags, int32 testZ, uint8 testFlags )
295 1.1 ross {
296 1.1 ross
297 1.1 ross fputs( trueName, stdout );
298 1.1 ross fputs( ": ", stdout );
299 1.1 ross writeHex_bits32( trueZ, stdout );
300 1.1 ross fputc( ' ', stdout );
301 1.1 ross writeHex_float_flags( trueFlags, stdout );
302 1.1 ross fputs( " ", stdout );
303 1.1 ross fputs( testName, stdout );
304 1.1 ross fputs( ": ", stdout );
305 1.1 ross writeHex_bits32( testZ, stdout );
306 1.1 ross fputc( ' ', stdout );
307 1.1 ross writeHex_float_flags( testFlags, stdout );
308 1.1 ross fputc( '\n', stdout );
309 1.1 ross
310 1.1 ross }
311 1.1 ross
312 1.1 ross #ifdef BITS64
313 1.1 ross
314 1.1 ross static void
315 1.1 ross writeOutputs_z_int64(
316 1.1 ross int64 trueZ, uint8 trueFlags, int64 testZ, uint8 testFlags )
317 1.1 ross {
318 1.1 ross
319 1.1 ross fputs( trueName, stdout );
320 1.1 ross fputs( ": ", stdout );
321 1.1 ross writeHex_bits64( trueZ, stdout );
322 1.1 ross fputc( ' ', stdout );
323 1.1 ross writeHex_float_flags( trueFlags, stdout );
324 1.1 ross fputs( " ", stdout );
325 1.1 ross fputs( testName, stdout );
326 1.1 ross fputs( ": ", stdout );
327 1.1 ross writeHex_bits64( testZ, stdout );
328 1.1 ross fputc( ' ', stdout );
329 1.1 ross writeHex_float_flags( testFlags, stdout );
330 1.1 ross fputc( '\n', stdout );
331 1.1 ross
332 1.1 ross }
333 1.1 ross
334 1.1 ross #endif
335 1.1 ross
336 1.1 ross static void
337 1.1 ross writeOutputs_z_float32(
338 1.1 ross float32 trueZ, uint8 trueFlags, float32 testZ, uint8 testFlags )
339 1.1 ross {
340 1.1 ross
341 1.1 ross fputs( trueName, stdout );
342 1.1 ross fputs( ": ", stdout );
343 1.1 ross writeHex_float32( trueZ, stdout );
344 1.1 ross fputc( ' ', stdout );
345 1.1 ross writeHex_float_flags( trueFlags, stdout );
346 1.1 ross fputs( " ", stdout );
347 1.1 ross fputs( testName, stdout );
348 1.1 ross fputs( ": ", stdout );
349 1.1 ross writeHex_float32( testZ, stdout );
350 1.1 ross fputc( ' ', stdout );
351 1.1 ross writeHex_float_flags( testFlags, stdout );
352 1.1 ross fputc( '\n', stdout );
353 1.1 ross
354 1.1 ross }
355 1.1 ross
356 1.1 ross static void
357 1.1 ross writeOutputs_z_float64(
358 1.1 ross float64 trueZ, uint8 trueFlags, float64 testZ, uint8 testFlags )
359 1.1 ross {
360 1.1 ross
361 1.1 ross fputs( trueName, stdout );
362 1.1 ross fputs( ": ", stdout );
363 1.1 ross writeHex_float64( trueZ, stdout );
364 1.1 ross fputc( ' ', stdout );
365 1.1 ross writeHex_float_flags( trueFlags, stdout );
366 1.1 ross fputs( " ", stdout );
367 1.1 ross fputs( testName, stdout );
368 1.1 ross fputs( ": ", stdout );
369 1.1 ross writeHex_float64( testZ, stdout );
370 1.1 ross fputc( ' ', stdout );
371 1.1 ross writeHex_float_flags( testFlags, stdout );
372 1.1 ross fputc( '\n', stdout );
373 1.1 ross
374 1.1 ross }
375 1.1 ross
376 1.1 ross #ifdef FLOATX80
377 1.1 ross
378 1.1 ross static void
379 1.1 ross writeOutputs_z_floatx80(
380 1.1 ross floatx80 trueZ, uint8 trueFlags, floatx80 testZ, uint8 testFlags )
381 1.1 ross {
382 1.1 ross
383 1.1 ross fputs( trueName, stdout );
384 1.1 ross fputs( ": ", stdout );
385 1.1 ross writeHex_floatx80( trueZ, stdout );
386 1.1 ross fputc( ' ', stdout );
387 1.1 ross writeHex_float_flags( trueFlags, stdout );
388 1.1 ross fputs( " ", stdout );
389 1.1 ross fputs( testName, stdout );
390 1.1 ross fputs( ": ", stdout );
391 1.1 ross writeHex_floatx80( testZ, stdout );
392 1.1 ross fputc( ' ', stdout );
393 1.1 ross writeHex_float_flags( testFlags, stdout );
394 1.1 ross fputc( '\n', stdout );
395 1.1 ross
396 1.1 ross }
397 1.1 ross
398 1.1 ross #endif
399 1.1 ross
400 1.1 ross #ifdef FLOAT128
401 1.1 ross
402 1.1 ross static void
403 1.1 ross writeOutputs_z_float128(
404 1.1 ross float128 trueZ, uint8 trueFlags, float128 testZ, uint8 testFlags )
405 1.1 ross {
406 1.1 ross
407 1.1 ross fputs( trueName, stdout );
408 1.1 ross fputs( ": ", stdout );
409 1.1 ross writeHex_float128( trueZ, stdout );
410 1.1 ross fputc( ' ', stdout );
411 1.1 ross writeHex_float_flags( trueFlags, stdout );
412 1.1 ross fputs( "\n\t", stdout );
413 1.1 ross fputs( testName, stdout );
414 1.1 ross fputs( ": ", stdout );
415 1.1 ross writeHex_float128( testZ, stdout );
416 1.1 ross fputc( ' ', stdout );
417 1.1 ross writeHex_float_flags( testFlags, stdout );
418 1.1 ross fputc( '\n', stdout );
419 1.1 ross
420 1.1 ross }
421 1.1 ross
422 1.1 ross #endif
423 1.1 ross
424 1.1 ross INLINE flag float32_isNaN( float32 a )
425 1.1 ross {
426 1.1 ross
427 1.1 ross return 0x7F800000 < ( a & 0x7FFFFFFF );
428 1.1 ross
429 1.1 ross }
430 1.1 ross
431 1.1 ross #ifdef BITS64
432 1.1 ross
433 1.1 ross INLINE flag float64_same( float64 a, float64 b )
434 1.1 ross {
435 1.1 ross
436 1.1 ross return a == b;
437 1.1 ross
438 1.1 ross }
439 1.1 ross
440 1.1 ross INLINE flag float64_isNaN( float64 a )
441 1.1 ross {
442 1.1 ross
443 1.1 ross return LIT64( 0x7FF0000000000000 ) < ( a & LIT64( 0x7FFFFFFFFFFFFFFF ) );
444 1.1 ross
445 1.1 ross }
446 1.1 ross
447 1.1 ross #else
448 1.1 ross
449 1.1 ross INLINE flag float64_same( float64 a, float64 b )
450 1.1 ross {
451 1.1 ross
452 1.1 ross return ( a.high == b.high ) && ( a.low == b.low );
453 1.1 ross
454 1.1 ross }
455 1.1 ross
456 1.1 ross INLINE flag float64_isNaN( float64 a )
457 1.1 ross {
458 1.1 ross bits32 absAHigh;
459 1.1 ross
460 1.1 ross absAHigh = a.high & 0x7FFFFFFF;
461 1.1 ross return
462 1.1 ross ( 0x7FF00000 < absAHigh ) || ( ( absAHigh == 0x7FF00000 ) && a.low );
463 1.1 ross
464 1.1 ross }
465 1.1 ross
466 1.1 ross #endif
467 1.1 ross
468 1.1 ross #ifdef FLOATX80
469 1.1 ross
470 1.1 ross INLINE flag floatx80_same( floatx80 a, floatx80 b )
471 1.1 ross {
472 1.1 ross
473 1.1 ross return ( a.high == b.high ) && ( a.low == b.low );
474 1.1 ross
475 1.1 ross }
476 1.1 ross
477 1.1 ross INLINE flag floatx80_isNaN( floatx80 a )
478 1.1 ross {
479 1.1 ross
480 1.1 ross return ( ( a.high & 0x7FFF ) == 0x7FFF ) && a.low;
481 1.1 ross
482 1.1 ross }
483 1.1 ross
484 1.1 ross #endif
485 1.1 ross
486 1.1 ross #ifdef FLOAT128
487 1.1 ross
488 1.1 ross INLINE flag float128_same( float128 a, float128 b )
489 1.1 ross {
490 1.1 ross
491 1.1 ross return ( a.high == b.high ) && ( a.low == b.low );
492 1.1 ross
493 1.1 ross }
494 1.1 ross
495 1.1 ross INLINE flag float128_isNaN( float128 a )
496 1.1 ross {
497 1.1 ross bits64 absAHigh;
498 1.1 ross
499 1.1 ross absAHigh = a.high & LIT64( 0x7FFFFFFFFFFFFFFF );
500 1.1 ross return
501 1.1 ross ( LIT64( 0x7FFF000000000000 ) < absAHigh )
502 1.1 ross || ( ( absAHigh == LIT64( 0x7FFF000000000000 ) ) && a.low );
503 1.1 ross
504 1.1 ross }
505 1.1 ross
506 1.1 ross #endif
507 1.1 ross
508 1.1 ross void
509 1.1 ross test_a_int32_z_float32(
510 1.1 ross float32 trueFunction( int32 ), float32 testFunction( int32 ) )
511 1.1 ross {
512 1.1 ross int16 count;
513 1.1 ross float32 trueZ, testZ;
514 1.1 ross uint8 trueFlags, testFlags;
515 1.1 ross
516 1.1 ross errorCount = 0;
517 1.1 ross tenthousandsCount = 0;
518 1.1 ross count = 10000;
519 1.1 ross testCases_initSequence( testCases_sequence_a_int32 );
520 1.1 ross writeTestsTotal();
521 1.1 ross while ( ! testCases_done || forever ) {
522 1.1 ross testCases_next();
523 1.1 ross *trueFlagsPtr = 0;
524 1.1 ross trueZ = trueFunction( testCases_a_int32 );
525 1.1 ross trueFlags = *trueFlagsPtr;
526 1.1 ross (void) testFlagsFunctionPtr();
527 1.1 ross testZ = testFunction( testCases_a_int32 );
528 1.1 ross testFlags = testFlagsFunctionPtr();
529 1.1 ross --count;
530 1.1 ross if ( count == 0 ) {
531 1.1 ross checkEarlyExit();
532 1.1 ross count = 10000;
533 1.1 ross }
534 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
535 1.1 ross if ( ! checkNaNs
536 1.1 ross && float32_isNaN( trueZ )
537 1.1 ross && float32_isNaN( testZ )
538 1.1 ross && ! float32_is_signaling_nan( testZ )
539 1.1 ross && ( trueFlags == testFlags )
540 1.1 ross ) {
541 1.1 ross /* no problem */
542 1.1 ross }
543 1.1 ross else {
544 1.1 ross ++errorCount;
545 1.1 ross writeErrorFound( 10000 - count );
546 1.1 ross writeInput_a_int32();
547 1.1 ross fputs( " ", stdout );
548 1.1 ross writeOutputs_z_float32( trueZ, trueFlags, testZ, testFlags );
549 1.1 ross fflush( stdout );
550 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
551 1.1 ross }
552 1.1 ross }
553 1.1 ross }
554 1.1 ross exit:
555 1.1 ross writeTestsPerformed( 10000 - count );
556 1.1 ross
557 1.1 ross }
558 1.1 ross
559 1.1 ross void
560 1.1 ross test_a_int32_z_float64(
561 1.1 ross float64 trueFunction( int32 ), float64 testFunction( int32 ) )
562 1.1 ross {
563 1.1 ross int16 count;
564 1.1 ross float64 trueZ, testZ;
565 1.1 ross uint8 trueFlags, testFlags;
566 1.1 ross
567 1.1 ross errorCount = 0;
568 1.1 ross tenthousandsCount = 0;
569 1.1 ross count = 10000;
570 1.1 ross testCases_initSequence( testCases_sequence_a_int32 );
571 1.1 ross writeTestsTotal();
572 1.1 ross while ( ! testCases_done || forever ) {
573 1.1 ross testCases_next();
574 1.1 ross *trueFlagsPtr = 0;
575 1.1 ross trueZ = trueFunction( testCases_a_int32 );
576 1.1 ross trueFlags = *trueFlagsPtr;
577 1.1 ross (void) testFlagsFunctionPtr();
578 1.1 ross testZ = testFunction( testCases_a_int32 );
579 1.1 ross testFlags = testFlagsFunctionPtr();
580 1.1 ross --count;
581 1.1 ross if ( count == 0 ) {
582 1.1 ross checkEarlyExit();
583 1.1 ross count = 10000;
584 1.1 ross }
585 1.1 ross if ( ! float64_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
586 1.1 ross if ( ! checkNaNs
587 1.1 ross && float64_isNaN( trueZ )
588 1.1 ross && float64_isNaN( testZ )
589 1.1 ross && ! float64_is_signaling_nan( testZ )
590 1.1 ross && ( trueFlags == testFlags )
591 1.1 ross ) {
592 1.1 ross /* no problem */
593 1.1 ross }
594 1.1 ross else {
595 1.1 ross ++errorCount;
596 1.1 ross writeErrorFound( 10000 - count );
597 1.1 ross writeInput_a_int32();
598 1.1 ross fputs( " ", stdout );
599 1.1 ross writeOutputs_z_float64( trueZ, trueFlags, testZ, testFlags );
600 1.1 ross fflush( stdout );
601 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
602 1.1 ross }
603 1.1 ross }
604 1.1 ross }
605 1.1 ross exit:
606 1.1 ross writeTestsPerformed( 10000 - count );
607 1.1 ross
608 1.1 ross }
609 1.1 ross
610 1.1 ross #ifdef FLOATX80
611 1.1 ross
612 1.1 ross void
613 1.1 ross test_a_int32_z_floatx80(
614 1.1 ross floatx80 trueFunction( int32 ), floatx80 testFunction( int32 ) )
615 1.1 ross {
616 1.1 ross int16 count;
617 1.1 ross floatx80 trueZ, testZ;
618 1.1 ross uint8 trueFlags, testFlags;
619 1.1 ross
620 1.1 ross errorCount = 0;
621 1.1 ross tenthousandsCount = 0;
622 1.1 ross count = 10000;
623 1.1 ross testCases_initSequence( testCases_sequence_a_int32 );
624 1.1 ross writeTestsTotal();
625 1.1 ross while ( ! testCases_done || forever ) {
626 1.1 ross testCases_next();
627 1.1 ross *trueFlagsPtr = 0;
628 1.1 ross trueZ = trueFunction( testCases_a_int32 );
629 1.1 ross trueFlags = *trueFlagsPtr;
630 1.1 ross (void) testFlagsFunctionPtr();
631 1.1 ross testZ = testFunction( testCases_a_int32 );
632 1.1 ross testFlags = testFlagsFunctionPtr();
633 1.1 ross --count;
634 1.1 ross if ( count == 0 ) {
635 1.1 ross checkEarlyExit();
636 1.1 ross count = 10000;
637 1.1 ross }
638 1.1 ross if ( ! floatx80_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
639 1.1 ross if ( ! checkNaNs
640 1.1 ross && floatx80_isNaN( trueZ )
641 1.1 ross && floatx80_isNaN( testZ )
642 1.1 ross && ! floatx80_is_signaling_nan( testZ )
643 1.1 ross && ( trueFlags == testFlags )
644 1.1 ross ) {
645 1.1 ross /* no problem */
646 1.1 ross }
647 1.1 ross else {
648 1.1 ross ++errorCount;
649 1.1 ross writeErrorFound( 10000 - count );
650 1.1 ross writeInput_a_int32();
651 1.1 ross fputs( " ", stdout );
652 1.1 ross writeOutputs_z_floatx80( trueZ, trueFlags, testZ, testFlags );
653 1.1 ross fflush( stdout );
654 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
655 1.1 ross }
656 1.1 ross }
657 1.1 ross }
658 1.1 ross exit:
659 1.1 ross writeTestsPerformed( 10000 - count );
660 1.1 ross
661 1.1 ross }
662 1.1 ross
663 1.1 ross #endif
664 1.1 ross
665 1.1 ross #ifdef FLOAT128
666 1.1 ross
667 1.1 ross void
668 1.1 ross test_a_int32_z_float128(
669 1.1 ross float128 trueFunction( int32 ), float128 testFunction( int32 ) )
670 1.1 ross {
671 1.1 ross int16 count;
672 1.1 ross float128 trueZ, testZ;
673 1.1 ross uint8 trueFlags, testFlags;
674 1.1 ross
675 1.1 ross errorCount = 0;
676 1.1 ross tenthousandsCount = 0;
677 1.1 ross count = 10000;
678 1.1 ross testCases_initSequence( testCases_sequence_a_int32 );
679 1.1 ross writeTestsTotal();
680 1.1 ross while ( ! testCases_done || forever ) {
681 1.1 ross testCases_next();
682 1.1 ross *trueFlagsPtr = 0;
683 1.1 ross trueZ = trueFunction( testCases_a_int32 );
684 1.1 ross trueFlags = *trueFlagsPtr;
685 1.1 ross (void) testFlagsFunctionPtr();
686 1.1 ross testZ = testFunction( testCases_a_int32 );
687 1.1 ross testFlags = testFlagsFunctionPtr();
688 1.1 ross --count;
689 1.1 ross if ( count == 0 ) {
690 1.1 ross checkEarlyExit();
691 1.1 ross count = 10000;
692 1.1 ross }
693 1.1 ross if ( ! float128_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
694 1.1 ross if ( ! checkNaNs
695 1.1 ross && float128_isNaN( trueZ )
696 1.1 ross && float128_isNaN( testZ )
697 1.1 ross && ! float128_is_signaling_nan( testZ )
698 1.1 ross && ( trueFlags == testFlags )
699 1.1 ross ) {
700 1.1 ross /* no problem */
701 1.1 ross }
702 1.1 ross else {
703 1.1 ross ++errorCount;
704 1.1 ross writeErrorFound( 10000 - count );
705 1.1 ross writeInput_a_int32();
706 1.1 ross fputs( "\n\t", stdout );
707 1.1 ross writeOutputs_z_float128( trueZ, trueFlags, testZ, testFlags );
708 1.1 ross fflush( stdout );
709 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
710 1.1 ross }
711 1.1 ross }
712 1.1 ross }
713 1.1 ross exit:
714 1.1 ross writeTestsPerformed( 10000 - count );
715 1.1 ross
716 1.1 ross }
717 1.1 ross
718 1.1 ross #endif
719 1.1 ross
720 1.1 ross #ifdef BITS64
721 1.1 ross
722 1.1 ross void
723 1.1 ross test_a_int64_z_float32(
724 1.1 ross float32 trueFunction( int64 ), float32 testFunction( int64 ) )
725 1.1 ross {
726 1.1 ross int16 count;
727 1.1 ross float32 trueZ, testZ;
728 1.1 ross uint8 trueFlags, testFlags;
729 1.1 ross
730 1.1 ross errorCount = 0;
731 1.1 ross tenthousandsCount = 0;
732 1.1 ross count = 10000;
733 1.1 ross testCases_initSequence( testCases_sequence_a_int64 );
734 1.1 ross writeTestsTotal();
735 1.1 ross while ( ! testCases_done || forever ) {
736 1.1 ross testCases_next();
737 1.1 ross *trueFlagsPtr = 0;
738 1.1 ross trueZ = trueFunction( testCases_a_int64 );
739 1.1 ross trueFlags = *trueFlagsPtr;
740 1.1 ross (void) testFlagsFunctionPtr();
741 1.1 ross testZ = testFunction( testCases_a_int64 );
742 1.1 ross testFlags = testFlagsFunctionPtr();
743 1.1 ross --count;
744 1.1 ross if ( count == 0 ) {
745 1.1 ross checkEarlyExit();
746 1.1 ross count = 10000;
747 1.1 ross }
748 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
749 1.1 ross if ( ! checkNaNs
750 1.1 ross && float32_isNaN( trueZ )
751 1.1 ross && float32_isNaN( testZ )
752 1.1 ross && ! float32_is_signaling_nan( testZ )
753 1.1 ross && ( trueFlags == testFlags )
754 1.1 ross ) {
755 1.1 ross /* no problem */
756 1.1 ross }
757 1.1 ross else {
758 1.1 ross ++errorCount;
759 1.1 ross writeErrorFound( 10000 - count );
760 1.1 ross writeInput_a_int64();
761 1.1 ross fputs( " ", stdout );
762 1.1 ross writeOutputs_z_float32( trueZ, trueFlags, testZ, testFlags );
763 1.1 ross fflush( stdout );
764 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
765 1.1 ross }
766 1.1 ross }
767 1.1 ross }
768 1.1 ross exit:
769 1.1 ross writeTestsPerformed( 10000 - count );
770 1.1 ross
771 1.1 ross }
772 1.1 ross
773 1.1 ross void
774 1.1 ross test_a_int64_z_float64(
775 1.1 ross float64 trueFunction( int64 ), float64 testFunction( int64 ) )
776 1.1 ross {
777 1.1 ross int16 count;
778 1.1 ross float64 trueZ, testZ;
779 1.1 ross uint8 trueFlags, testFlags;
780 1.1 ross
781 1.1 ross errorCount = 0;
782 1.1 ross tenthousandsCount = 0;
783 1.1 ross count = 10000;
784 1.1 ross testCases_initSequence( testCases_sequence_a_int64 );
785 1.1 ross writeTestsTotal();
786 1.1 ross while ( ! testCases_done || forever ) {
787 1.1 ross testCases_next();
788 1.1 ross *trueFlagsPtr = 0;
789 1.1 ross trueZ = trueFunction( testCases_a_int64 );
790 1.1 ross trueFlags = *trueFlagsPtr;
791 1.1 ross (void) testFlagsFunctionPtr();
792 1.1 ross testZ = testFunction( testCases_a_int64 );
793 1.1 ross testFlags = testFlagsFunctionPtr();
794 1.1 ross --count;
795 1.1 ross if ( count == 0 ) {
796 1.1 ross checkEarlyExit();
797 1.1 ross count = 10000;
798 1.1 ross }
799 1.1 ross if ( ! float64_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
800 1.1 ross if ( ! checkNaNs
801 1.1 ross && float64_isNaN( trueZ )
802 1.1 ross && float64_isNaN( testZ )
803 1.1 ross && ! float64_is_signaling_nan( testZ )
804 1.1 ross && ( trueFlags == testFlags )
805 1.1 ross ) {
806 1.1 ross /* no problem */
807 1.1 ross }
808 1.1 ross else {
809 1.1 ross ++errorCount;
810 1.1 ross writeErrorFound( 10000 - count );
811 1.1 ross writeInput_a_int64();
812 1.1 ross fputs( " ", stdout );
813 1.1 ross writeOutputs_z_float64( trueZ, trueFlags, testZ, testFlags );
814 1.1 ross fflush( stdout );
815 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
816 1.1 ross }
817 1.1 ross }
818 1.1 ross }
819 1.1 ross exit:
820 1.1 ross writeTestsPerformed( 10000 - count );
821 1.1 ross
822 1.1 ross }
823 1.1 ross
824 1.1 ross #ifdef FLOATX80
825 1.1 ross
826 1.1 ross void
827 1.1 ross test_a_int64_z_floatx80(
828 1.1 ross floatx80 trueFunction( int64 ), floatx80 testFunction( int64 ) )
829 1.1 ross {
830 1.1 ross int16 count;
831 1.1 ross floatx80 trueZ, testZ;
832 1.1 ross uint8 trueFlags, testFlags;
833 1.1 ross
834 1.1 ross errorCount = 0;
835 1.1 ross tenthousandsCount = 0;
836 1.1 ross count = 10000;
837 1.1 ross testCases_initSequence( testCases_sequence_a_int64 );
838 1.1 ross writeTestsTotal();
839 1.1 ross while ( ! testCases_done || forever ) {
840 1.1 ross testCases_next();
841 1.1 ross *trueFlagsPtr = 0;
842 1.1 ross trueZ = trueFunction( testCases_a_int64 );
843 1.1 ross trueFlags = *trueFlagsPtr;
844 1.1 ross (void) testFlagsFunctionPtr();
845 1.1 ross testZ = testFunction( testCases_a_int64 );
846 1.1 ross testFlags = testFlagsFunctionPtr();
847 1.1 ross --count;
848 1.1 ross if ( count == 0 ) {
849 1.1 ross checkEarlyExit();
850 1.1 ross count = 10000;
851 1.1 ross }
852 1.1 ross if ( ! floatx80_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
853 1.1 ross if ( ! checkNaNs
854 1.1 ross && floatx80_isNaN( trueZ )
855 1.1 ross && floatx80_isNaN( testZ )
856 1.1 ross && ! floatx80_is_signaling_nan( testZ )
857 1.1 ross && ( trueFlags == testFlags )
858 1.1 ross ) {
859 1.1 ross /* no problem */
860 1.1 ross }
861 1.1 ross else {
862 1.1 ross ++errorCount;
863 1.1 ross writeErrorFound( 10000 - count );
864 1.1 ross writeInput_a_int64();
865 1.1 ross fputs( " ", stdout );
866 1.1 ross writeOutputs_z_floatx80( trueZ, trueFlags, testZ, testFlags );
867 1.1 ross fflush( stdout );
868 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
869 1.1 ross }
870 1.1 ross }
871 1.1 ross }
872 1.1 ross exit:
873 1.1 ross writeTestsPerformed( 10000 - count );
874 1.1 ross
875 1.1 ross }
876 1.1 ross
877 1.1 ross #endif
878 1.1 ross
879 1.1 ross #ifdef FLOAT128
880 1.1 ross
881 1.1 ross void
882 1.1 ross test_a_int64_z_float128(
883 1.1 ross float128 trueFunction( int64 ), float128 testFunction( int64 ) )
884 1.1 ross {
885 1.1 ross int16 count;
886 1.1 ross float128 trueZ, testZ;
887 1.1 ross uint8 trueFlags, testFlags;
888 1.1 ross
889 1.1 ross errorCount = 0;
890 1.1 ross tenthousandsCount = 0;
891 1.1 ross count = 10000;
892 1.1 ross testCases_initSequence( testCases_sequence_a_int64 );
893 1.1 ross writeTestsTotal();
894 1.1 ross while ( ! testCases_done || forever ) {
895 1.1 ross testCases_next();
896 1.1 ross *trueFlagsPtr = 0;
897 1.1 ross trueZ = trueFunction( testCases_a_int64 );
898 1.1 ross trueFlags = *trueFlagsPtr;
899 1.1 ross (void) testFlagsFunctionPtr();
900 1.1 ross testZ = testFunction( testCases_a_int64 );
901 1.1 ross testFlags = testFlagsFunctionPtr();
902 1.1 ross --count;
903 1.1 ross if ( count == 0 ) {
904 1.1 ross checkEarlyExit();
905 1.1 ross count = 10000;
906 1.1 ross }
907 1.1 ross if ( ! float128_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
908 1.1 ross if ( ! checkNaNs
909 1.1 ross && float128_isNaN( trueZ )
910 1.1 ross && float128_isNaN( testZ )
911 1.1 ross && ! float128_is_signaling_nan( testZ )
912 1.1 ross && ( trueFlags == testFlags )
913 1.1 ross ) {
914 1.1 ross /* no problem */
915 1.1 ross }
916 1.1 ross else {
917 1.1 ross ++errorCount;
918 1.1 ross writeErrorFound( 10000 - count );
919 1.1 ross writeInput_a_int64();
920 1.1 ross fputs( "\n\t", stdout );
921 1.1 ross writeOutputs_z_float128( trueZ, trueFlags, testZ, testFlags );
922 1.1 ross fflush( stdout );
923 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
924 1.1 ross }
925 1.1 ross }
926 1.1 ross }
927 1.1 ross exit:
928 1.1 ross writeTestsPerformed( 10000 - count );
929 1.1 ross
930 1.1 ross }
931 1.1 ross
932 1.1 ross #endif
933 1.1 ross
934 1.1 ross #endif
935 1.1 ross
936 1.1 ross void
937 1.1 ross test_a_float32_z_int32(
938 1.1 ross int32 trueFunction( float32 ), int32 testFunction( float32 ) )
939 1.1 ross {
940 1.1 ross int16 count;
941 1.1 ross int32 trueZ, testZ;
942 1.1 ross uint8 trueFlags, testFlags;
943 1.1 ross
944 1.1 ross errorCount = 0;
945 1.1 ross tenthousandsCount = 0;
946 1.1 ross count = 10000;
947 1.1 ross testCases_initSequence( testCases_sequence_a_float32 );
948 1.1 ross writeTestsTotal();
949 1.1 ross while ( ! testCases_done || forever ) {
950 1.1 ross testCases_next();
951 1.1 ross *trueFlagsPtr = 0;
952 1.1 ross trueZ = trueFunction( testCases_a_float32 );
953 1.1 ross trueFlags = *trueFlagsPtr;
954 1.1 ross (void) testFlagsFunctionPtr();
955 1.1 ross testZ = testFunction( testCases_a_float32 );
956 1.1 ross testFlags = testFlagsFunctionPtr();
957 1.1 ross --count;
958 1.1 ross if ( count == 0 ) {
959 1.1 ross checkEarlyExit();
960 1.1 ross count = 10000;
961 1.1 ross }
962 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
963 1.1 ross if ( ! checkNaNs
964 1.1 ross && float32_is_signaling_nan( testCases_a_float32 ) ) {
965 1.1 ross trueFlags |= float_flag_invalid;
966 1.1 ross }
967 1.1 ross if ( ( trueZ == 0x7FFFFFFF )
968 1.1 ross && ( ( testZ == 0x7FFFFFFF )
969 1.1 ross || ( testZ == (sbits32) 0x80000000 ) )
970 1.1 ross && ( trueFlags == float_flag_invalid )
971 1.1 ross && ( testFlags == float_flag_invalid )
972 1.1 ross ) {
973 1.1 ross /* no problem */
974 1.1 ross }
975 1.1 ross else {
976 1.1 ross ++errorCount;
977 1.1 ross writeErrorFound( 10000 - count );
978 1.1 ross writeInput_a_float32();
979 1.1 ross fputs( " ", stdout );
980 1.1 ross writeOutputs_z_int32( trueZ, trueFlags, testZ, testFlags );
981 1.1 ross fflush( stdout );
982 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
983 1.1 ross }
984 1.1 ross }
985 1.1 ross }
986 1.1 ross exit:
987 1.1 ross writeTestsPerformed( 10000 - count );
988 1.1 ross
989 1.1 ross }
990 1.1 ross
991 1.1 ross #ifdef BITS64
992 1.1 ross
993 1.1 ross void
994 1.1 ross test_a_float32_z_int64(
995 1.1 ross int64 trueFunction( float32 ), int64 testFunction( float32 ) )
996 1.1 ross {
997 1.1 ross int16 count;
998 1.1 ross int64 trueZ, testZ;
999 1.1 ross uint8 trueFlags, testFlags;
1000 1.1 ross
1001 1.1 ross errorCount = 0;
1002 1.1 ross tenthousandsCount = 0;
1003 1.1 ross count = 10000;
1004 1.1 ross testCases_initSequence( testCases_sequence_a_float32 );
1005 1.1 ross writeTestsTotal();
1006 1.1 ross while ( ! testCases_done || forever ) {
1007 1.1 ross testCases_next();
1008 1.1 ross *trueFlagsPtr = 0;
1009 1.1 ross trueZ = trueFunction( testCases_a_float32 );
1010 1.1 ross trueFlags = *trueFlagsPtr;
1011 1.1 ross (void) testFlagsFunctionPtr();
1012 1.1 ross testZ = testFunction( testCases_a_float32 );
1013 1.1 ross testFlags = testFlagsFunctionPtr();
1014 1.1 ross --count;
1015 1.1 ross if ( count == 0 ) {
1016 1.1 ross checkEarlyExit();
1017 1.1 ross count = 10000;
1018 1.1 ross }
1019 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
1020 1.1 ross if ( ! checkNaNs
1021 1.1 ross && float32_is_signaling_nan( testCases_a_float32 ) ) {
1022 1.1 ross trueFlags |= float_flag_invalid;
1023 1.1 ross }
1024 1.1 ross if ( ( trueZ == LIT64( 0x7FFFFFFFFFFFFFFF ) )
1025 1.1 ross && ( ( testZ == LIT64( 0x7FFFFFFFFFFFFFFF ) )
1026 1.1 ross || ( testZ == (sbits64) LIT64( 0x8000000000000000 ) ) )
1027 1.1 ross && ( trueFlags == float_flag_invalid )
1028 1.1 ross && ( testFlags == float_flag_invalid )
1029 1.1 ross ) {
1030 1.1 ross /* no problem */
1031 1.1 ross }
1032 1.1 ross else {
1033 1.1 ross ++errorCount;
1034 1.1 ross writeErrorFound( 10000 - count );
1035 1.1 ross writeInput_a_float32();
1036 1.1 ross fputs( " ", stdout );
1037 1.1 ross writeOutputs_z_int64( trueZ, trueFlags, testZ, testFlags );
1038 1.1 ross fflush( stdout );
1039 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
1040 1.1 ross }
1041 1.1 ross }
1042 1.1 ross }
1043 1.1 ross exit:
1044 1.1 ross writeTestsPerformed( 10000 - count );
1045 1.1 ross
1046 1.1 ross }
1047 1.1 ross
1048 1.1 ross #endif
1049 1.1 ross
1050 1.1 ross void
1051 1.1 ross test_a_float32_z_float64(
1052 1.1 ross float64 trueFunction( float32 ), float64 testFunction( float32 ) )
1053 1.1 ross {
1054 1.1 ross int16 count;
1055 1.1 ross float64 trueZ, testZ;
1056 1.1 ross uint8 trueFlags, testFlags;
1057 1.1 ross
1058 1.1 ross errorCount = 0;
1059 1.1 ross tenthousandsCount = 0;
1060 1.1 ross count = 10000;
1061 1.1 ross testCases_initSequence( testCases_sequence_a_float32 );
1062 1.1 ross writeTestsTotal();
1063 1.1 ross while ( ! testCases_done || forever ) {
1064 1.1 ross testCases_next();
1065 1.1 ross *trueFlagsPtr = 0;
1066 1.1 ross trueZ = trueFunction( testCases_a_float32 );
1067 1.1 ross trueFlags = *trueFlagsPtr;
1068 1.1 ross (void) testFlagsFunctionPtr();
1069 1.1 ross testZ = testFunction( testCases_a_float32 );
1070 1.1 ross testFlags = testFlagsFunctionPtr();
1071 1.1 ross --count;
1072 1.1 ross if ( count == 0 ) {
1073 1.1 ross checkEarlyExit();
1074 1.1 ross count = 10000;
1075 1.1 ross }
1076 1.1 ross if ( ! float64_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
1077 1.1 ross if ( ! checkNaNs
1078 1.1 ross && float32_is_signaling_nan( testCases_a_float32 ) ) {
1079 1.1 ross trueFlags |= float_flag_invalid;
1080 1.1 ross }
1081 1.1 ross if ( ! checkNaNs
1082 1.1 ross && float64_isNaN( trueZ )
1083 1.1 ross && float64_isNaN( testZ )
1084 1.1 ross && ! float64_is_signaling_nan( testZ )
1085 1.1 ross && ( trueFlags == testFlags )
1086 1.1 ross ) {
1087 1.1 ross /* no problem */
1088 1.1 ross }
1089 1.1 ross else {
1090 1.1 ross ++errorCount;
1091 1.1 ross writeErrorFound( 10000 - count );
1092 1.1 ross writeInput_a_float32();
1093 1.1 ross fputs( " ", stdout );
1094 1.1 ross writeOutputs_z_float64( trueZ, trueFlags, testZ, testFlags );
1095 1.1 ross fflush( stdout );
1096 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
1097 1.1 ross }
1098 1.1 ross }
1099 1.1 ross }
1100 1.1 ross exit:
1101 1.1 ross writeTestsPerformed( 10000 - count );
1102 1.1 ross
1103 1.1 ross }
1104 1.1 ross
1105 1.1 ross #ifdef FLOATX80
1106 1.1 ross
1107 1.1 ross void
1108 1.1 ross test_a_float32_z_floatx80(
1109 1.1 ross floatx80 trueFunction( float32 ), floatx80 testFunction( float32 ) )
1110 1.1 ross {
1111 1.1 ross int16 count;
1112 1.1 ross floatx80 trueZ, testZ;
1113 1.1 ross uint8 trueFlags, testFlags;
1114 1.1 ross
1115 1.1 ross errorCount = 0;
1116 1.1 ross tenthousandsCount = 0;
1117 1.1 ross count = 10000;
1118 1.1 ross testCases_initSequence( testCases_sequence_a_float32 );
1119 1.1 ross writeTestsTotal();
1120 1.1 ross while ( ! testCases_done || forever ) {
1121 1.1 ross testCases_next();
1122 1.1 ross *trueFlagsPtr = 0;
1123 1.1 ross trueZ = trueFunction( testCases_a_float32 );
1124 1.1 ross trueFlags = *trueFlagsPtr;
1125 1.1 ross (void) testFlagsFunctionPtr();
1126 1.1 ross testZ = testFunction( testCases_a_float32 );
1127 1.1 ross testFlags = testFlagsFunctionPtr();
1128 1.1 ross --count;
1129 1.1 ross if ( count == 0 ) {
1130 1.1 ross checkEarlyExit();
1131 1.1 ross count = 10000;
1132 1.1 ross }
1133 1.1 ross if ( ! floatx80_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
1134 1.1 ross if ( ! checkNaNs
1135 1.1 ross && float32_is_signaling_nan( testCases_a_float32 ) ) {
1136 1.1 ross trueFlags |= float_flag_invalid;
1137 1.1 ross }
1138 1.1 ross if ( ! checkNaNs
1139 1.1 ross && floatx80_isNaN( trueZ )
1140 1.1 ross && floatx80_isNaN( testZ )
1141 1.1 ross && ! floatx80_is_signaling_nan( testZ )
1142 1.1 ross && ( trueFlags == testFlags )
1143 1.1 ross ) {
1144 1.1 ross /* no problem */
1145 1.1 ross }
1146 1.1 ross else {
1147 1.1 ross ++errorCount;
1148 1.1 ross writeErrorFound( 10000 - count );
1149 1.1 ross writeInput_a_float32();
1150 1.1 ross fputs( "\n\t", stdout );
1151 1.1 ross writeOutputs_z_floatx80( trueZ, trueFlags, testZ, testFlags );
1152 1.1 ross fflush( stdout );
1153 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
1154 1.1 ross }
1155 1.1 ross }
1156 1.1 ross }
1157 1.1 ross exit:
1158 1.1 ross writeTestsPerformed( 10000 - count );
1159 1.1 ross
1160 1.1 ross }
1161 1.1 ross
1162 1.1 ross #endif
1163 1.1 ross
1164 1.1 ross #ifdef FLOAT128
1165 1.1 ross
1166 1.1 ross void
1167 1.1 ross test_a_float32_z_float128(
1168 1.1 ross float128 trueFunction( float32 ), float128 testFunction( float32 ) )
1169 1.1 ross {
1170 1.1 ross int16 count;
1171 1.1 ross float128 trueZ, testZ;
1172 1.1 ross uint8 trueFlags, testFlags;
1173 1.1 ross
1174 1.1 ross errorCount = 0;
1175 1.1 ross tenthousandsCount = 0;
1176 1.1 ross count = 10000;
1177 1.1 ross testCases_initSequence( testCases_sequence_a_float32 );
1178 1.1 ross writeTestsTotal();
1179 1.1 ross while ( ! testCases_done || forever ) {
1180 1.1 ross testCases_next();
1181 1.1 ross *trueFlagsPtr = 0;
1182 1.1 ross trueZ = trueFunction( testCases_a_float32 );
1183 1.1 ross trueFlags = *trueFlagsPtr;
1184 1.1 ross (void) testFlagsFunctionPtr();
1185 1.1 ross testZ = testFunction( testCases_a_float32 );
1186 1.1 ross testFlags = testFlagsFunctionPtr();
1187 1.1 ross --count;
1188 1.1 ross if ( count == 0 ) {
1189 1.1 ross checkEarlyExit();
1190 1.1 ross count = 10000;
1191 1.1 ross }
1192 1.1 ross if ( ! float128_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
1193 1.1 ross if ( ! checkNaNs
1194 1.1 ross && float32_is_signaling_nan( testCases_a_float32 ) ) {
1195 1.1 ross trueFlags |= float_flag_invalid;
1196 1.1 ross }
1197 1.1 ross if ( ! checkNaNs
1198 1.1 ross && float128_isNaN( trueZ )
1199 1.1 ross && float128_isNaN( testZ )
1200 1.1 ross && ! float128_is_signaling_nan( testZ )
1201 1.1 ross && ( trueFlags == testFlags )
1202 1.1 ross ) {
1203 1.1 ross /* no problem */
1204 1.1 ross }
1205 1.1 ross else {
1206 1.1 ross ++errorCount;
1207 1.1 ross writeErrorFound( 10000 - count );
1208 1.1 ross writeInput_a_float32();
1209 1.1 ross fputs( "\n\t", stdout );
1210 1.1 ross writeOutputs_z_float128( trueZ, trueFlags, testZ, testFlags );
1211 1.1 ross fflush( stdout );
1212 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
1213 1.1 ross }
1214 1.1 ross }
1215 1.1 ross }
1216 1.1 ross exit:
1217 1.1 ross writeTestsPerformed( 10000 - count );
1218 1.1 ross
1219 1.1 ross }
1220 1.1 ross
1221 1.1 ross #endif
1222 1.1 ross
1223 1.1 ross void
1224 1.1 ross test_az_float32(
1225 1.1 ross float32 trueFunction( float32 ), float32 testFunction( float32 ) )
1226 1.1 ross {
1227 1.1 ross int16 count;
1228 1.1 ross float32 trueZ, testZ;
1229 1.1 ross uint8 trueFlags, testFlags;
1230 1.1 ross
1231 1.1 ross errorCount = 0;
1232 1.1 ross tenthousandsCount = 0;
1233 1.1 ross count = 10000;
1234 1.1 ross testCases_initSequence( testCases_sequence_a_float32 );
1235 1.1 ross writeTestsTotal();
1236 1.1 ross while ( ! testCases_done || forever ) {
1237 1.1 ross testCases_next();
1238 1.1 ross *trueFlagsPtr = 0;
1239 1.1 ross trueZ = trueFunction( testCases_a_float32 );
1240 1.1 ross trueFlags = *trueFlagsPtr;
1241 1.1 ross (void) testFlagsFunctionPtr();
1242 1.1 ross testZ = testFunction( testCases_a_float32 );
1243 1.1 ross testFlags = testFlagsFunctionPtr();
1244 1.1 ross --count;
1245 1.1 ross if ( count == 0 ) {
1246 1.1 ross checkEarlyExit();
1247 1.1 ross count = 10000;
1248 1.1 ross }
1249 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
1250 1.1 ross if ( ! checkNaNs
1251 1.1 ross && float32_is_signaling_nan( testCases_a_float32 ) ) {
1252 1.1 ross trueFlags |= float_flag_invalid;
1253 1.1 ross }
1254 1.1 ross if ( ! checkNaNs
1255 1.1 ross && float32_isNaN( trueZ )
1256 1.1 ross && float32_isNaN( testZ )
1257 1.1 ross && ! float32_is_signaling_nan( testZ )
1258 1.1 ross && ( trueFlags == testFlags )
1259 1.1 ross ) {
1260 1.1 ross /* no problem */
1261 1.1 ross }
1262 1.1 ross else {
1263 1.1 ross ++errorCount;
1264 1.1 ross writeErrorFound( 10000 - count );
1265 1.1 ross writeInput_a_float32();
1266 1.1 ross fputs( " ", stdout );
1267 1.1 ross writeOutputs_z_float32( trueZ, trueFlags, testZ, testFlags );
1268 1.1 ross fflush( stdout );
1269 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
1270 1.1 ross }
1271 1.1 ross }
1272 1.1 ross }
1273 1.1 ross exit:
1274 1.1 ross writeTestsPerformed( 10000 - count );
1275 1.1 ross
1276 1.1 ross }
1277 1.1 ross
1278 1.1 ross void
1279 1.1 ross test_ab_float32_z_flag(
1280 1.1 ross flag trueFunction( float32, float32 ),
1281 1.1 ross flag testFunction( float32, float32 )
1282 1.1 ross )
1283 1.1 ross {
1284 1.1 ross int16 count;
1285 1.1 ross flag trueZ, testZ;
1286 1.1 ross uint8 trueFlags, testFlags;
1287 1.1 ross
1288 1.1 ross errorCount = 0;
1289 1.1 ross tenthousandsCount = 0;
1290 1.1 ross count = 10000;
1291 1.1 ross testCases_initSequence( testCases_sequence_ab_float32 );
1292 1.1 ross writeTestsTotal();
1293 1.1 ross while ( ! testCases_done || forever ) {
1294 1.1 ross testCases_next();
1295 1.1 ross *trueFlagsPtr = 0;
1296 1.1 ross trueZ = trueFunction( testCases_a_float32, testCases_b_float32 );
1297 1.1 ross trueFlags = *trueFlagsPtr;
1298 1.1 ross (void) testFlagsFunctionPtr();
1299 1.1 ross testZ = testFunction( testCases_a_float32, testCases_b_float32 );
1300 1.1 ross testFlags = testFlagsFunctionPtr();
1301 1.1 ross --count;
1302 1.1 ross if ( count == 0 ) {
1303 1.1 ross checkEarlyExit();
1304 1.1 ross count = 10000;
1305 1.1 ross }
1306 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
1307 1.1 ross if ( ! checkNaNs
1308 1.1 ross && ( float32_is_signaling_nan( testCases_a_float32 )
1309 1.1 ross || float32_is_signaling_nan( testCases_b_float32 ) )
1310 1.1 ross ) {
1311 1.1 ross trueFlags |= float_flag_invalid;
1312 1.1 ross }
1313 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
1314 1.1 ross ++errorCount;
1315 1.1 ross writeErrorFound( 10000 - count );
1316 1.1 ross writeInputs_ab_float32();
1317 1.1 ross fputs( " ", stdout );
1318 1.1 ross writeOutputs_z_flag( trueZ, trueFlags, testZ, testFlags );
1319 1.1 ross fflush( stdout );
1320 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
1321 1.1 ross }
1322 1.1 ross }
1323 1.1 ross }
1324 1.1 ross exit:
1325 1.1 ross writeTestsPerformed( 10000 - count );
1326 1.1 ross return;
1327 1.1 ross
1328 1.1 ross }
1329 1.1 ross
1330 1.1 ross void
1331 1.1 ross test_abz_float32(
1332 1.1 ross float32 trueFunction( float32, float32 ),
1333 1.1 ross float32 testFunction( float32, float32 )
1334 1.1 ross )
1335 1.1 ross {
1336 1.1 ross int16 count;
1337 1.1 ross float32 trueZ, testZ;
1338 1.1 ross uint8 trueFlags, testFlags;
1339 1.1 ross
1340 1.1 ross errorCount = 0;
1341 1.1 ross tenthousandsCount = 0;
1342 1.1 ross count = 10000;
1343 1.1 ross testCases_initSequence( testCases_sequence_ab_float32 );
1344 1.1 ross writeTestsTotal();
1345 1.1 ross while ( ! testCases_done || forever ) {
1346 1.1 ross testCases_next();
1347 1.1 ross *trueFlagsPtr = 0;
1348 1.1 ross trueZ = trueFunction( testCases_a_float32, testCases_b_float32 );
1349 1.1 ross trueFlags = *trueFlagsPtr;
1350 1.1 ross (void) testFlagsFunctionPtr();
1351 1.1 ross testZ = testFunction( testCases_a_float32, testCases_b_float32 );
1352 1.1 ross testFlags = testFlagsFunctionPtr();
1353 1.1 ross --count;
1354 1.1 ross if ( count == 0 ) {
1355 1.1 ross checkEarlyExit();
1356 1.1 ross count = 10000;
1357 1.1 ross }
1358 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
1359 1.1 ross if ( ! checkNaNs
1360 1.1 ross && ( float32_is_signaling_nan( testCases_a_float32 )
1361 1.1 ross || float32_is_signaling_nan( testCases_b_float32 ) )
1362 1.1 ross ) {
1363 1.1 ross trueFlags |= float_flag_invalid;
1364 1.1 ross }
1365 1.1 ross if ( ! checkNaNs
1366 1.1 ross && float32_isNaN( trueZ )
1367 1.1 ross && float32_isNaN( testZ )
1368 1.1 ross && ! float32_is_signaling_nan( testZ )
1369 1.1 ross && ( trueFlags == testFlags )
1370 1.1 ross ) {
1371 1.1 ross /* no problem */
1372 1.1 ross }
1373 1.1 ross else {
1374 1.1 ross ++errorCount;
1375 1.1 ross writeErrorFound( 10000 - count );
1376 1.1 ross writeInputs_ab_float32();
1377 1.1 ross fputs( " ", stdout );
1378 1.1 ross writeOutputs_z_float32( trueZ, trueFlags, testZ, testFlags );
1379 1.1 ross fflush( stdout );
1380 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
1381 1.1 ross }
1382 1.1 ross }
1383 1.1 ross }
1384 1.1 ross exit:
1385 1.1 ross writeTestsPerformed( 10000 - count );
1386 1.1 ross return;
1387 1.1 ross
1388 1.1 ross }
1389 1.1 ross
1390 1.1 ross void
1391 1.1 ross test_a_float64_z_int32(
1392 1.1 ross int32 trueFunction( float64 ), int32 testFunction( float64 ) )
1393 1.1 ross {
1394 1.1 ross int16 count;
1395 1.1 ross int32 trueZ, testZ;
1396 1.1 ross uint8 trueFlags, testFlags;
1397 1.1 ross
1398 1.1 ross errorCount = 0;
1399 1.1 ross tenthousandsCount = 0;
1400 1.1 ross count = 10000;
1401 1.1 ross testCases_initSequence( testCases_sequence_a_float64 );
1402 1.1 ross writeTestsTotal();
1403 1.1 ross while ( ! testCases_done || forever ) {
1404 1.1 ross testCases_next();
1405 1.1 ross *trueFlagsPtr = 0;
1406 1.1 ross trueZ = trueFunction( testCases_a_float64 );
1407 1.1 ross trueFlags = *trueFlagsPtr;
1408 1.1 ross (void) testFlagsFunctionPtr();
1409 1.1 ross testZ = testFunction( testCases_a_float64 );
1410 1.1 ross testFlags = testFlagsFunctionPtr();
1411 1.1 ross --count;
1412 1.1 ross if ( count == 0 ) {
1413 1.1 ross checkEarlyExit();
1414 1.1 ross count = 10000;
1415 1.1 ross }
1416 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
1417 1.1 ross if ( ! checkNaNs
1418 1.1 ross && float64_is_signaling_nan( testCases_a_float64 ) ) {
1419 1.1 ross trueFlags |= float_flag_invalid;
1420 1.1 ross }
1421 1.1 ross if ( ( trueZ == 0x7FFFFFFF )
1422 1.1 ross && ( ( testZ == 0x7FFFFFFF )
1423 1.1 ross || ( testZ == (sbits32) 0x80000000 ) )
1424 1.1 ross && ( trueFlags == float_flag_invalid )
1425 1.1 ross && ( testFlags == float_flag_invalid )
1426 1.1 ross ) {
1427 1.1 ross /* no problem */
1428 1.1 ross }
1429 1.1 ross else {
1430 1.1 ross ++errorCount;
1431 1.1 ross writeErrorFound( 10000 - count );
1432 1.1 ross writeInput_a_float64();
1433 1.1 ross fputs( " ", stdout );
1434 1.1 ross writeOutputs_z_int32( trueZ, trueFlags, testZ, testFlags );
1435 1.1 ross fflush( stdout );
1436 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
1437 1.1 ross }
1438 1.1 ross }
1439 1.1 ross }
1440 1.1 ross exit:
1441 1.1 ross writeTestsPerformed( 10000 - count );
1442 1.1 ross
1443 1.1 ross }
1444 1.1 ross
1445 1.1 ross #ifdef BITS64
1446 1.1 ross
1447 1.1 ross void
1448 1.1 ross test_a_float64_z_int64(
1449 1.1 ross int64 trueFunction( float64 ), int64 testFunction( float64 ) )
1450 1.1 ross {
1451 1.1 ross int16 count;
1452 1.1 ross int64 trueZ, testZ;
1453 1.1 ross uint8 trueFlags, testFlags;
1454 1.1 ross
1455 1.1 ross errorCount = 0;
1456 1.1 ross tenthousandsCount = 0;
1457 1.1 ross count = 10000;
1458 1.1 ross testCases_initSequence( testCases_sequence_a_float64 );
1459 1.1 ross writeTestsTotal();
1460 1.1 ross while ( ! testCases_done || forever ) {
1461 1.1 ross testCases_next();
1462 1.1 ross *trueFlagsPtr = 0;
1463 1.1 ross trueZ = trueFunction( testCases_a_float64 );
1464 1.1 ross trueFlags = *trueFlagsPtr;
1465 1.1 ross (void) testFlagsFunctionPtr();
1466 1.1 ross testZ = testFunction( testCases_a_float64 );
1467 1.1 ross testFlags = testFlagsFunctionPtr();
1468 1.1 ross --count;
1469 1.1 ross if ( count == 0 ) {
1470 1.1 ross checkEarlyExit();
1471 1.1 ross count = 10000;
1472 1.1 ross }
1473 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
1474 1.1 ross if ( ! checkNaNs
1475 1.1 ross && float64_is_signaling_nan( testCases_a_float64 ) ) {
1476 1.1 ross trueFlags |= float_flag_invalid;
1477 1.1 ross }
1478 1.1 ross if ( ( trueZ == LIT64( 0x7FFFFFFFFFFFFFFF ) )
1479 1.1 ross && ( ( testZ == LIT64( 0x7FFFFFFFFFFFFFFF ) )
1480 1.1 ross || ( testZ == (sbits64) LIT64( 0x8000000000000000 ) ) )
1481 1.1 ross && ( trueFlags == float_flag_invalid )
1482 1.1 ross && ( testFlags == float_flag_invalid )
1483 1.1 ross ) {
1484 1.1 ross /* no problem */
1485 1.1 ross }
1486 1.1 ross else {
1487 1.1 ross ++errorCount;
1488 1.1 ross writeErrorFound( 10000 - count );
1489 1.1 ross writeInput_a_float64();
1490 1.1 ross fputs( " ", stdout );
1491 1.1 ross writeOutputs_z_int64( trueZ, trueFlags, testZ, testFlags );
1492 1.1 ross fflush( stdout );
1493 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
1494 1.1 ross }
1495 1.1 ross }
1496 1.1 ross }
1497 1.1 ross exit:
1498 1.1 ross writeTestsPerformed( 10000 - count );
1499 1.1 ross
1500 1.1 ross }
1501 1.1 ross
1502 1.1 ross #endif
1503 1.1 ross
1504 1.1 ross void
1505 1.1 ross test_a_float64_z_float32(
1506 1.1 ross float32 trueFunction( float64 ), float32 testFunction( float64 ) )
1507 1.1 ross {
1508 1.1 ross int16 count;
1509 1.1 ross float32 trueZ, testZ;
1510 1.1 ross uint8 trueFlags, testFlags;
1511 1.1 ross
1512 1.1 ross errorCount = 0;
1513 1.1 ross tenthousandsCount = 0;
1514 1.1 ross count = 10000;
1515 1.1 ross testCases_initSequence( testCases_sequence_a_float64 );
1516 1.1 ross writeTestsTotal();
1517 1.1 ross while ( ! testCases_done || forever ) {
1518 1.1 ross testCases_next();
1519 1.1 ross *trueFlagsPtr = 0;
1520 1.1 ross trueZ = trueFunction( testCases_a_float64 );
1521 1.1 ross trueFlags = *trueFlagsPtr;
1522 1.1 ross (void) testFlagsFunctionPtr();
1523 1.1 ross testZ = testFunction( testCases_a_float64 );
1524 1.1 ross testFlags = testFlagsFunctionPtr();
1525 1.1 ross --count;
1526 1.1 ross if ( count == 0 ) {
1527 1.1 ross checkEarlyExit();
1528 1.1 ross count = 10000;
1529 1.1 ross }
1530 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
1531 1.1 ross if ( ! checkNaNs
1532 1.1 ross && float64_is_signaling_nan( testCases_a_float64 ) ) {
1533 1.1 ross trueFlags |= float_flag_invalid;
1534 1.1 ross }
1535 1.1 ross if ( ! checkNaNs
1536 1.1 ross && float32_isNaN( trueZ )
1537 1.1 ross && float32_isNaN( testZ )
1538 1.1 ross && ! float32_is_signaling_nan( testZ )
1539 1.1 ross && ( trueFlags == testFlags )
1540 1.1 ross ) {
1541 1.1 ross /* no problem */
1542 1.1 ross }
1543 1.1 ross else {
1544 1.1 ross ++errorCount;
1545 1.1 ross writeErrorFound( 10000 - count );
1546 1.1 ross writeInput_a_float64();
1547 1.1 ross fputs( " ", stdout );
1548 1.1 ross writeOutputs_z_float32( trueZ, trueFlags, testZ, testFlags );
1549 1.1 ross fflush( stdout );
1550 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
1551 1.1 ross }
1552 1.1 ross }
1553 1.1 ross }
1554 1.1 ross exit:
1555 1.1 ross writeTestsPerformed( 10000 - count );
1556 1.1 ross
1557 1.1 ross }
1558 1.1 ross
1559 1.1 ross #ifdef FLOATX80
1560 1.1 ross
1561 1.1 ross void
1562 1.1 ross test_a_float64_z_floatx80(
1563 1.1 ross floatx80 trueFunction( float64 ), floatx80 testFunction( float64 ) )
1564 1.1 ross {
1565 1.1 ross int16 count;
1566 1.1 ross floatx80 trueZ, testZ;
1567 1.1 ross uint8 trueFlags, testFlags;
1568 1.1 ross
1569 1.1 ross errorCount = 0;
1570 1.1 ross tenthousandsCount = 0;
1571 1.1 ross count = 10000;
1572 1.1 ross testCases_initSequence( testCases_sequence_a_float64 );
1573 1.1 ross writeTestsTotal();
1574 1.1 ross while ( ! testCases_done || forever ) {
1575 1.1 ross testCases_next();
1576 1.1 ross *trueFlagsPtr = 0;
1577 1.1 ross trueZ = trueFunction( testCases_a_float64 );
1578 1.1 ross trueFlags = *trueFlagsPtr;
1579 1.1 ross (void) testFlagsFunctionPtr();
1580 1.1 ross testZ = testFunction( testCases_a_float64 );
1581 1.1 ross testFlags = testFlagsFunctionPtr();
1582 1.1 ross --count;
1583 1.1 ross if ( count == 0 ) {
1584 1.1 ross checkEarlyExit();
1585 1.1 ross count = 10000;
1586 1.1 ross }
1587 1.1 ross if ( ! floatx80_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
1588 1.1 ross if ( ! checkNaNs
1589 1.1 ross && float64_is_signaling_nan( testCases_a_float64 ) ) {
1590 1.1 ross trueFlags |= float_flag_invalid;
1591 1.1 ross }
1592 1.1 ross if ( ! checkNaNs
1593 1.1 ross && floatx80_isNaN( trueZ )
1594 1.1 ross && floatx80_isNaN( testZ )
1595 1.1 ross && ! floatx80_is_signaling_nan( testZ )
1596 1.1 ross && ( trueFlags == testFlags )
1597 1.1 ross ) {
1598 1.1 ross /* no problem */
1599 1.1 ross }
1600 1.1 ross else {
1601 1.1 ross ++errorCount;
1602 1.1 ross writeErrorFound( 10000 - count );
1603 1.1 ross writeInput_a_float64();
1604 1.1 ross fputs( "\n\t", stdout );
1605 1.1 ross writeOutputs_z_floatx80( trueZ, trueFlags, testZ, testFlags );
1606 1.1 ross fflush( stdout );
1607 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
1608 1.1 ross }
1609 1.1 ross }
1610 1.1 ross }
1611 1.1 ross exit:
1612 1.1 ross writeTestsPerformed( 10000 - count );
1613 1.1 ross
1614 1.1 ross }
1615 1.1 ross
1616 1.1 ross #endif
1617 1.1 ross
1618 1.1 ross #ifdef FLOAT128
1619 1.1 ross
1620 1.1 ross void
1621 1.1 ross test_a_float64_z_float128(
1622 1.1 ross float128 trueFunction( float64 ), float128 testFunction( float64 ) )
1623 1.1 ross {
1624 1.1 ross int16 count;
1625 1.1 ross float128 trueZ, testZ;
1626 1.1 ross uint8 trueFlags, testFlags;
1627 1.1 ross
1628 1.1 ross errorCount = 0;
1629 1.1 ross tenthousandsCount = 0;
1630 1.1 ross count = 10000;
1631 1.1 ross testCases_initSequence( testCases_sequence_a_float64 );
1632 1.1 ross writeTestsTotal();
1633 1.1 ross while ( ! testCases_done || forever ) {
1634 1.1 ross testCases_next();
1635 1.1 ross *trueFlagsPtr = 0;
1636 1.1 ross trueZ = trueFunction( testCases_a_float64 );
1637 1.1 ross trueFlags = *trueFlagsPtr;
1638 1.1 ross (void) testFlagsFunctionPtr();
1639 1.1 ross testZ = testFunction( testCases_a_float64 );
1640 1.1 ross testFlags = testFlagsFunctionPtr();
1641 1.1 ross --count;
1642 1.1 ross if ( count == 0 ) {
1643 1.1 ross checkEarlyExit();
1644 1.1 ross count = 10000;
1645 1.1 ross }
1646 1.1 ross if ( ! float128_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
1647 1.1 ross if ( ! checkNaNs
1648 1.1 ross && float64_is_signaling_nan( testCases_a_float64 ) ) {
1649 1.1 ross trueFlags |= float_flag_invalid;
1650 1.1 ross }
1651 1.1 ross if ( ! checkNaNs
1652 1.1 ross && float128_isNaN( trueZ )
1653 1.1 ross && float128_isNaN( testZ )
1654 1.1 ross && ! float128_is_signaling_nan( testZ )
1655 1.1 ross && ( trueFlags == testFlags )
1656 1.1 ross ) {
1657 1.1 ross /* no problem */
1658 1.1 ross }
1659 1.1 ross else {
1660 1.1 ross ++errorCount;
1661 1.1 ross writeErrorFound( 10000 - count );
1662 1.1 ross writeInput_a_float64();
1663 1.1 ross fputs( "\n\t", stdout );
1664 1.1 ross writeOutputs_z_float128( trueZ, trueFlags, testZ, testFlags );
1665 1.1 ross fflush( stdout );
1666 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
1667 1.1 ross }
1668 1.1 ross }
1669 1.1 ross }
1670 1.1 ross exit:
1671 1.1 ross writeTestsPerformed( 10000 - count );
1672 1.1 ross
1673 1.1 ross }
1674 1.1 ross
1675 1.1 ross #endif
1676 1.1 ross
1677 1.1 ross void
1678 1.1 ross test_az_float64(
1679 1.1 ross float64 trueFunction( float64 ), float64 testFunction( float64 ) )
1680 1.1 ross {
1681 1.1 ross int16 count;
1682 1.1 ross float64 trueZ, testZ;
1683 1.1 ross uint8 trueFlags, testFlags;
1684 1.1 ross
1685 1.1 ross errorCount = 0;
1686 1.1 ross tenthousandsCount = 0;
1687 1.1 ross count = 10000;
1688 1.1 ross testCases_initSequence( testCases_sequence_a_float64 );
1689 1.1 ross writeTestsTotal();
1690 1.1 ross while ( ! testCases_done || forever ) {
1691 1.1 ross testCases_next();
1692 1.1 ross *trueFlagsPtr = 0;
1693 1.1 ross trueZ = trueFunction( testCases_a_float64 );
1694 1.1 ross trueFlags = *trueFlagsPtr;
1695 1.1 ross (void) testFlagsFunctionPtr();
1696 1.1 ross testZ = testFunction( testCases_a_float64 );
1697 1.1 ross testFlags = testFlagsFunctionPtr();
1698 1.1 ross --count;
1699 1.1 ross if ( count == 0 ) {
1700 1.1 ross checkEarlyExit();
1701 1.1 ross count = 10000;
1702 1.1 ross }
1703 1.1 ross if ( ! float64_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
1704 1.1 ross if ( ! checkNaNs
1705 1.1 ross && float64_is_signaling_nan( testCases_a_float64 ) ) {
1706 1.1 ross trueFlags |= float_flag_invalid;
1707 1.1 ross }
1708 1.1 ross if ( ! checkNaNs
1709 1.1 ross && float64_isNaN( trueZ )
1710 1.1 ross && float64_isNaN( testZ )
1711 1.1 ross && ! float64_is_signaling_nan( testZ )
1712 1.1 ross && ( trueFlags == testFlags )
1713 1.1 ross ) {
1714 1.1 ross /* no problem */
1715 1.1 ross }
1716 1.1 ross else {
1717 1.1 ross ++errorCount;
1718 1.1 ross writeErrorFound( 10000 - count );
1719 1.1 ross writeInput_a_float64();
1720 1.1 ross fputs( " ", stdout );
1721 1.1 ross writeOutputs_z_float64( trueZ, trueFlags, testZ, testFlags );
1722 1.1 ross fflush( stdout );
1723 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
1724 1.1 ross }
1725 1.1 ross }
1726 1.1 ross }
1727 1.1 ross exit:
1728 1.1 ross writeTestsPerformed( 10000 - count );
1729 1.1 ross
1730 1.1 ross }
1731 1.1 ross
1732 1.1 ross void
1733 1.1 ross test_ab_float64_z_flag(
1734 1.1 ross flag trueFunction( float64, float64 ),
1735 1.1 ross flag testFunction( float64, float64 )
1736 1.1 ross )
1737 1.1 ross {
1738 1.1 ross int16 count;
1739 1.1 ross flag trueZ, testZ;
1740 1.1 ross uint8 trueFlags, testFlags;
1741 1.1 ross
1742 1.1 ross errorCount = 0;
1743 1.1 ross tenthousandsCount = 0;
1744 1.1 ross count = 10000;
1745 1.1 ross testCases_initSequence( testCases_sequence_ab_float64 );
1746 1.1 ross writeTestsTotal();
1747 1.1 ross while ( ! testCases_done || forever ) {
1748 1.1 ross testCases_next();
1749 1.1 ross *trueFlagsPtr = 0;
1750 1.1 ross trueZ = trueFunction( testCases_a_float64, testCases_b_float64 );
1751 1.1 ross trueFlags = *trueFlagsPtr;
1752 1.1 ross (void) testFlagsFunctionPtr();
1753 1.1 ross testZ = testFunction( testCases_a_float64, testCases_b_float64 );
1754 1.1 ross testFlags = testFlagsFunctionPtr();
1755 1.1 ross --count;
1756 1.1 ross if ( count == 0 ) {
1757 1.1 ross checkEarlyExit();
1758 1.1 ross count = 10000;
1759 1.1 ross }
1760 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
1761 1.1 ross if ( ! checkNaNs
1762 1.1 ross && ( float64_is_signaling_nan( testCases_a_float64 )
1763 1.1 ross || float64_is_signaling_nan( testCases_b_float64 ) )
1764 1.1 ross ) {
1765 1.1 ross trueFlags |= float_flag_invalid;
1766 1.1 ross }
1767 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
1768 1.1 ross ++errorCount;
1769 1.1 ross writeErrorFound( 10000 - count );
1770 1.1 ross writeInputs_ab_float64();
1771 1.1 ross fputs( " ", stdout );
1772 1.1 ross writeOutputs_z_flag( trueZ, trueFlags, testZ, testFlags );
1773 1.1 ross fflush( stdout );
1774 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
1775 1.1 ross }
1776 1.1 ross }
1777 1.1 ross }
1778 1.1 ross exit:
1779 1.1 ross writeTestsPerformed( 10000 - count );
1780 1.1 ross return;
1781 1.1 ross
1782 1.1 ross }
1783 1.1 ross
1784 1.1 ross void
1785 1.1 ross test_abz_float64(
1786 1.1 ross float64 trueFunction( float64, float64 ),
1787 1.1 ross float64 testFunction( float64, float64 )
1788 1.1 ross )
1789 1.1 ross {
1790 1.1 ross int16 count;
1791 1.1 ross float64 trueZ, testZ;
1792 1.1 ross uint8 trueFlags, testFlags;
1793 1.1 ross
1794 1.1 ross errorCount = 0;
1795 1.1 ross tenthousandsCount = 0;
1796 1.1 ross count = 10000;
1797 1.1 ross testCases_initSequence( testCases_sequence_ab_float64 );
1798 1.1 ross writeTestsTotal();
1799 1.1 ross while ( ! testCases_done || forever ) {
1800 1.1 ross testCases_next();
1801 1.1 ross *trueFlagsPtr = 0;
1802 1.1 ross trueZ = trueFunction( testCases_a_float64, testCases_b_float64 );
1803 1.1 ross trueFlags = *trueFlagsPtr;
1804 1.1 ross (void) testFlagsFunctionPtr();
1805 1.1 ross testZ = testFunction( testCases_a_float64, testCases_b_float64 );
1806 1.1 ross testFlags = testFlagsFunctionPtr();
1807 1.1 ross --count;
1808 1.1 ross if ( count == 0 ) {
1809 1.1 ross checkEarlyExit();
1810 1.1 ross count = 10000;
1811 1.1 ross }
1812 1.1 ross if ( ! float64_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
1813 1.1 ross if ( ! checkNaNs
1814 1.1 ross && ( float64_is_signaling_nan( testCases_a_float64 )
1815 1.1 ross || float64_is_signaling_nan( testCases_b_float64 ) )
1816 1.1 ross ) {
1817 1.1 ross trueFlags |= float_flag_invalid;
1818 1.1 ross }
1819 1.1 ross if ( ! checkNaNs
1820 1.1 ross && float64_isNaN( trueZ )
1821 1.1 ross && float64_isNaN( testZ )
1822 1.1 ross && ! float64_is_signaling_nan( testZ )
1823 1.1 ross && ( trueFlags == testFlags )
1824 1.1 ross ) {
1825 1.1 ross /* no problem */
1826 1.1 ross }
1827 1.1 ross else {
1828 1.1 ross ++errorCount;
1829 1.1 ross writeErrorFound( 10000 - count );
1830 1.1 ross writeInputs_ab_float64();
1831 1.1 ross fputs( "\n\t", stdout );
1832 1.1 ross writeOutputs_z_float64( trueZ, trueFlags, testZ, testFlags );
1833 1.1 ross fflush( stdout );
1834 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
1835 1.1 ross }
1836 1.1 ross }
1837 1.1 ross }
1838 1.1 ross exit:
1839 1.1 ross writeTestsPerformed( 10000 - count );
1840 1.1 ross return;
1841 1.1 ross
1842 1.1 ross }
1843 1.1 ross
1844 1.1 ross #ifdef FLOATX80
1845 1.1 ross
1846 1.1 ross void
1847 1.1 ross test_a_floatx80_z_int32(
1848 1.1 ross int32 trueFunction( floatx80 ), int32 testFunction( floatx80 ) )
1849 1.1 ross {
1850 1.1 ross int16 count;
1851 1.1 ross int32 trueZ, testZ;
1852 1.1 ross uint8 trueFlags, testFlags;
1853 1.1 ross
1854 1.1 ross errorCount = 0;
1855 1.1 ross tenthousandsCount = 0;
1856 1.1 ross count = 10000;
1857 1.1 ross testCases_initSequence( testCases_sequence_a_floatx80 );
1858 1.1 ross writeTestsTotal();
1859 1.1 ross while ( ! testCases_done || forever ) {
1860 1.1 ross testCases_next();
1861 1.1 ross *trueFlagsPtr = 0;
1862 1.1 ross trueZ = trueFunction( testCases_a_floatx80 );
1863 1.1 ross trueFlags = *trueFlagsPtr;
1864 1.1 ross (void) testFlagsFunctionPtr();
1865 1.1 ross testZ = testFunction( testCases_a_floatx80 );
1866 1.1 ross testFlags = testFlagsFunctionPtr();
1867 1.1 ross --count;
1868 1.1 ross if ( count == 0 ) {
1869 1.1 ross checkEarlyExit();
1870 1.1 ross count = 10000;
1871 1.1 ross }
1872 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
1873 1.1 ross if ( ! checkNaNs
1874 1.1 ross && floatx80_is_signaling_nan( testCases_a_floatx80 ) ) {
1875 1.1 ross trueFlags |= float_flag_invalid;
1876 1.1 ross }
1877 1.1 ross if ( ( trueZ == 0x7FFFFFFF )
1878 1.1 ross && ( ( testZ == 0x7FFFFFFF )
1879 1.1 ross || ( testZ == (sbits32) 0x80000000 ) )
1880 1.1 ross && ( trueFlags == float_flag_invalid )
1881 1.1 ross && ( testFlags == float_flag_invalid )
1882 1.1 ross ) {
1883 1.1 ross /* no problem */
1884 1.1 ross }
1885 1.1 ross else {
1886 1.1 ross ++errorCount;
1887 1.1 ross writeErrorFound( 10000 - count );
1888 1.1 ross writeInput_a_floatx80();
1889 1.1 ross fputs( " ", stdout );
1890 1.1 ross writeOutputs_z_int32( trueZ, trueFlags, testZ, testFlags );
1891 1.1 ross fflush( stdout );
1892 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
1893 1.1 ross }
1894 1.1 ross }
1895 1.1 ross }
1896 1.1 ross exit:
1897 1.1 ross writeTestsPerformed( 10000 - count );
1898 1.1 ross
1899 1.1 ross }
1900 1.1 ross
1901 1.1 ross #ifdef BITS64
1902 1.1 ross
1903 1.1 ross void
1904 1.1 ross test_a_floatx80_z_int64(
1905 1.1 ross int64 trueFunction( floatx80 ), int64 testFunction( floatx80 ) )
1906 1.1 ross {
1907 1.1 ross int16 count;
1908 1.1 ross int64 trueZ, testZ;
1909 1.1 ross uint8 trueFlags, testFlags;
1910 1.1 ross
1911 1.1 ross errorCount = 0;
1912 1.1 ross tenthousandsCount = 0;
1913 1.1 ross count = 10000;
1914 1.1 ross testCases_initSequence( testCases_sequence_a_floatx80 );
1915 1.1 ross writeTestsTotal();
1916 1.1 ross while ( ! testCases_done || forever ) {
1917 1.1 ross testCases_next();
1918 1.1 ross *trueFlagsPtr = 0;
1919 1.1 ross trueZ = trueFunction( testCases_a_floatx80 );
1920 1.1 ross trueFlags = *trueFlagsPtr;
1921 1.1 ross (void) testFlagsFunctionPtr();
1922 1.1 ross testZ = testFunction( testCases_a_floatx80 );
1923 1.1 ross testFlags = testFlagsFunctionPtr();
1924 1.1 ross --count;
1925 1.1 ross if ( count == 0 ) {
1926 1.1 ross checkEarlyExit();
1927 1.1 ross count = 10000;
1928 1.1 ross }
1929 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
1930 1.1 ross if ( ! checkNaNs
1931 1.1 ross && floatx80_is_signaling_nan( testCases_a_floatx80 ) ) {
1932 1.1 ross trueFlags |= float_flag_invalid;
1933 1.1 ross }
1934 1.1 ross if ( ( trueZ == LIT64( 0x7FFFFFFFFFFFFFFF ) )
1935 1.1 ross && ( ( testZ == LIT64( 0x7FFFFFFFFFFFFFFF ) )
1936 1.1 ross || ( testZ == (sbits64) LIT64( 0x8000000000000000 ) ) )
1937 1.1 ross && ( trueFlags == float_flag_invalid )
1938 1.1 ross && ( testFlags == float_flag_invalid )
1939 1.1 ross ) {
1940 1.1 ross /* no problem */
1941 1.1 ross }
1942 1.1 ross else {
1943 1.1 ross ++errorCount;
1944 1.1 ross writeErrorFound( 10000 - count );
1945 1.1 ross writeInput_a_floatx80();
1946 1.1 ross fputs( " ", stdout );
1947 1.1 ross writeOutputs_z_int64( trueZ, trueFlags, testZ, testFlags );
1948 1.1 ross fflush( stdout );
1949 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
1950 1.1 ross }
1951 1.1 ross }
1952 1.1 ross }
1953 1.1 ross exit:
1954 1.1 ross writeTestsPerformed( 10000 - count );
1955 1.1 ross
1956 1.1 ross }
1957 1.1 ross
1958 1.1 ross #endif
1959 1.1 ross
1960 1.1 ross void
1961 1.1 ross test_a_floatx80_z_float32(
1962 1.1 ross float32 trueFunction( floatx80 ), float32 testFunction( floatx80 ) )
1963 1.1 ross {
1964 1.1 ross int16 count;
1965 1.1 ross float32 trueZ, testZ;
1966 1.1 ross uint8 trueFlags, testFlags;
1967 1.1 ross
1968 1.1 ross errorCount = 0;
1969 1.1 ross tenthousandsCount = 0;
1970 1.1 ross count = 10000;
1971 1.1 ross testCases_initSequence( testCases_sequence_a_floatx80 );
1972 1.1 ross writeTestsTotal();
1973 1.1 ross while ( ! testCases_done || forever ) {
1974 1.1 ross testCases_next();
1975 1.1 ross *trueFlagsPtr = 0;
1976 1.1 ross trueZ = trueFunction( testCases_a_floatx80 );
1977 1.1 ross trueFlags = *trueFlagsPtr;
1978 1.1 ross (void) testFlagsFunctionPtr();
1979 1.1 ross testZ = testFunction( testCases_a_floatx80 );
1980 1.1 ross testFlags = testFlagsFunctionPtr();
1981 1.1 ross --count;
1982 1.1 ross if ( count == 0 ) {
1983 1.1 ross checkEarlyExit();
1984 1.1 ross count = 10000;
1985 1.1 ross }
1986 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
1987 1.1 ross if ( ! checkNaNs
1988 1.1 ross && floatx80_is_signaling_nan( testCases_a_floatx80 ) ) {
1989 1.1 ross trueFlags |= float_flag_invalid;
1990 1.1 ross }
1991 1.1 ross if ( ! checkNaNs
1992 1.1 ross && float32_isNaN( trueZ )
1993 1.1 ross && float32_isNaN( testZ )
1994 1.1 ross && ! float32_is_signaling_nan( testZ )
1995 1.1 ross && ( trueFlags == testFlags )
1996 1.1 ross ) {
1997 1.1 ross /* no problem */
1998 1.1 ross }
1999 1.1 ross else {
2000 1.1 ross ++errorCount;
2001 1.1 ross writeErrorFound( 10000 - count );
2002 1.1 ross writeInput_a_floatx80();
2003 1.1 ross fputs( " ", stdout );
2004 1.1 ross writeOutputs_z_float32( trueZ, trueFlags, testZ, testFlags );
2005 1.1 ross fflush( stdout );
2006 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
2007 1.1 ross }
2008 1.1 ross }
2009 1.1 ross }
2010 1.1 ross exit:
2011 1.1 ross writeTestsPerformed( 10000 - count );
2012 1.1 ross
2013 1.1 ross }
2014 1.1 ross
2015 1.1 ross void
2016 1.1 ross test_a_floatx80_z_float64(
2017 1.1 ross float64 trueFunction( floatx80 ), float64 testFunction( floatx80 ) )
2018 1.1 ross {
2019 1.1 ross int16 count;
2020 1.1 ross float64 trueZ, testZ;
2021 1.1 ross uint8 trueFlags, testFlags;
2022 1.1 ross
2023 1.1 ross errorCount = 0;
2024 1.1 ross tenthousandsCount = 0;
2025 1.1 ross count = 10000;
2026 1.1 ross testCases_initSequence( testCases_sequence_a_floatx80 );
2027 1.1 ross writeTestsTotal();
2028 1.1 ross while ( ! testCases_done || forever ) {
2029 1.1 ross testCases_next();
2030 1.1 ross *trueFlagsPtr = 0;
2031 1.1 ross trueZ = trueFunction( testCases_a_floatx80 );
2032 1.1 ross trueFlags = *trueFlagsPtr;
2033 1.1 ross (void) testFlagsFunctionPtr();
2034 1.1 ross testZ = testFunction( testCases_a_floatx80 );
2035 1.1 ross testFlags = testFlagsFunctionPtr();
2036 1.1 ross --count;
2037 1.1 ross if ( count == 0 ) {
2038 1.1 ross checkEarlyExit();
2039 1.1 ross count = 10000;
2040 1.1 ross }
2041 1.1 ross if ( ! float64_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
2042 1.1 ross if ( ! checkNaNs
2043 1.1 ross && floatx80_is_signaling_nan( testCases_a_floatx80 ) ) {
2044 1.1 ross trueFlags |= float_flag_invalid;
2045 1.1 ross }
2046 1.1 ross if ( ! checkNaNs
2047 1.1 ross && float64_isNaN( trueZ )
2048 1.1 ross && float64_isNaN( testZ )
2049 1.1 ross && ! float64_is_signaling_nan( testZ )
2050 1.1 ross && ( trueFlags == testFlags )
2051 1.1 ross ) {
2052 1.1 ross /* no problem */
2053 1.1 ross }
2054 1.1 ross else {
2055 1.1 ross ++errorCount;
2056 1.1 ross writeErrorFound( 10000 - count );
2057 1.1 ross writeInput_a_floatx80();
2058 1.1 ross fputs( "\n\t", stdout );
2059 1.1 ross writeOutputs_z_float64( trueZ, trueFlags, testZ, testFlags );
2060 1.1 ross fflush( stdout );
2061 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
2062 1.1 ross }
2063 1.1 ross }
2064 1.1 ross }
2065 1.1 ross exit:
2066 1.1 ross writeTestsPerformed( 10000 - count );
2067 1.1 ross
2068 1.1 ross }
2069 1.1 ross
2070 1.1 ross #ifdef FLOAT128
2071 1.1 ross
2072 1.1 ross void
2073 1.1 ross test_a_floatx80_z_float128(
2074 1.1 ross float128 trueFunction( floatx80 ), float128 testFunction( floatx80 ) )
2075 1.1 ross {
2076 1.1 ross int16 count;
2077 1.1 ross float128 trueZ, testZ;
2078 1.1 ross uint8 trueFlags, testFlags;
2079 1.1 ross
2080 1.1 ross errorCount = 0;
2081 1.1 ross tenthousandsCount = 0;
2082 1.1 ross count = 10000;
2083 1.1 ross testCases_initSequence( testCases_sequence_a_floatx80 );
2084 1.1 ross writeTestsTotal();
2085 1.1 ross while ( ! testCases_done || forever ) {
2086 1.1 ross testCases_next();
2087 1.1 ross *trueFlagsPtr = 0;
2088 1.1 ross trueZ = trueFunction( testCases_a_floatx80 );
2089 1.1 ross trueFlags = *trueFlagsPtr;
2090 1.1 ross (void) testFlagsFunctionPtr();
2091 1.1 ross testZ = testFunction( testCases_a_floatx80 );
2092 1.1 ross testFlags = testFlagsFunctionPtr();
2093 1.1 ross --count;
2094 1.1 ross if ( count == 0 ) {
2095 1.1 ross checkEarlyExit();
2096 1.1 ross count = 10000;
2097 1.1 ross }
2098 1.1 ross if ( ! float128_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
2099 1.1 ross if ( ! checkNaNs
2100 1.1 ross && floatx80_is_signaling_nan( testCases_a_floatx80 ) ) {
2101 1.1 ross trueFlags |= float_flag_invalid;
2102 1.1 ross }
2103 1.1 ross if ( ! checkNaNs
2104 1.1 ross && float128_isNaN( trueZ )
2105 1.1 ross && float128_isNaN( testZ )
2106 1.1 ross && ! float128_is_signaling_nan( testZ )
2107 1.1 ross && ( trueFlags == testFlags )
2108 1.1 ross ) {
2109 1.1 ross /* no problem */
2110 1.1 ross }
2111 1.1 ross else {
2112 1.1 ross ++errorCount;
2113 1.1 ross writeErrorFound( 10000 - count );
2114 1.1 ross writeInput_a_floatx80();
2115 1.1 ross fputs( "\n\t", stdout );
2116 1.1 ross writeOutputs_z_float128( trueZ, trueFlags, testZ, testFlags );
2117 1.1 ross fflush( stdout );
2118 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
2119 1.1 ross }
2120 1.1 ross }
2121 1.1 ross }
2122 1.1 ross exit:
2123 1.1 ross writeTestsPerformed( 10000 - count );
2124 1.1 ross
2125 1.1 ross }
2126 1.1 ross
2127 1.1 ross #endif
2128 1.1 ross
2129 1.1 ross void
2130 1.1 ross test_az_floatx80(
2131 1.1 ross floatx80 trueFunction( floatx80 ), floatx80 testFunction( floatx80 ) )
2132 1.1 ross {
2133 1.1 ross int16 count;
2134 1.1 ross floatx80 trueZ, testZ;
2135 1.1 ross uint8 trueFlags, testFlags;
2136 1.1 ross
2137 1.1 ross errorCount = 0;
2138 1.1 ross tenthousandsCount = 0;
2139 1.1 ross count = 10000;
2140 1.1 ross testCases_initSequence( testCases_sequence_a_floatx80 );
2141 1.1 ross writeTestsTotal();
2142 1.1 ross while ( ! testCases_done || forever ) {
2143 1.1 ross testCases_next();
2144 1.1 ross *trueFlagsPtr = 0;
2145 1.1 ross trueZ = trueFunction( testCases_a_floatx80 );
2146 1.1 ross trueFlags = *trueFlagsPtr;
2147 1.1 ross (void) testFlagsFunctionPtr();
2148 1.1 ross testZ = testFunction( testCases_a_floatx80 );
2149 1.1 ross testFlags = testFlagsFunctionPtr();
2150 1.1 ross --count;
2151 1.1 ross if ( count == 0 ) {
2152 1.1 ross checkEarlyExit();
2153 1.1 ross count = 10000;
2154 1.1 ross }
2155 1.1 ross if ( ! floatx80_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
2156 1.1 ross if ( ! checkNaNs
2157 1.1 ross && floatx80_is_signaling_nan( testCases_a_floatx80 ) ) {
2158 1.1 ross trueFlags |= float_flag_invalid;
2159 1.1 ross }
2160 1.1 ross if ( ! checkNaNs
2161 1.1 ross && floatx80_isNaN( trueZ )
2162 1.1 ross && floatx80_isNaN( testZ )
2163 1.1 ross && ! floatx80_is_signaling_nan( testZ )
2164 1.1 ross && ( trueFlags == testFlags )
2165 1.1 ross ) {
2166 1.1 ross /* no problem */
2167 1.1 ross }
2168 1.1 ross else {
2169 1.1 ross ++errorCount;
2170 1.1 ross writeErrorFound( 10000 - count );
2171 1.1 ross writeInput_a_floatx80();
2172 1.1 ross fputs( "\n\t", stdout );
2173 1.1 ross writeOutputs_z_floatx80( trueZ, trueFlags, testZ, testFlags );
2174 1.1 ross fflush( stdout );
2175 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
2176 1.1 ross }
2177 1.1 ross }
2178 1.1 ross }
2179 1.1 ross exit:
2180 1.1 ross writeTestsPerformed( 10000 - count );
2181 1.1 ross
2182 1.1 ross }
2183 1.1 ross
2184 1.1 ross void
2185 1.1 ross test_ab_floatx80_z_flag(
2186 1.1 ross flag trueFunction( floatx80, floatx80 ),
2187 1.1 ross flag testFunction( floatx80, floatx80 )
2188 1.1 ross )
2189 1.1 ross {
2190 1.1 ross int16 count;
2191 1.1 ross flag trueZ, testZ;
2192 1.1 ross uint8 trueFlags, testFlags;
2193 1.1 ross
2194 1.1 ross errorCount = 0;
2195 1.1 ross tenthousandsCount = 0;
2196 1.1 ross count = 10000;
2197 1.1 ross testCases_initSequence( testCases_sequence_ab_floatx80 );
2198 1.1 ross writeTestsTotal();
2199 1.1 ross while ( ! testCases_done || forever ) {
2200 1.1 ross testCases_next();
2201 1.1 ross *trueFlagsPtr = 0;
2202 1.1 ross trueZ = trueFunction( testCases_a_floatx80, testCases_b_floatx80 );
2203 1.1 ross trueFlags = *trueFlagsPtr;
2204 1.1 ross (void) testFlagsFunctionPtr();
2205 1.1 ross testZ = testFunction( testCases_a_floatx80, testCases_b_floatx80 );
2206 1.1 ross testFlags = testFlagsFunctionPtr();
2207 1.1 ross --count;
2208 1.1 ross if ( count == 0 ) {
2209 1.1 ross checkEarlyExit();
2210 1.1 ross count = 10000;
2211 1.1 ross }
2212 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
2213 1.1 ross if ( ! checkNaNs
2214 1.1 ross && ( floatx80_is_signaling_nan( testCases_a_floatx80 )
2215 1.1 ross || floatx80_is_signaling_nan( testCases_b_floatx80 ) )
2216 1.1 ross ) {
2217 1.1 ross trueFlags |= float_flag_invalid;
2218 1.1 ross }
2219 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
2220 1.1 ross ++errorCount;
2221 1.1 ross writeErrorFound( 10000 - count );
2222 1.1 ross writeInputs_ab_floatx80();
2223 1.1 ross fputs( " ", stdout );
2224 1.1 ross writeOutputs_z_flag( trueZ, trueFlags, testZ, testFlags );
2225 1.1 ross fflush( stdout );
2226 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
2227 1.1 ross }
2228 1.1 ross }
2229 1.1 ross }
2230 1.1 ross exit:
2231 1.1 ross writeTestsPerformed( 10000 - count );
2232 1.1 ross return;
2233 1.1 ross
2234 1.1 ross }
2235 1.1 ross
2236 1.1 ross void
2237 1.1 ross test_abz_floatx80(
2238 1.1 ross floatx80 trueFunction( floatx80, floatx80 ),
2239 1.1 ross floatx80 testFunction( floatx80, floatx80 )
2240 1.1 ross )
2241 1.1 ross {
2242 1.1 ross int16 count;
2243 1.1 ross floatx80 trueZ, testZ;
2244 1.1 ross uint8 trueFlags, testFlags;
2245 1.1 ross
2246 1.1 ross errorCount = 0;
2247 1.1 ross tenthousandsCount = 0;
2248 1.1 ross count = 10000;
2249 1.1 ross testCases_initSequence( testCases_sequence_ab_floatx80 );
2250 1.1 ross writeTestsTotal();
2251 1.1 ross while ( ! testCases_done || forever ) {
2252 1.1 ross testCases_next();
2253 1.1 ross *trueFlagsPtr = 0;
2254 1.1 ross trueZ = trueFunction( testCases_a_floatx80, testCases_b_floatx80 );
2255 1.1 ross trueFlags = *trueFlagsPtr;
2256 1.1 ross (void) testFlagsFunctionPtr();
2257 1.1 ross testZ = testFunction( testCases_a_floatx80, testCases_b_floatx80 );
2258 1.1 ross testFlags = testFlagsFunctionPtr();
2259 1.1 ross --count;
2260 1.1 ross if ( count == 0 ) {
2261 1.1 ross checkEarlyExit();
2262 1.1 ross count = 10000;
2263 1.1 ross }
2264 1.1 ross if ( ! floatx80_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
2265 1.1 ross if ( ! checkNaNs
2266 1.1 ross && ( floatx80_is_signaling_nan( testCases_a_floatx80 )
2267 1.1 ross || floatx80_is_signaling_nan( testCases_b_floatx80 ) )
2268 1.1 ross ) {
2269 1.1 ross trueFlags |= float_flag_invalid;
2270 1.1 ross }
2271 1.1 ross if ( ! checkNaNs
2272 1.1 ross && floatx80_isNaN( trueZ )
2273 1.1 ross && floatx80_isNaN( testZ )
2274 1.1 ross && ! floatx80_is_signaling_nan( testZ )
2275 1.1 ross && ( trueFlags == testFlags )
2276 1.1 ross ) {
2277 1.1 ross /* no problem */
2278 1.1 ross }
2279 1.1 ross else {
2280 1.1 ross ++errorCount;
2281 1.1 ross writeErrorFound( 10000 - count );
2282 1.1 ross writeInputs_ab_floatx80();
2283 1.1 ross fputs( "\n\t", stdout );
2284 1.1 ross writeOutputs_z_floatx80( trueZ, trueFlags, testZ, testFlags );
2285 1.1 ross fflush( stdout );
2286 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
2287 1.1 ross }
2288 1.1 ross }
2289 1.1 ross }
2290 1.1 ross exit:
2291 1.1 ross writeTestsPerformed( 10000 - count );
2292 1.1 ross return;
2293 1.1 ross
2294 1.1 ross }
2295 1.1 ross
2296 1.1 ross #endif
2297 1.1 ross
2298 1.1 ross #ifdef FLOAT128
2299 1.1 ross
2300 1.1 ross void
2301 1.1 ross test_a_float128_z_int32(
2302 1.1 ross int32 trueFunction( float128 ), int32 testFunction( float128 ) )
2303 1.1 ross {
2304 1.1 ross int16 count;
2305 1.1 ross int32 trueZ, testZ;
2306 1.1 ross uint8 trueFlags, testFlags;
2307 1.1 ross
2308 1.1 ross errorCount = 0;
2309 1.1 ross tenthousandsCount = 0;
2310 1.1 ross count = 10000;
2311 1.1 ross testCases_initSequence( testCases_sequence_a_float128 );
2312 1.1 ross writeTestsTotal();
2313 1.1 ross while ( ! testCases_done || forever ) {
2314 1.1 ross testCases_next();
2315 1.1 ross *trueFlagsPtr = 0;
2316 1.1 ross trueZ = trueFunction( testCases_a_float128 );
2317 1.1 ross trueFlags = *trueFlagsPtr;
2318 1.1 ross (void) testFlagsFunctionPtr();
2319 1.1 ross testZ = testFunction( testCases_a_float128 );
2320 1.1 ross testFlags = testFlagsFunctionPtr();
2321 1.1 ross --count;
2322 1.1 ross if ( count == 0 ) {
2323 1.1 ross checkEarlyExit();
2324 1.1 ross count = 10000;
2325 1.1 ross }
2326 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
2327 1.1 ross if ( ! checkNaNs
2328 1.1 ross && float128_is_signaling_nan( testCases_a_float128 ) ) {
2329 1.1 ross trueFlags |= float_flag_invalid;
2330 1.1 ross }
2331 1.1 ross if ( ( trueZ == 0x7FFFFFFF )
2332 1.1 ross && ( ( testZ == 0x7FFFFFFF )
2333 1.1 ross || ( testZ == (sbits32) 0x80000000 ) )
2334 1.1 ross && ( trueFlags == float_flag_invalid )
2335 1.1 ross && ( testFlags == float_flag_invalid )
2336 1.1 ross ) {
2337 1.1 ross /* no problem */
2338 1.1 ross }
2339 1.1 ross else {
2340 1.1 ross ++errorCount;
2341 1.1 ross writeErrorFound( 10000 - count );
2342 1.1 ross writeInput_a_float128();
2343 1.1 ross fputs( " ", stdout );
2344 1.1 ross writeOutputs_z_int32( trueZ, trueFlags, testZ, testFlags );
2345 1.1 ross fflush( stdout );
2346 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
2347 1.1 ross }
2348 1.1 ross }
2349 1.1 ross }
2350 1.1 ross exit:
2351 1.1 ross writeTestsPerformed( 10000 - count );
2352 1.1 ross
2353 1.1 ross }
2354 1.1 ross
2355 1.1 ross #ifdef BITS64
2356 1.1 ross
2357 1.1 ross void
2358 1.1 ross test_a_float128_z_int64(
2359 1.1 ross int64 trueFunction( float128 ), int64 testFunction( float128 ) )
2360 1.1 ross {
2361 1.1 ross int16 count;
2362 1.1 ross int64 trueZ, testZ;
2363 1.1 ross uint8 trueFlags, testFlags;
2364 1.1 ross
2365 1.1 ross errorCount = 0;
2366 1.1 ross tenthousandsCount = 0;
2367 1.1 ross count = 10000;
2368 1.1 ross testCases_initSequence( testCases_sequence_a_float128 );
2369 1.1 ross writeTestsTotal();
2370 1.1 ross while ( ! testCases_done || forever ) {
2371 1.1 ross testCases_next();
2372 1.1 ross *trueFlagsPtr = 0;
2373 1.1 ross trueZ = trueFunction( testCases_a_float128 );
2374 1.1 ross trueFlags = *trueFlagsPtr;
2375 1.1 ross (void) testFlagsFunctionPtr();
2376 1.1 ross testZ = testFunction( testCases_a_float128 );
2377 1.1 ross testFlags = testFlagsFunctionPtr();
2378 1.1 ross --count;
2379 1.1 ross if ( count == 0 ) {
2380 1.1 ross checkEarlyExit();
2381 1.1 ross count = 10000;
2382 1.1 ross }
2383 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
2384 1.1 ross if ( ! checkNaNs
2385 1.1 ross && float128_is_signaling_nan( testCases_a_float128 ) ) {
2386 1.1 ross trueFlags |= float_flag_invalid;
2387 1.1 ross }
2388 1.1 ross if ( ( trueZ == LIT64( 0x7FFFFFFFFFFFFFFF ) )
2389 1.1 ross && ( ( testZ == LIT64( 0x7FFFFFFFFFFFFFFF ) )
2390 1.1 ross || ( testZ == (sbits64) LIT64( 0x8000000000000000 ) ) )
2391 1.1 ross && ( trueFlags == float_flag_invalid )
2392 1.1 ross && ( testFlags == float_flag_invalid )
2393 1.1 ross ) {
2394 1.1 ross /* no problem */
2395 1.1 ross }
2396 1.1 ross else {
2397 1.1 ross ++errorCount;
2398 1.1 ross writeErrorFound( 10000 - count );
2399 1.1 ross writeInput_a_float128();
2400 1.1 ross fputs( "\n\t", stdout );
2401 1.1 ross writeOutputs_z_int64( trueZ, trueFlags, testZ, testFlags );
2402 1.1 ross fflush( stdout );
2403 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
2404 1.1 ross }
2405 1.1 ross }
2406 1.1 ross }
2407 1.1 ross exit:
2408 1.1 ross writeTestsPerformed( 10000 - count );
2409 1.1 ross
2410 1.1 ross }
2411 1.1 ross
2412 1.1 ross #endif
2413 1.1 ross
2414 1.1 ross void
2415 1.1 ross test_a_float128_z_float32(
2416 1.1 ross float32 trueFunction( float128 ), float32 testFunction( float128 ) )
2417 1.1 ross {
2418 1.1 ross int16 count;
2419 1.1 ross float32 trueZ, testZ;
2420 1.1 ross uint8 trueFlags, testFlags;
2421 1.1 ross
2422 1.1 ross errorCount = 0;
2423 1.1 ross tenthousandsCount = 0;
2424 1.1 ross count = 10000;
2425 1.1 ross testCases_initSequence( testCases_sequence_a_float128 );
2426 1.1 ross writeTestsTotal();
2427 1.1 ross while ( ! testCases_done || forever ) {
2428 1.1 ross testCases_next();
2429 1.1 ross *trueFlagsPtr = 0;
2430 1.1 ross trueZ = trueFunction( testCases_a_float128 );
2431 1.1 ross trueFlags = *trueFlagsPtr;
2432 1.1 ross (void) testFlagsFunctionPtr();
2433 1.1 ross testZ = testFunction( testCases_a_float128 );
2434 1.1 ross testFlags = testFlagsFunctionPtr();
2435 1.1 ross --count;
2436 1.1 ross if ( count == 0 ) {
2437 1.1 ross checkEarlyExit();
2438 1.1 ross count = 10000;
2439 1.1 ross }
2440 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
2441 1.1 ross if ( ! checkNaNs
2442 1.1 ross && float128_is_signaling_nan( testCases_a_float128 ) ) {
2443 1.1 ross trueFlags |= float_flag_invalid;
2444 1.1 ross }
2445 1.1 ross if ( ! checkNaNs
2446 1.1 ross && float32_isNaN( trueZ )
2447 1.1 ross && float32_isNaN( testZ )
2448 1.1 ross && ! float32_is_signaling_nan( testZ )
2449 1.1 ross && ( trueFlags == testFlags )
2450 1.1 ross ) {
2451 1.1 ross /* no problem */
2452 1.1 ross }
2453 1.1 ross else {
2454 1.1 ross ++errorCount;
2455 1.1 ross writeErrorFound( 10000 - count );
2456 1.1 ross writeInput_a_float128();
2457 1.1 ross fputs( " ", stdout );
2458 1.1 ross writeOutputs_z_float32( trueZ, trueFlags, testZ, testFlags );
2459 1.1 ross fflush( stdout );
2460 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
2461 1.1 ross }
2462 1.1 ross }
2463 1.1 ross }
2464 1.1 ross exit:
2465 1.1 ross writeTestsPerformed( 10000 - count );
2466 1.1 ross
2467 1.1 ross }
2468 1.1 ross
2469 1.1 ross void
2470 1.1 ross test_a_float128_z_float64(
2471 1.1 ross float64 trueFunction( float128 ), float64 testFunction( float128 ) )
2472 1.1 ross {
2473 1.1 ross int16 count;
2474 1.1 ross float64 trueZ, testZ;
2475 1.1 ross uint8 trueFlags, testFlags;
2476 1.1 ross
2477 1.1 ross errorCount = 0;
2478 1.1 ross tenthousandsCount = 0;
2479 1.1 ross count = 10000;
2480 1.1 ross testCases_initSequence( testCases_sequence_a_float128 );
2481 1.1 ross writeTestsTotal();
2482 1.1 ross while ( ! testCases_done || forever ) {
2483 1.1 ross testCases_next();
2484 1.1 ross *trueFlagsPtr = 0;
2485 1.1 ross trueZ = trueFunction( testCases_a_float128 );
2486 1.1 ross trueFlags = *trueFlagsPtr;
2487 1.1 ross (void) testFlagsFunctionPtr();
2488 1.1 ross testZ = testFunction( testCases_a_float128 );
2489 1.1 ross testFlags = testFlagsFunctionPtr();
2490 1.1 ross --count;
2491 1.1 ross if ( count == 0 ) {
2492 1.1 ross checkEarlyExit();
2493 1.1 ross count = 10000;
2494 1.1 ross }
2495 1.1 ross if ( ! float64_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
2496 1.1 ross if ( ! checkNaNs
2497 1.1 ross && float128_is_signaling_nan( testCases_a_float128 ) ) {
2498 1.1 ross trueFlags |= float_flag_invalid;
2499 1.1 ross }
2500 1.1 ross if ( ! checkNaNs
2501 1.1 ross && float64_isNaN( trueZ )
2502 1.1 ross && float64_isNaN( testZ )
2503 1.1 ross && ! float64_is_signaling_nan( testZ )
2504 1.1 ross && ( trueFlags == testFlags )
2505 1.1 ross ) {
2506 1.1 ross /* no problem */
2507 1.1 ross }
2508 1.1 ross else {
2509 1.1 ross ++errorCount;
2510 1.1 ross writeErrorFound( 10000 - count );
2511 1.1 ross writeInput_a_float128();
2512 1.1 ross fputs( "\n\t", stdout );
2513 1.1 ross writeOutputs_z_float64( trueZ, trueFlags, testZ, testFlags );
2514 1.1 ross fflush( stdout );
2515 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
2516 1.1 ross }
2517 1.1 ross }
2518 1.1 ross }
2519 1.1 ross exit:
2520 1.1 ross writeTestsPerformed( 10000 - count );
2521 1.1 ross
2522 1.1 ross }
2523 1.1 ross
2524 1.1 ross #ifdef FLOATX80
2525 1.1 ross
2526 1.1 ross void
2527 1.1 ross test_a_float128_z_floatx80(
2528 1.1 ross floatx80 trueFunction( float128 ), floatx80 testFunction( float128 ) )
2529 1.1 ross {
2530 1.1 ross int16 count;
2531 1.1 ross floatx80 trueZ, testZ;
2532 1.1 ross uint8 trueFlags, testFlags;
2533 1.1 ross
2534 1.1 ross errorCount = 0;
2535 1.1 ross tenthousandsCount = 0;
2536 1.1 ross count = 10000;
2537 1.1 ross testCases_initSequence( testCases_sequence_a_float128 );
2538 1.1 ross writeTestsTotal();
2539 1.1 ross while ( ! testCases_done || forever ) {
2540 1.1 ross testCases_next();
2541 1.1 ross *trueFlagsPtr = 0;
2542 1.1 ross trueZ = trueFunction( testCases_a_float128 );
2543 1.1 ross trueFlags = *trueFlagsPtr;
2544 1.1 ross (void) testFlagsFunctionPtr();
2545 1.1 ross testZ = testFunction( testCases_a_float128 );
2546 1.1 ross testFlags = testFlagsFunctionPtr();
2547 1.1 ross --count;
2548 1.1 ross if ( count == 0 ) {
2549 1.1 ross checkEarlyExit();
2550 1.1 ross count = 10000;
2551 1.1 ross }
2552 1.1 ross if ( ! floatx80_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
2553 1.1 ross if ( ! checkNaNs
2554 1.1 ross && float128_is_signaling_nan( testCases_a_float128 ) ) {
2555 1.1 ross trueFlags |= float_flag_invalid;
2556 1.1 ross }
2557 1.1 ross if ( ! checkNaNs
2558 1.1 ross && floatx80_isNaN( trueZ )
2559 1.1 ross && floatx80_isNaN( testZ )
2560 1.1 ross && ! floatx80_is_signaling_nan( testZ )
2561 1.1 ross && ( trueFlags == testFlags )
2562 1.1 ross ) {
2563 1.1 ross /* no problem */
2564 1.1 ross }
2565 1.1 ross else {
2566 1.1 ross ++errorCount;
2567 1.1 ross writeErrorFound( 10000 - count );
2568 1.1 ross writeInput_a_float128();
2569 1.1 ross fputs( "\n\t", stdout );
2570 1.1 ross writeOutputs_z_floatx80( trueZ, trueFlags, testZ, testFlags );
2571 1.1 ross fflush( stdout );
2572 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
2573 1.1 ross }
2574 1.1 ross }
2575 1.1 ross }
2576 1.1 ross exit:
2577 1.1 ross writeTestsPerformed( 10000 - count );
2578 1.1 ross
2579 1.1 ross }
2580 1.1 ross
2581 1.1 ross #endif
2582 1.1 ross
2583 1.1 ross void
2584 1.1 ross test_az_float128(
2585 1.1 ross float128 trueFunction( float128 ), float128 testFunction( float128 ) )
2586 1.1 ross {
2587 1.1 ross int16 count;
2588 1.1 ross float128 trueZ, testZ;
2589 1.1 ross uint8 trueFlags, testFlags;
2590 1.1 ross
2591 1.1 ross errorCount = 0;
2592 1.1 ross tenthousandsCount = 0;
2593 1.1 ross count = 10000;
2594 1.1 ross testCases_initSequence( testCases_sequence_a_float128 );
2595 1.1 ross writeTestsTotal();
2596 1.1 ross while ( ! testCases_done || forever ) {
2597 1.1 ross testCases_next();
2598 1.1 ross *trueFlagsPtr = 0;
2599 1.1 ross trueZ = trueFunction( testCases_a_float128 );
2600 1.1 ross trueFlags = *trueFlagsPtr;
2601 1.1 ross (void) testFlagsFunctionPtr();
2602 1.1 ross testZ = testFunction( testCases_a_float128 );
2603 1.1 ross testFlags = testFlagsFunctionPtr();
2604 1.1 ross --count;
2605 1.1 ross if ( count == 0 ) {
2606 1.1 ross checkEarlyExit();
2607 1.1 ross count = 10000;
2608 1.1 ross }
2609 1.1 ross if ( ! float128_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
2610 1.1 ross if ( ! checkNaNs
2611 1.1 ross && float128_is_signaling_nan( testCases_a_float128 ) ) {
2612 1.1 ross trueFlags |= float_flag_invalid;
2613 1.1 ross }
2614 1.1 ross if ( ! checkNaNs
2615 1.1 ross && float128_isNaN( trueZ )
2616 1.1 ross && float128_isNaN( testZ )
2617 1.1 ross && ! float128_is_signaling_nan( testZ )
2618 1.1 ross && ( trueFlags == testFlags )
2619 1.1 ross ) {
2620 1.1 ross /* no problem */
2621 1.1 ross }
2622 1.1 ross else {
2623 1.1 ross ++errorCount;
2624 1.1 ross writeErrorFound( 10000 - count );
2625 1.1 ross writeInput_a_float128();
2626 1.1 ross fputs( "\n\t", stdout );
2627 1.1 ross writeOutputs_z_float128( trueZ, trueFlags, testZ, testFlags );
2628 1.1 ross fflush( stdout );
2629 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
2630 1.1 ross }
2631 1.1 ross }
2632 1.1 ross }
2633 1.1 ross exit:
2634 1.1 ross writeTestsPerformed( 10000 - count );
2635 1.1 ross
2636 1.1 ross }
2637 1.1 ross
2638 1.1 ross void
2639 1.1 ross test_ab_float128_z_flag(
2640 1.1 ross flag trueFunction( float128, float128 ),
2641 1.1 ross flag testFunction( float128, float128 )
2642 1.1 ross )
2643 1.1 ross {
2644 1.1 ross int16 count;
2645 1.1 ross flag trueZ, testZ;
2646 1.1 ross uint8 trueFlags, testFlags;
2647 1.1 ross
2648 1.1 ross errorCount = 0;
2649 1.1 ross tenthousandsCount = 0;
2650 1.1 ross count = 10000;
2651 1.1 ross testCases_initSequence( testCases_sequence_ab_float128 );
2652 1.1 ross writeTestsTotal();
2653 1.1 ross while ( ! testCases_done || forever ) {
2654 1.1 ross testCases_next();
2655 1.1 ross *trueFlagsPtr = 0;
2656 1.1 ross trueZ = trueFunction( testCases_a_float128, testCases_b_float128 );
2657 1.1 ross trueFlags = *trueFlagsPtr;
2658 1.1 ross (void) testFlagsFunctionPtr();
2659 1.1 ross testZ = testFunction( testCases_a_float128, testCases_b_float128 );
2660 1.1 ross testFlags = testFlagsFunctionPtr();
2661 1.1 ross --count;
2662 1.1 ross if ( count == 0 ) {
2663 1.1 ross checkEarlyExit();
2664 1.1 ross count = 10000;
2665 1.1 ross }
2666 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
2667 1.1 ross if ( ! checkNaNs
2668 1.1 ross && ( float128_is_signaling_nan( testCases_a_float128 )
2669 1.1 ross || float128_is_signaling_nan( testCases_b_float128 ) )
2670 1.1 ross ) {
2671 1.1 ross trueFlags |= float_flag_invalid;
2672 1.1 ross }
2673 1.1 ross if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
2674 1.1 ross ++errorCount;
2675 1.1 ross writeErrorFound( 10000 - count );
2676 1.1 ross writeInputs_ab_float128();
2677 1.1 ross fputs( "\n\t", stdout );
2678 1.1 ross writeOutputs_z_flag( trueZ, trueFlags, testZ, testFlags );
2679 1.1 ross fflush( stdout );
2680 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
2681 1.1 ross }
2682 1.1 ross }
2683 1.1 ross }
2684 1.1 ross exit:
2685 1.1 ross writeTestsPerformed( 10000 - count );
2686 1.1 ross return;
2687 1.1 ross
2688 1.1 ross }
2689 1.1 ross
2690 1.1 ross void
2691 1.1 ross test_abz_float128(
2692 1.1 ross float128 trueFunction( float128, float128 ),
2693 1.1 ross float128 testFunction( float128, float128 )
2694 1.1 ross )
2695 1.1 ross {
2696 1.1 ross int16 count;
2697 1.1 ross float128 trueZ, testZ;
2698 1.1 ross uint8 trueFlags, testFlags;
2699 1.1 ross
2700 1.1 ross errorCount = 0;
2701 1.1 ross tenthousandsCount = 0;
2702 1.1 ross count = 10000;
2703 1.1 ross testCases_initSequence( testCases_sequence_ab_float128 );
2704 1.1 ross writeTestsTotal();
2705 1.1 ross while ( ! testCases_done || forever ) {
2706 1.1 ross testCases_next();
2707 1.1 ross *trueFlagsPtr = 0;
2708 1.1 ross trueZ = trueFunction( testCases_a_float128, testCases_b_float128 );
2709 1.1 ross trueFlags = *trueFlagsPtr;
2710 1.1 ross (void) testFlagsFunctionPtr();
2711 1.1 ross testZ = testFunction( testCases_a_float128, testCases_b_float128 );
2712 1.1 ross testFlags = testFlagsFunctionPtr();
2713 1.1 ross --count;
2714 1.1 ross if ( count == 0 ) {
2715 1.1 ross checkEarlyExit();
2716 1.1 ross count = 10000;
2717 1.1 ross }
2718 1.1 ross if ( ! float128_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
2719 1.1 ross if ( ! checkNaNs
2720 1.1 ross && ( float128_is_signaling_nan( testCases_a_float128 )
2721 1.1 ross || float128_is_signaling_nan( testCases_b_float128 ) )
2722 1.1 ross ) {
2723 1.1 ross trueFlags |= float_flag_invalid;
2724 1.1 ross }
2725 1.1 ross if ( ! checkNaNs
2726 1.1 ross && float128_isNaN( trueZ )
2727 1.1 ross && float128_isNaN( testZ )
2728 1.1 ross && ! float128_is_signaling_nan( testZ )
2729 1.1 ross && ( trueFlags == testFlags )
2730 1.1 ross ) {
2731 1.1 ross /* no problem */
2732 1.1 ross }
2733 1.1 ross else {
2734 1.1 ross ++errorCount;
2735 1.1 ross writeErrorFound( 10000 - count );
2736 1.1 ross writeInputs_ab_float128();
2737 1.1 ross fputs( "\n\t", stdout );
2738 1.1 ross writeOutputs_z_float128( trueZ, trueFlags, testZ, testFlags );
2739 1.1 ross fflush( stdout );
2740 1.1 ross if ( errorCount == maxErrorCount ) goto exit;
2741 1.1 ross }
2742 1.1 ross }
2743 1.1 ross }
2744 1.1 ross exit:
2745 1.1 ross writeTestsPerformed( 10000 - count );
2746 1.1 ross return;
2747 1.1 ross
2748 1.1 ross }
2749 1.1 ross
2750 1.1 ross #endif
2751 1.1 ross
2752