int main(void) { int i, result; flint_rand_t state; printf("scalar_mul_mpq... "); fflush(stdout); flint_randinit(state); /* Check aliasing of a and b */ for (i = 0; i < 100; i++) { fmpz_poly_q_t a, b; fmpz_t x1, x2; mpq_t y; fmpz_poly_q_init(a); fmpz_poly_q_init(b); fmpz_init(x1); fmpz_init(x2); mpq_init(y); fmpz_poly_q_randtest(b, state, n_randint(state, 50), 50, n_randint(state, 50), 50); fmpz_randtest(x1, state, 50); fmpz_randtest_not_zero(x2, state, 50); fmpz_get_mpz(mpq_numref(y), x1); fmpz_get_mpz(mpq_denref(y), x2); mpq_canonicalize(y); fmpz_poly_q_scalar_mul_mpq(a, b, y); fmpz_poly_q_scalar_mul_mpq(b, b, y); result = fmpz_poly_q_equal(a, b); if (!result) { printf("FAIL:\n"); fmpz_poly_q_print(a), printf("\n\n"); fmpz_poly_q_print(b), printf("\n\n"); abort(); } fmpz_poly_q_clear(a); fmpz_poly_q_clear(b); fmpz_clear(x1); fmpz_clear(x2); mpq_clear(y); } /* Check that x (a + b) == x * a + x * b */ for (i = 0; i < 100; i++) { fmpz_poly_q_t a, b, c, d; fmpz_t x1, x2; mpq_t y; fmpz_poly_q_init(a); fmpz_poly_q_init(b); fmpz_poly_q_init(c); fmpz_poly_q_init(d); fmpz_init(x1); fmpz_init(x2); mpq_init(y); fmpz_poly_q_randtest(a, state, n_randint(state, 50), 50, n_randint(state, 50), 50); fmpz_poly_q_randtest(b, state, n_randint(state, 50), 50, n_randint(state, 50), 50); fmpz_randtest(x1, state, 50); fmpz_randtest_not_zero(x2, state, 50); fmpz_get_mpz(mpq_numref(y), x1); fmpz_get_mpz(mpq_denref(y), x2); mpq_canonicalize(y); fmpz_poly_q_scalar_mul_mpq(c, a, y); fmpz_poly_q_scalar_mul_mpq(d, b, y); fmpz_poly_q_add(d, c, d); fmpz_poly_q_add(c, a, b); fmpz_poly_q_scalar_mul_mpq(c, c, y); result = fmpz_poly_q_equal(c, d) && fmpz_poly_q_is_canonical(c); if (!result) { printf("FAIL:\n"); printf("a = "), fmpz_poly_q_print(a), printf("\n\n"); printf("b = "), fmpz_poly_q_print(b), printf("\n\n"); printf("c = "), fmpz_poly_q_print(c), printf("\n\n"); printf("d = "), fmpz_poly_q_print(d), printf("\n\n"); gmp_printf("y = %Qd\n\n", y); abort(); } fmpz_poly_q_clear(a); fmpz_poly_q_clear(b); fmpz_poly_q_clear(c); fmpz_poly_q_clear(d); fmpz_clear(x1); fmpz_clear(x2); mpq_clear(y); } flint_randclear(state); _fmpz_cleanup(); printf("PASS\n"); return EXIT_SUCCESS; }
int main(void) { int i, result; FLINT_TEST_INIT(state); flint_printf("inv... "); fflush(stdout); /* Check aliasing of a and b */ for (i = 0; i < 100; i++) { fmpz_poly_q_t a, b; fmpz_poly_q_init(a); fmpz_poly_q_init(b); fmpz_poly_q_randtest_not_zero(a, state, n_randint(state, 50), 50, n_randint(state, 50), 50); fmpz_poly_q_inv(b, a); fmpz_poly_q_inv(a, a); result = fmpz_poly_q_equal(a, b); if (!result) { flint_printf("FAIL:\n"); fmpz_poly_q_print(a), flint_printf("\n\n"); fmpz_poly_q_print(b), flint_printf("\n\n"); abort(); } fmpz_poly_q_clear(a); fmpz_poly_q_clear(b); } /* Check a * (1/a) == 1 */ for (i = 0; i < 100; i++) { fmpz_poly_q_t a, b; fmpz_poly_q_init(a); fmpz_poly_q_init(b); fmpz_poly_q_randtest_not_zero(a, state, n_randint(state, 50), 50, n_randint(state, 50), 50); fmpz_poly_q_inv(b, a); fmpz_poly_q_mul(b, a, b); result = fmpz_poly_q_is_one(b) && fmpz_poly_q_is_canonical(b); if (!result) { flint_printf("FAIL:\n"); fmpz_poly_q_print(a), flint_printf("\n\n"); fmpz_poly_q_print(b), flint_printf("\n\n"); abort(); } fmpz_poly_q_clear(a); fmpz_poly_q_clear(b); } FLINT_TEST_CLEANUP(state); flint_printf("PASS\n"); return EXIT_SUCCESS; }
int main(void) { int i, result; flint_rand_t state; printf("scalar_div_si... "); fflush(stdout); flint_randinit(state); /* Check aliasing of a and b */ for (i = 0; i < 100; i++) { fmpz_poly_q_t a, b; long x; fmpz_poly_q_init(a); fmpz_poly_q_init(b); fmpz_poly_q_randtest(b, state, n_randint(state, 50), 50, n_randint(state, 50), 50); x = z_randtest_not_zero(state); fmpz_poly_q_scalar_div_si(a, b, x); fmpz_poly_q_scalar_div_si(b, b, x); result = fmpz_poly_q_equal(a, b); if (!result) { printf("FAIL:\n"); fmpz_poly_q_print(a), printf("\n\n"); fmpz_poly_q_print(b), printf("\n\n"); abort(); } fmpz_poly_q_clear(a); fmpz_poly_q_clear(b); } /* Check that (a + b) / x == a / x + b / x */ for (i = 0; i < 100; i++) { fmpz_poly_q_t a, b, c, d; long x; fmpz_poly_q_init(a); fmpz_poly_q_init(b); fmpz_poly_q_init(c); fmpz_poly_q_init(d); fmpz_poly_q_randtest(a, state, n_randint(state, 50), 50, n_randint(state, 50), 50); fmpz_poly_q_randtest(b, state, n_randint(state, 50), 50, n_randint(state, 50), 50); x = z_randtest_not_zero(state); fmpz_poly_q_scalar_div_si(c, a, x); fmpz_poly_q_scalar_div_si(d, b, x); fmpz_poly_q_add(d, c, d); fmpz_poly_q_add(c, a, b); fmpz_poly_q_scalar_div_si(c, c, x); result = fmpz_poly_q_equal(c, d) && fmpz_poly_q_is_canonical(c); if (!result) { printf("FAIL:\n"); printf("a = "), fmpz_poly_q_print(a), printf("\n\n"); printf("b = "), fmpz_poly_q_print(b), printf("\n\n"); printf("c = "), fmpz_poly_q_print(c), printf("\n\n"); printf("d = "), fmpz_poly_q_print(d), printf("\n\n"); printf("x = %ld\n\n", x); abort(); } fmpz_poly_q_clear(a); fmpz_poly_q_clear(b); fmpz_poly_q_clear(c); fmpz_poly_q_clear(d); } flint_randclear(state); _fmpz_cleanup(); printf("PASS\n"); return EXIT_SUCCESS; }
int main(void) { int i, result; flint_rand_t state; printf("submul... "); fflush(stdout); flint_randinit(state); /* Check aliasing of a and c */ for (i = 0; i < 100; i++) { fmpz_poly_q_t a, b, c; fmpz_poly_q_init(a); fmpz_poly_q_init(b); fmpz_poly_q_init(c); fmpz_poly_q_randtest(a, state, n_randint(state, 50), 50, n_randint(state, 50), 50); fmpz_poly_q_randtest(b, state, n_randint(state, 50), 50, n_randint(state, 50), 50); fmpz_poly_q_set(c, a); fmpz_poly_q_submul(c, a, b); fmpz_poly_q_submul(a, a, b); result = fmpz_poly_q_equal(a, c) && fmpz_poly_q_is_canonical(a); if (!result) { printf("FAIL:\n"); fmpz_poly_q_print(a), printf("\n\n"); fmpz_poly_q_print(b), printf("\n\n"); fmpz_poly_q_print(c), printf("\n\n"); abort(); } fmpz_poly_q_clear(a); fmpz_poly_q_clear(b); fmpz_poly_q_clear(c); } /* Check aliasing of b and c */ for (i = 0; i < 100; i++) { fmpz_poly_q_t a, b, c; fmpz_poly_q_init(a); fmpz_poly_q_init(b); fmpz_poly_q_init(c); fmpz_poly_q_randtest(a, state, n_randint(state, 50), 50, n_randint(state, 50), 50); fmpz_poly_q_randtest(b, state, n_randint(state, 50), 50, n_randint(state, 50), 50); fmpz_poly_q_set(c, b); fmpz_poly_q_submul(c, a, b); fmpz_poly_q_submul(b, a, b); result = fmpz_poly_q_equal(b, c); if (!result) { printf("FAIL:\n"); fmpz_poly_q_print(a), printf("\n\n"); fmpz_poly_q_print(b), printf("\n\n"); fmpz_poly_q_print(c), printf("\n\n"); abort(); } fmpz_poly_q_clear(a); fmpz_poly_q_clear(b); fmpz_poly_q_clear(c); } flint_randclear(state); _fmpz_cleanup(); printf("PASS\n"); return EXIT_SUCCESS; }
int main(void) { int i, result; FLINT_TEST_INIT(state); flint_printf("derivative... "); fflush(stdout); /* Check aliasing */ for (i = 0; i < 100; i++) { fmpz_poly_q_t a, b; fmpz_poly_q_init(a); fmpz_poly_q_init(b); fmpz_poly_q_randtest(a, state, n_randint(state, 50), 50, n_randint(state, 50), 50); fmpz_poly_q_derivative(b, a); fmpz_poly_q_derivative(a, a); result = fmpz_poly_q_equal(a, b); if (!result) { flint_printf("FAIL:\n"); fmpz_poly_q_print(a), flint_printf("\n\n"); fmpz_poly_q_print(b), flint_printf("\n\n"); abort(); } fmpz_poly_q_clear(a); fmpz_poly_q_clear(b); } /* Check constants have derivative zero */ for (i = 0; i < 100; i++) { fmpz_poly_q_t a, b; fmpz_poly_q_init(a); fmpz_poly_q_init(b); fmpz_poly_q_set_si(a, z_randtest(state)); fmpz_poly_q_derivative(b, a); result = fmpz_poly_q_is_zero(b); if (!result) { flint_printf("FAIL:\n"); fmpz_poly_q_print(a), flint_printf("\n\n"); fmpz_poly_q_print(b), flint_printf("\n\n"); abort(); } fmpz_poly_q_clear(a); fmpz_poly_q_clear(b); } /* Check (f g)' = f' g + f g' */ for (i = 0; i < 100; i++) { fmpz_poly_q_t a, b, c, d, lhs, rhs; fmpz_poly_q_init(a); fmpz_poly_q_init(b); fmpz_poly_q_init(c); fmpz_poly_q_init(d); fmpz_poly_q_init(lhs); fmpz_poly_q_init(rhs); fmpz_poly_q_randtest(a, state, n_randint(state, 20), 20, n_randint(state, 20), 20); fmpz_poly_q_randtest(b, state, n_randint(state, 20), 20, n_randint(state, 20), 20); fmpz_poly_q_mul(lhs, a, b); fmpz_poly_q_derivative(lhs, lhs); fmpz_poly_q_derivative(c, a); fmpz_poly_q_derivative(d, b); fmpz_poly_q_mul(c, c, b); fmpz_poly_q_mul(d, a, d); fmpz_poly_q_add(rhs, c, d); result = fmpz_poly_q_equal(lhs, rhs) && fmpz_poly_q_is_canonical(lhs) && fmpz_poly_q_is_canonical(rhs); if (!result) { flint_printf("FAIL:\n"); fmpz_poly_q_print(a), flint_printf("\n\n"); fmpz_poly_q_print(b), flint_printf("\n\n"); fmpz_poly_q_print(lhs), flint_printf("\n\n"); fmpz_poly_q_print(rhs), flint_printf("\n\n"); abort(); } fmpz_poly_q_clear(a); fmpz_poly_q_clear(b); fmpz_poly_q_clear(c); fmpz_poly_q_clear(d); fmpz_poly_q_clear(lhs); fmpz_poly_q_clear(rhs); } FLINT_TEST_CLEANUP(state); flint_printf("PASS\n"); return EXIT_SUCCESS; }
int main(void) { int i, result; flint_rand_t state; printf("div... "); fflush(stdout); flint_randinit(state); /* Check aliasing of a and b */ for (i = 0; i < 100; i++) { fmpz_poly_q_t a, b, c; fmpz_poly_q_init(a); fmpz_poly_q_init(b); fmpz_poly_q_init(c); fmpz_poly_q_randtest(b, state, n_randint(state, 50), 50, n_randint(state, 50), 50); fmpz_poly_q_randtest_not_zero(c, state, n_randint(state, 50), 50, n_randint(state, 50), 50); fmpz_poly_q_div(a, b, c); fmpz_poly_q_div(b, b, c); result = fmpz_poly_q_equal(a, b); if (!result) { printf("FAIL:\n"); fmpz_poly_q_print(a), printf("\n\n"); fmpz_poly_q_print(b), printf("\n\n"); abort(); } fmpz_poly_q_clear(a); fmpz_poly_q_clear(b); fmpz_poly_q_clear(c); } /* Check aliasing of a and c */ for (i = 0; i < 100; i++) { fmpz_poly_q_t a, b, c; fmpz_poly_q_init(a); fmpz_poly_q_init(b); fmpz_poly_q_init(c); fmpz_poly_q_randtest(b, state, n_randint(state, 50), 50, n_randint(state, 50), 50); fmpz_poly_q_randtest_not_zero(c, state, n_randint(state, 50), 50, n_randint(state, 50), 50); fmpz_poly_q_div(a, b, c); fmpz_poly_q_div(c, b, c); result = (fmpz_poly_q_equal(a, c)); if (!result) { printf("FAIL:\n"); fmpz_poly_q_print(a), printf("\n\n"); fmpz_poly_q_print(c), printf("\n\n"); abort(); } fmpz_poly_q_clear(a); fmpz_poly_q_clear(b); fmpz_poly_q_clear(c); } /* Check (c/b)+(d/b) = (c+d)/b */ for (i = 0; i < 100; i++) { fmpz_poly_q_t a1, a2, b, c, d; fmpz_poly_q_init(a1); fmpz_poly_q_init(a2); fmpz_poly_q_init(b); fmpz_poly_q_init(c); fmpz_poly_q_init(d); fmpz_poly_q_randtest_not_zero(b, state, n_randint(state, 50), 50, n_randint(state, 50), 50); fmpz_poly_q_randtest(c, state, n_randint(state, 50), 50, n_randint(state, 50), 50); fmpz_poly_q_randtest(d, state, n_randint(state, 50), 50, n_randint(state, 50), 50); fmpz_poly_q_div(a1, c, b); fmpz_poly_q_div(a2, d, b); fmpz_poly_q_add(a1, a1, a2); fmpz_poly_q_add(c, c, d); fmpz_poly_q_div(a2, c, b); result = fmpz_poly_q_equal(a1, a2) && fmpz_poly_q_is_canonical(a1); if (!result) { printf("FAIL:\n"); fmpz_poly_q_print(a1), printf("\n\n"); fmpz_poly_q_print(a2), printf("\n\n"); abort(); } fmpz_poly_q_clear(a1); fmpz_poly_q_clear(a2); fmpz_poly_q_clear(b); fmpz_poly_q_clear(c); fmpz_poly_q_clear(d); } flint_randclear(state); _fmpz_cleanup(); printf("PASS\n"); return EXIT_SUCCESS; }