Home | History | Annotate | Line # | Download | only in testfloat
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