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_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("evaluate..."); fflush(stdout); flint_randinit(state); /* Check aliasing */ for (i = 0; i < 100; i++) { int ans1, ans2; mpq_t a, b; fmpz_t num, den; fmpz_poly_q_t f; mpq_init(a); mpq_init(b); fmpz_init(num); fmpz_init(den); fmpz_poly_q_init(f); fmpz_poly_q_randtest(f, state, n_randint(state, 10), 10, n_randint(state, 10), 10); fmpz_randtest(num, state, 50); fmpz_randtest_not_zero(den, state, 50); fmpz_get_mpz(mpq_numref(a), num); fmpz_get_mpz(mpq_denref(a), den); mpq_canonicalize(a); ans1 = fmpz_poly_q_evaluate(b, f, a); ans2 = fmpz_poly_q_evaluate(a, f, a); result = (ans1 == ans2) && mpq_equal(a, b); if (!result) { printf("FAIL:\n"); printf("f = "), fmpz_poly_q_print(f), printf("\n"); printf("num = "), fmpz_print(num), printf("\n"); printf("den = "), fmpz_print(den), printf("\n"); gmp_printf("a = %Qd\n", a); gmp_printf("b = %Qd\n", b); printf("ans1 = %d\n", ans1); printf("ans2 = %d\n", ans2); abort(); } mpq_clear(a); mpq_clear(b); fmpz_clear(num); fmpz_clear(den); fmpz_poly_q_clear(f); } 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; }