int main () { /* Zero. */ ASSERT (truncf (0.0f) == 0.0f); ASSERT (truncf (minus_zerof) == 0.0f); /* Positive numbers. */ ASSERT (truncf (0.3f) == 0.0f); ASSERT (truncf (0.7f) == 0.0f); ASSERT (truncf (1.0f) == 1.0f); ASSERT (truncf (1.5f) == 1.0f); ASSERT (truncf (1.999f) == 1.0f); ASSERT (truncf (2.0f) == 2.0f); ASSERT (truncf (65535.99f) == 65535.0f); ASSERT (truncf (65536.0f) == 65536.0f); ASSERT (truncf (2.341e31f) == 2.341e31f); /* Negative numbers. */ ASSERT (truncf (-0.3f) == 0.0f); ASSERT (truncf (-0.7f) == 0.0f); ASSERT (truncf (-1.0f) == -1.0f); ASSERT (truncf (-1.5f) == -1.0f); ASSERT (truncf (-1.999f) == -1.0f); ASSERT (truncf (-2.0f) == -2.0f); ASSERT (truncf (-65535.99f) == -65535.0f); ASSERT (truncf (-65536.0f) == -65536.0f); ASSERT (truncf (-2.341e31f) == -2.341e31f); /* Infinite numbers. */ ASSERT (truncf (Infinityf ()) == Infinityf ()); ASSERT (truncf (- Infinityf ()) == - Infinityf ()); /* NaNs. */ ASSERT (isnanf (truncf (NaNf ()))); return 0; }
int main () { /* See IEEE 754, section 6.3: "the sign of the result of the round floating-point number to integral value operation is the sign of the operand. These rules shall apply even when operands or results are zero or infinite." */ /* Zero. */ ASSERT (!signbit (truncf (0.0f))); ASSERT (!!signbit (truncf (minus_zerof)) == !!signbit (minus_zerof)); /* Positive numbers. */ ASSERT (!signbit (truncf (0.3f))); ASSERT (!signbit (truncf (0.7f))); /* Negative numbers. */ ASSERT (!!signbit (truncf (-0.3f)) == !!signbit (minus_zerof)); ASSERT (!!signbit (truncf (-0.7f)) == !!signbit (minus_zerof)); /* [MX] shaded specification in POSIX. */ /* NaN. */ ASSERT (isnanf (truncf (NaNf ()))); /* Infinity. */ ASSERT (truncf (Infinityf ()) == Infinityf ()); ASSERT (truncf (- Infinityf ()) == - Infinityf ()); return 0; }
int main () { /* Zero. */ ASSERT (ceilf (0.0f) == 0.0f); ASSERT (ceilf (-zero) == 0.0f); /* Positive numbers. */ ASSERT (ceilf (0.3f) == 1.0f); ASSERT (ceilf (0.7f) == 1.0f); ASSERT (ceilf (1.0f) == 1.0f); ASSERT (ceilf (1.001f) == 2.0f); ASSERT (ceilf (1.5f) == 2.0f); ASSERT (ceilf (1.999f) == 2.0f); ASSERT (ceilf (2.0f) == 2.0f); ASSERT (ceilf (65535.99f) == 65536.0f); ASSERT (ceilf (65536.0f) == 65536.0f); ASSERT (ceilf (2.341e31f) == 2.341e31f); /* Negative numbers. */ ASSERT (ceilf (-0.3f) == 0.0f); ASSERT (ceilf (-0.7f) == 0.0f); ASSERT (ceilf (-1.0f) == -1.0f); ASSERT (ceilf (-1.5f) == -1.0f); ASSERT (ceilf (-1.999f) == -1.0f); ASSERT (ceilf (-2.0f) == -2.0f); ASSERT (ceilf (-65535.99f) == -65535.0f); ASSERT (ceilf (-65536.0f) == -65536.0f); ASSERT (ceilf (-2.341e31f) == -2.341e31f); /* Infinite numbers. */ ASSERT (ceilf (1.0f / 0.0f) == 1.0f / 0.0f); ASSERT (ceilf (-1.0f / 0.0f) == -1.0f / 0.0f); /* NaNs. */ ASSERT (isnanf (ceilf (NaNf ()))); return 0; }
static void test_float (void) { /* Finite values. */ ASSERT (!isnan (3.141f)); ASSERT (!isnan (3.141e30f)); ASSERT (!isnan (3.141e-30f)); ASSERT (!isnan (-2.718f)); ASSERT (!isnan (-2.718e30f)); ASSERT (!isnan (-2.718e-30f)); ASSERT (!isnan (0.0f)); ASSERT (!isnan (minus_zerof)); /* Infinite values. */ ASSERT (!isnan (Infinityf ())); ASSERT (!isnan (- Infinityf ())); /* Quiet NaN. */ ASSERT (isnan (NaNf ())); #if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT /* Signalling NaN. */ { #define NWORDSF \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { float value; unsigned int word[NWORDSF]; } memory_float; memory_float m; m.value = NaNf (); # if FLT_EXPBIT0_BIT > 0 m.word[FLT_EXPBIT0_WORD] ^= (unsigned int) 1 << (FLT_EXPBIT0_BIT - 1); # else m.word[FLT_EXPBIT0_WORD + (FLT_EXPBIT0_WORD < NWORDSF / 2 ? 1 : - 1)] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); # endif if (FLT_EXPBIT0_WORD < NWORDSF / 2) m.word[FLT_EXPBIT0_WORD + 1] |= (unsigned int) 1 << FLT_EXPBIT0_BIT; else m.word[0] |= (unsigned int) 1; ASSERT (isnan (m.value)); } #endif }