mirror of
https://github.com/byteworksinc/ORCA-C.git
synced 2024-11-19 03:07:00 +00:00
217 lines
5.8 KiB
C
217 lines
5.8 KiB
C
|
/*
|
||
|
* Test floating-point classification macros (C99).
|
||
|
*/
|
||
|
|
||
|
#include <float.h>
|
||
|
#include <math.h>
|
||
|
#include <stdio.h>
|
||
|
|
||
|
int main(void) {
|
||
|
float f;
|
||
|
double d;
|
||
|
long double ld;
|
||
|
|
||
|
// These tests assume IEEE-like floating-point behavior.
|
||
|
|
||
|
/* float tests */
|
||
|
|
||
|
f = INFINITY;
|
||
|
if (fpclassify(f) != FP_INFINITE)
|
||
|
goto Fail;
|
||
|
if (!isinf(f) || isfinite(f) || isnan(f) || isnormal(f))
|
||
|
goto Fail;
|
||
|
if (signbit(f) != 0)
|
||
|
goto Fail;
|
||
|
|
||
|
f = NAN;
|
||
|
if (fpclassify(f) != FP_NAN)
|
||
|
goto Fail;
|
||
|
if (isinf(f) || isfinite(f) || !isnan(f) || isnormal(f))
|
||
|
goto Fail;
|
||
|
|
||
|
f = 1.0;
|
||
|
if (fpclassify(f) != FP_NORMAL)
|
||
|
goto Fail;
|
||
|
if (isinf(f) || !isfinite(f) || isnan(f) || !isnormal(f))
|
||
|
goto Fail;
|
||
|
if (signbit(f) != 0)
|
||
|
goto Fail;
|
||
|
|
||
|
f = FLT_MIN;
|
||
|
if (fpclassify(f) != FP_NORMAL)
|
||
|
goto Fail;
|
||
|
if (isinf(f) || !isfinite(f) || isnan(f) || !isnormal(f))
|
||
|
goto Fail;
|
||
|
if (signbit(f) != 0)
|
||
|
goto Fail;
|
||
|
|
||
|
f = FLT_MAX;
|
||
|
if (fpclassify(f) != FP_NORMAL)
|
||
|
goto Fail;
|
||
|
if (isinf(f) || !isfinite(f) || isnan(f) || !isnormal(f))
|
||
|
goto Fail;
|
||
|
if (signbit(f) != 0)
|
||
|
goto Fail;
|
||
|
|
||
|
f = 0.0;
|
||
|
if (fpclassify(f) != FP_ZERO)
|
||
|
goto Fail;
|
||
|
if (isinf(f) || !isfinite(f) || isnan(f) || isnormal(f))
|
||
|
goto Fail;
|
||
|
if (signbit(f) != 0)
|
||
|
goto Fail;
|
||
|
|
||
|
f = FLT_MIN / 2.0;
|
||
|
if (fpclassify(f) != FP_SUBNORMAL)
|
||
|
goto Fail;
|
||
|
if (isinf(f) || !isfinite(f) || isnan(f) || isnormal(f))
|
||
|
goto Fail;
|
||
|
if (signbit(f) != 0)
|
||
|
goto Fail;
|
||
|
|
||
|
f = -INFINITY;
|
||
|
if (signbit(f) == 0)
|
||
|
goto Fail;
|
||
|
|
||
|
f = -1.0;
|
||
|
if (signbit(f) == 0)
|
||
|
goto Fail;
|
||
|
|
||
|
|
||
|
/* double tests */
|
||
|
|
||
|
d = INFINITY;
|
||
|
if (fpclassify(d) != FP_INFINITE)
|
||
|
goto Fail;
|
||
|
if (!isinf(d) || isfinite(d) || isnan(d) || isnormal(d))
|
||
|
goto Fail;
|
||
|
if (signbit(d) != 0)
|
||
|
goto Fail;
|
||
|
|
||
|
d = NAN;
|
||
|
if (fpclassify(d) != FP_NAN)
|
||
|
goto Fail;
|
||
|
if (isinf(d) || isfinite(d) || !isnan(d) || isnormal(d))
|
||
|
goto Fail;
|
||
|
|
||
|
d = 1.0;
|
||
|
if (fpclassify(d) != FP_NORMAL)
|
||
|
goto Fail;
|
||
|
if (isinf(d) || !isfinite(d) || isnan(d) || !isnormal(d))
|
||
|
goto Fail;
|
||
|
if (signbit(d) != 0)
|
||
|
goto Fail;
|
||
|
|
||
|
d = DBL_MIN;
|
||
|
if (fpclassify(d) != FP_NORMAL)
|
||
|
goto Fail;
|
||
|
if (isinf(d) || !isfinite(d) || isnan(d) || !isnormal(d))
|
||
|
goto Fail;
|
||
|
if (signbit(d) != 0)
|
||
|
goto Fail;
|
||
|
|
||
|
d = DBL_MAX;
|
||
|
if (fpclassify(d) != FP_NORMAL)
|
||
|
goto Fail;
|
||
|
if (isinf(d) || !isfinite(d) || isnan(d) || !isnormal(d))
|
||
|
goto Fail;
|
||
|
if (signbit(d) != 0)
|
||
|
goto Fail;
|
||
|
|
||
|
d = 0.0;
|
||
|
if (fpclassify(d) != FP_ZERO)
|
||
|
goto Fail;
|
||
|
if (isinf(d) || !isfinite(d) || isnan(d) || isnormal(d))
|
||
|
goto Fail;
|
||
|
if (signbit(d) != 0)
|
||
|
goto Fail;
|
||
|
|
||
|
d = DBL_MIN / 2.0;
|
||
|
if (fpclassify(d) != FP_SUBNORMAL)
|
||
|
goto Fail;
|
||
|
if (isinf(d) || !isfinite(d) || isnan(d) || isnormal(d))
|
||
|
goto Fail;
|
||
|
if (signbit(d) != 0)
|
||
|
goto Fail;
|
||
|
|
||
|
d = -INFINITY;
|
||
|
if (signbit(d) == 0)
|
||
|
goto Fail;
|
||
|
|
||
|
d = -1.0;
|
||
|
if (signbit(d) == 0)
|
||
|
goto Fail;
|
||
|
|
||
|
|
||
|
/* long double tests */
|
||
|
|
||
|
ld = INFINITY;
|
||
|
if (fpclassify(ld) != FP_INFINITE)
|
||
|
goto Fail;
|
||
|
if (!isinf(ld) || isfinite(ld) || isnan(ld) || isnormal(ld))
|
||
|
goto Fail;
|
||
|
if (signbit(ld) != 0)
|
||
|
goto Fail;
|
||
|
|
||
|
ld = NAN;
|
||
|
if (fpclassify(ld) != FP_NAN)
|
||
|
goto Fail;
|
||
|
if (isinf(ld) || isfinite(ld) || !isnan(ld) || isnormal(ld))
|
||
|
goto Fail;
|
||
|
|
||
|
ld = 1.0;
|
||
|
if (fpclassify(ld) != FP_NORMAL)
|
||
|
goto Fail;
|
||
|
if (isinf(ld) || !isfinite(ld) || isnan(ld) || !isnormal(ld))
|
||
|
goto Fail;
|
||
|
if (signbit(ld) != 0)
|
||
|
goto Fail;
|
||
|
|
||
|
ld = LDBL_MIN;
|
||
|
if (fpclassify(ld) != FP_NORMAL)
|
||
|
goto Fail;
|
||
|
if (isinf(ld) || !isfinite(ld) || isnan(ld) || !isnormal(ld))
|
||
|
goto Fail;
|
||
|
if (signbit(ld) != 0)
|
||
|
goto Fail;
|
||
|
|
||
|
ld = LDBL_MAX;
|
||
|
if (fpclassify(ld) != FP_NORMAL)
|
||
|
goto Fail;
|
||
|
if (isinf(ld) || !isfinite(ld) || isnan(ld) || !isnormal(ld))
|
||
|
goto Fail;
|
||
|
if (signbit(ld) != 0)
|
||
|
goto Fail;
|
||
|
|
||
|
ld = 0.0;
|
||
|
if (fpclassify(ld) != FP_ZERO)
|
||
|
goto Fail;
|
||
|
if (isinf(ld) || !isfinite(ld) || isnan(ld) || isnormal(ld))
|
||
|
goto Fail;
|
||
|
if (signbit(ld) != 0)
|
||
|
goto Fail;
|
||
|
|
||
|
ld = LDBL_MIN / 2.0;
|
||
|
if (fpclassify(ld) != FP_SUBNORMAL)
|
||
|
goto Fail;
|
||
|
if (isinf(ld) || !isfinite(ld) || isnan(ld) || isnormal(ld))
|
||
|
goto Fail;
|
||
|
if (signbit(ld) != 0)
|
||
|
goto Fail;
|
||
|
|
||
|
ld = -INFINITY;
|
||
|
if (signbit(ld) == 0)
|
||
|
goto Fail;
|
||
|
|
||
|
ld = -1.0;
|
||
|
if (signbit(ld) == 0)
|
||
|
goto Fail;
|
||
|
|
||
|
printf ("Passed Conformance Test c99fpclass\n");
|
||
|
return 0;
|
||
|
|
||
|
Fail:
|
||
|
printf ("Failed Conformance Test c99fpclass\n");
|
||
|
|
||
|
}
|