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