Files
RockOS/rocklibc/src/math/fmax.c

106 lines
2.7 KiB
C
Raw Normal View History

/* fmax( double )
This file is part of the Public Domain C Library (PDCLib).
Permission is granted to use, modify, and / or redistribute at will.
*/
#include <math.h>
#ifndef REGTEST
double fmax( double x, double y )
{
if ( isnan( x ) ) return y;
if ( isnan( y ) ) return x;
return ( x > y ) ? x : y;
}
float fmaxf( float x, float y )
{
if ( isnan( x ) ) return y;
if ( isnan( y ) ) return x;
return ( x > y ) ? x : y;
}
long double fmaxl( long double x, long double y )
{
if ( isnan( x ) ) return y;
if ( isnan( y ) ) return x;
return ( x > y ) ? x : y;
}
#endif
#ifdef TEST
#include "_PDCLIB_test.h"
int main( void )
{
float f1, f2;
double d1, d2;
long double ld1, ld2;
f1 = 3.15f;
f2 = 3.16f;
TESTCASE( fmaxf( f1, f2 ) == f2 );
TESTCASE( fmaxf( f2, f1 ) == f2 );
TESTCASE( fmaxf( f1, f1 ) == f1 );
TESTCASE( fmaxf( f1, INFINITY ) == INFINITY );
TESTCASE( fmaxf( INFINITY, f1 ) == INFINITY );
TESTCASE( fmaxf( f1, -INFINITY ) == f1 );
TESTCASE( fmaxf( -INFINITY, f1 ) == f1 );
TESTCASE( fmaxf( f1, NAN ) == f1 );
TESTCASE( fmaxf( NAN, f1 ) == f1 );
TESTCASE( fmaxf( f1, -NAN ) == f1 );
TESTCASE( fmaxf( -NAN, f1 ) == f1 );
TESTCASE( fmaxf( NAN, NAN ) != fmaxf( NAN, NAN ) );
f1 = 0.0f;
f2 = -0.0f;
TESTCASE( fmaxf( f1, f2 ) == f1 );
TESTCASE( fmaxf( f2, f1 ) == f1 );
d1 = 3.15f;
d2 = 3.16f;
TESTCASE( fmax( d1, d2 ) == d2 );
TESTCASE( fmax( d2, d1 ) == d2 );
TESTCASE( fmax( d1, d1 ) == d1 );
TESTCASE( fmax( d1, INFINITY ) == INFINITY );
TESTCASE( fmax( INFINITY, d1 ) == INFINITY );
TESTCASE( fmax( d1, -INFINITY ) == d1 );
TESTCASE( fmax( -INFINITY, d1 ) == d1 );
TESTCASE( fmax( d1, NAN ) == d1 );
TESTCASE( fmax( NAN, d1 ) == d1 );
TESTCASE( fmax( d1, -NAN ) == d1 );
TESTCASE( fmax( -NAN, d1 ) == d1 );
TESTCASE( fmax( NAN, NAN ) != fmax( NAN, NAN ) );
d1 = 0.0;
d2 = -0.0;
TESTCASE( fmax( d1, d2 ) == d1 );
TESTCASE( fmax( d2, d1 ) == d1 );
ld1 = 3.15f;
ld2 = 3.16f;
TESTCASE( fmaxl( ld1, ld2 ) == ld2 );
TESTCASE( fmaxl( ld2, ld1 ) == ld2 );
TESTCASE( fmaxl( ld1, ld1 ) == ld1 );
TESTCASE( fmaxl( ld1, INFINITY ) == INFINITY );
TESTCASE( fmaxl( INFINITY, ld1 ) == INFINITY );
TESTCASE( fmaxl( ld1, -INFINITY ) == ld1 );
TESTCASE( fmaxl( -INFINITY, ld1 ) == ld1 );
TESTCASE( fmaxl( ld1, NAN ) == ld1 );
TESTCASE( fmaxl( NAN, ld1 ) == ld1 );
TESTCASE( fmaxl( ld1, -NAN ) == ld1 );
TESTCASE( fmaxl( -NAN, ld1 ) == ld1 );
TESTCASE( fmaxl( NAN, NAN ) != fmaxl( NAN, NAN ) );
ld1 = 0.0;
ld2 = -0.0;
TESTCASE( fmaxl( ld1, ld2 ) == ld1 );
TESTCASE( fmaxl( ld2, ld1 ) == ld1 );
return TEST_RESULTS;
}
#endif