static void _fmpq_mat_sum_of_squares(fmpq_t res, const fmpq_mat_t Q) { slong i, j; fmpq_zero(res); for (i = 0; i < fmpq_mat_nrows(Q); i++) { for (j = 0; j < fmpq_mat_ncols(Q); j++) { fmpq_addmul(res, fmpq_mat_entry(Q, i, j), fmpq_mat_entry(Q, i, j)); } } }
int main() { long iter; flint_rand_t state; printf("addmul...."); fflush(stdout); flint_randinit(state); for (iter = 0; iter < 100000; iter++) { fmprb_t a, b, c; fmpq_t x, y, z; fmprb_init(a); fmprb_init(b); fmprb_init(c); fmpq_init(x); fmpq_init(y); fmpq_init(z); fmprb_randtest(a, state, 1 + n_randint(state, 200), 10); fmprb_randtest(b, state, 1 + n_randint(state, 200), 10); fmprb_randtest(c, state, 1 + n_randint(state, 200), 10); fmprb_get_rand_fmpq(x, state, a, 1 + n_randint(state, 200)); fmprb_get_rand_fmpq(y, state, b, 1 + n_randint(state, 200)); fmprb_get_rand_fmpq(z, state, c, 1 + n_randint(state, 200)); fmprb_addmul(c, a, b, 2 + n_randint(state, 200)); fmpq_addmul(z, x, y); if (!fmprb_contains_fmpq(c, z)) { printf("FAIL: containment\n\n"); printf("a = "); fmprb_print(a); printf("\n\n"); printf("x = "); fmpq_print(x); printf("\n\n"); printf("b = "); fmprb_print(b); printf("\n\n"); printf("y = "); fmpq_print(y); printf("\n\n"); printf("c = "); fmprb_print(c); printf("\n\n"); printf("z = "); fmpq_print(z); printf("\n\n"); abort(); } fmprb_clear(a); fmprb_clear(b); fmprb_clear(c); fmpq_clear(x); fmpq_clear(y); fmpq_clear(z); } /* aliasing of c and a */ for (iter = 0; iter < 10000; iter++) { fmprb_t a, b; fmpq_t x, y, z; fmprb_init(a); fmprb_init(b); fmpq_init(x); fmpq_init(y); fmpq_init(z); fmprb_randtest(a, state, 1 + n_randint(state, 200), 10); fmprb_randtest(b, state, 1 + n_randint(state, 200), 10); fmprb_get_rand_fmpq(x, state, a, 1 + n_randint(state, 200)); fmprb_get_rand_fmpq(y, state, b, 1 + n_randint(state, 200)); fmpq_set(z, x); fmprb_addmul(a, a, b, 2 + n_randint(state, 200)); fmpq_addmul(z, x, y); if (!fmprb_contains_fmpq(a, z)) { printf("FAIL: aliasing (c, a)\n\n"); printf("a = "); fmprb_print(a); printf("\n\n"); printf("x = "); fmpq_print(x); printf("\n\n"); printf("b = "); fmprb_print(b); printf("\n\n"); printf("y = "); fmpq_print(y); printf("\n\n"); printf("z = "); fmpq_print(z); printf("\n\n"); abort(); } fmprb_clear(a); fmprb_clear(b); fmpq_clear(x); fmpq_clear(y); fmpq_clear(z); } /* aliasing of c and b */ for (iter = 0; iter < 10000; iter++) { fmprb_t a, b; fmpq_t x, y, z; fmprb_init(a); fmprb_init(b); fmpq_init(x); fmpq_init(y); fmpq_init(z); fmprb_randtest(a, state, 1 + n_randint(state, 200), 10); fmprb_randtest(b, state, 1 + n_randint(state, 200), 10); fmprb_get_rand_fmpq(x, state, a, 1 + n_randint(state, 200)); fmprb_get_rand_fmpq(y, state, b, 1 + n_randint(state, 200)); fmpq_set(z, y); fmprb_addmul(b, a, b, 2 + n_randint(state, 200)); fmpq_addmul(z, x, y); if (!fmprb_contains_fmpq(b, z)) { printf("FAIL: aliasing (c, b)\n\n"); printf("a = "); fmprb_print(a); printf("\n\n"); printf("x = "); fmpq_print(x); printf("\n\n"); printf("b = "); fmprb_print(b); printf("\n\n"); printf("y = "); fmpq_print(y); printf("\n\n"); printf("z = "); fmpq_print(z); printf("\n\n"); abort(); } fmprb_clear(a); fmprb_clear(b); fmpq_clear(x); fmpq_clear(y); fmpq_clear(z); } flint_randclear(state); flint_cleanup(); printf("PASS\n"); return EXIT_SUCCESS; }
int main() { slong iter, iter2; flint_rand_t state; flint_printf("addmul...."); fflush(stdout); flint_randinit(state); for (iter = 0; iter < 100000 * arb_test_multiplier(); iter++) { arb_t a, b, c; fmpq_t x, y, z; arb_init(a); arb_init(b); arb_init(c); fmpq_init(x); fmpq_init(y); fmpq_init(z); arb_randtest(a, state, 1 + n_randint(state, 200), 10); arb_randtest(b, state, 1 + n_randint(state, 200), 10); arb_randtest(c, state, 1 + n_randint(state, 200), 10); arb_get_rand_fmpq(x, state, a, 1 + n_randint(state, 200)); arb_get_rand_fmpq(y, state, b, 1 + n_randint(state, 200)); arb_get_rand_fmpq(z, state, c, 1 + n_randint(state, 200)); arb_addmul(c, a, b, 2 + n_randint(state, 200)); fmpq_addmul(z, x, y); if (!arb_contains_fmpq(c, z)) { flint_printf("FAIL: containment\n\n"); flint_printf("a = "); arb_print(a); flint_printf("\n\n"); flint_printf("x = "); fmpq_print(x); flint_printf("\n\n"); flint_printf("b = "); arb_print(b); flint_printf("\n\n"); flint_printf("y = "); fmpq_print(y); flint_printf("\n\n"); flint_printf("c = "); arb_print(c); flint_printf("\n\n"); flint_printf("z = "); fmpq_print(z); flint_printf("\n\n"); abort(); } arb_clear(a); arb_clear(b); arb_clear(c); fmpq_clear(x); fmpq_clear(y); fmpq_clear(z); } /* aliasing of c and a */ for (iter = 0; iter < 10000 * arb_test_multiplier(); iter++) { arb_t a, b; fmpq_t x, y, z; arb_init(a); arb_init(b); fmpq_init(x); fmpq_init(y); fmpq_init(z); arb_randtest(a, state, 1 + n_randint(state, 200), 10); arb_randtest(b, state, 1 + n_randint(state, 200), 10); arb_get_rand_fmpq(x, state, a, 1 + n_randint(state, 200)); arb_get_rand_fmpq(y, state, b, 1 + n_randint(state, 200)); fmpq_set(z, x); arb_addmul(a, a, b, 2 + n_randint(state, 200)); fmpq_addmul(z, x, y); if (!arb_contains_fmpq(a, z)) { flint_printf("FAIL: aliasing (c, a)\n\n"); flint_printf("a = "); arb_print(a); flint_printf("\n\n"); flint_printf("x = "); fmpq_print(x); flint_printf("\n\n"); flint_printf("b = "); arb_print(b); flint_printf("\n\n"); flint_printf("y = "); fmpq_print(y); flint_printf("\n\n"); flint_printf("z = "); fmpq_print(z); flint_printf("\n\n"); abort(); } arb_clear(a); arb_clear(b); fmpq_clear(x); fmpq_clear(y); fmpq_clear(z); } /* aliasing of c and b */ for (iter = 0; iter < 10000 * arb_test_multiplier(); iter++) { arb_t a, b; fmpq_t x, y, z; arb_init(a); arb_init(b); fmpq_init(x); fmpq_init(y); fmpq_init(z); arb_randtest(a, state, 1 + n_randint(state, 200), 10); arb_randtest(b, state, 1 + n_randint(state, 200), 10); arb_get_rand_fmpq(x, state, a, 1 + n_randint(state, 200)); arb_get_rand_fmpq(y, state, b, 1 + n_randint(state, 200)); fmpq_set(z, y); arb_addmul(b, a, b, 2 + n_randint(state, 200)); fmpq_addmul(z, x, y); if (!arb_contains_fmpq(b, z)) { flint_printf("FAIL: aliasing (c, b)\n\n"); flint_printf("a = "); arb_print(a); flint_printf("\n\n"); flint_printf("x = "); fmpq_print(x); flint_printf("\n\n"); flint_printf("b = "); arb_print(b); flint_printf("\n\n"); flint_printf("y = "); fmpq_print(y); flint_printf("\n\n"); flint_printf("z = "); fmpq_print(z); flint_printf("\n\n"); abort(); } arb_clear(a); arb_clear(b); fmpq_clear(x); fmpq_clear(y); fmpq_clear(z); } /* main test */ for (iter = 0; iter < 10000 * arb_test_multiplier(); iter++) { arb_t x, y, z, v; slong prec; arb_init(x); arb_init(y); arb_init(z); arb_init(v); for (iter2 = 0; iter2 < 100; iter2++) { arb_randtest_special(x, state, n_randint(state,2) ? 2000 : 200, 200); arb_randtest_special(y, state, n_randint(state,2) ? 2000 : 200, 200); arb_randtest_special(z, state, n_randint(state,2) ? 2000 : 200, 200); prec = 2 + n_randint(state, 2000); switch (n_randint(state, 5)) { case 0: arb_set(v, z); arb_addmul(z, x, y, prec); arb_addmul_naive(v, x, y, prec); if (!arf_equal(arb_midref(z), arb_midref(v)) || !mag_close(arb_radref(z), arb_radref(v))) { flint_printf("FAIL!\n"); flint_printf("x = "); arb_print(x); flint_printf("\n\n"); flint_printf("y = "); arb_print(y); flint_printf("\n\n"); flint_printf("z = "); arb_print(z); flint_printf("\n\n"); flint_printf("v = "); arb_print(v); flint_printf("\n\n"); abort(); } break; case 1: arb_set(y, x); arb_set(z, v); arb_addmul(z, x, y, prec); arb_addmul(v, x, x, prec); if (!arf_equal(arb_midref(z), arb_midref(v)) || !mag_close(arb_radref(z), arb_radref(v))) { flint_printf("FAIL (aliasing 1)!\n"); flint_printf("x = "); arb_print(x); flint_printf("\n\n"); flint_printf("z = "); arb_print(z); flint_printf("\n\n"); flint_printf("v = "); arb_print(v); flint_printf("\n\n"); abort(); } break; case 2: arb_set(v, x); arb_addmul(v, x, x, prec); arb_addmul(x, x, x, prec); if (!arf_equal(arb_midref(x), arb_midref(v)) || !mag_close(arb_radref(x), arb_radref(v))) { flint_printf("FAIL (aliasing 2)!\n"); flint_printf("x = "); arb_print(x); flint_printf("\n\n"); flint_printf("v = "); arb_print(v); flint_printf("\n\n"); abort(); } break; case 3: arb_set(v, x); arb_addmul(v, x, y, prec); arb_addmul(x, x, y, prec); if (!arf_equal(arb_midref(x), arb_midref(v)) || !mag_close(arb_radref(x), arb_radref(v))) { flint_printf("FAIL (aliasing 3)!\n"); flint_printf("x = "); arb_print(x); flint_printf("\n\n"); flint_printf("y = "); arb_print(y); flint_printf("\n\n"); flint_printf("v = "); arb_print(v); flint_printf("\n\n"); abort(); } break; default: arb_set(v, x); arb_addmul(v, x, y, prec); arb_addmul(x, y, x, prec); if (!arf_equal(arb_midref(x), arb_midref(v)) || !mag_close(arb_radref(x), arb_radref(v))) { flint_printf("FAIL (aliasing 4)!\n"); flint_printf("x = "); arb_print(x); flint_printf("\n\n"); flint_printf("y = "); arb_print(y); flint_printf("\n\n"); flint_printf("v = "); arb_print(v); flint_printf("\n\n"); abort(); } break; } } arb_clear(x); arb_clear(y); arb_clear(z); arb_clear(v); } flint_randclear(state); flint_cleanup(); flint_printf("PASS\n"); return EXIT_SUCCESS; }