improve test code for arb_div and make nan -> nan when dividing

This commit is contained in:
Fredrik Johansson 2014-11-15 16:36:04 +01:00
parent 150363ad9e
commit 3c1bd52286
2 changed files with 37 additions and 1 deletions

View file

@ -33,7 +33,10 @@ arb_div_arf(arb_t z, const arb_t x, const arf_t y, long prec)
if (arf_is_zero(y))
{
arb_zero_pm_inf(z);
if (arf_is_nan(arb_midref(x)))
arb_indeterminate(z);
else
arb_zero_pm_inf(z);
}
else if (arb_is_exact(x))
{

View file

@ -167,6 +167,39 @@ int main()
fmpq_clear(z);
}
/* test special values */
for (iter = 0; iter < 100000; iter++)
{
arb_t a, b, c, d;
arb_init(a);
arb_init(b);
arb_init(c);
arb_init(d);
arb_randtest_special(a, state, 1 + n_randint(state, 200), 1 + n_randint(state, 100));
arb_randtest_special(b, state, 1 + n_randint(state, 200), 1 + n_randint(state, 100));
arb_randtest_special(c, state, 1 + n_randint(state, 200), 1 + n_randint(state, 100));
arb_div(c, a, b, 2 + n_randint(state, 200));
arb_mul(d, c, b, 2 + n_randint(state, 200));
if (!arb_contains(d, a))
{
printf("FAIL: containment\n\n");
printf("a = "); arb_printd(a, 15); printf("\n\n");
printf("b = "); arb_printd(b, 15); printf("\n\n");
printf("c = "); arb_printd(c, 15); printf("\n\n");
printf("d = "); arb_printd(d, 15); printf("\n\n");
abort();
}
arb_clear(a);
arb_clear(b);
arb_clear(c);
arb_clear(d);
}
flint_randclear(state);
flint_cleanup();
printf("PASS\n");