static void test_nan_inf_zero (void) { mpfr_ptr val; int sign; int kind; reset_stack (); val = new_mpfr (MPFR_PREC_MIN); mpfr_set_nan (val); kind = (mpfr_custom_get_kind) (val); if (kind != MPFR_NAN_KIND) { printf ("mpfr_custom_get_kind error: "); mpfr_dump (val); printf (" is kind %d instead of %d\n", kind, (int) MPFR_NAN_KIND); exit (1); } val = new_nan (MPFR_PREC_MIN); if (!mpfr_nan_p(val)) { printf ("Error: mpfr_custom_init_set doesn't set NAN mpfr.\n"); exit (1); } val = new_inf (MPFR_PREC_MIN); if (!mpfr_inf_p(val) || mpfr_sgn(val) >= 0) { printf ("Error: mpfr_custom_init_set doesn't set -INF mpfr.\n"); exit (1); } sign = 1; mpfr_set_inf (val, sign); kind = (mpfr_custom_get_kind) (val); if ((ABS (kind) != MPFR_INF_KIND) || (SIGN (kind) != SIGN (sign))) { printf ("mpfr_custom_get_kind error: "); mpfr_dump (val); printf (" is kind %d instead of %d\n", kind, (int) MPFR_INF_KIND); printf (" have sign %d instead of %d\n", SIGN (kind), SIGN (sign)); exit (1); } sign = -1; mpfr_set_zero (val, sign); kind = (mpfr_custom_get_kind) (val); if ((ABS (kind) != MPFR_ZERO_KIND) || (SIGN (kind) != SIGN (sign))) { printf ("mpfr_custom_get_kind error: "); mpfr_dump (val); printf (" is kind %d instead of %d\n", kind, (int) MPFR_ZERO_KIND); printf (" have sign %d instead of %d\n", SIGN (kind), SIGN (sign)); exit (1); } reset_stack (); }
int main(void) { init_ident(); init_tarval_1(); init_irprog_1(); init_mode(); init_tarval_2(); double d_nan = 0.0/0.0; assert (d_nan != d_nan); d_nan = new_nan(1234); assert (d_nan != d_nan); assert (nan_payload(d_nan) == 1234); d_nan *= 2; assert (d_nan != d_nan); ir_tarval* tv_nan = new_tarval_from_double(d_nan, mode_D); assert (tarval_is_nan(tv_nan)); d_nan = get_tarval_double(tv_nan); assert (d_nan != d_nan); assert (nan_payload(d_nan) == 1234); tv_nan = new_tarval_nan(mode_D, false, NULL); assert (tarval_is_nan(tv_nan)); d_nan = get_tarval_double(tv_nan); assert (d_nan != d_nan); d_nan = new_nan(0); assert (nan_payload(d_nan) == 0); assert (d_nan != d_nan); tv_nan = new_tarval_from_double(d_nan, mode_D); assert (tarval_is_nan(tv_nan)); d_nan = get_tarval_double(tv_nan); assert (d_nan != d_nan); assert (nan_payload(d_nan) == 0); finish_tarval(); finish_mode(); finish_ident(); return 0; }