inline void addMultipleTo(DMatQQFlint& C, const DMatQQFlint& A, const DMatQQFlint& B) { DMatQQFlint D(C.ring(), A.numRows(), B.numColumns()); fmpq_mat_mul(D.fmpq_mat(), A.fmpq_mat(), B.fmpq_mat()); fmpq_mat_add(C.fmpq_mat(), C.fmpq_mat(), D.fmpq_mat()); }
inline void addMultipleTo(DMatQQ& C, const DMatQQ& A, const DMatQQ& B) { FlintQQMat A1(A); FlintQQMat B1(B); FlintQQMat C1(C); FlintQQMat result1(A.numRows(), B.numColumns()); FlintQQMat D1(A.numRows(), B.numColumns()); fmpq_mat_mul(D1.value(), A1.value(), B1.value()); fmpq_mat_add(C1.value(), C1.value(), D1.value()); C1.toDMat(C); }
int main(void) { int i, result; FLINT_TEST_INIT(state); flint_printf("scalar_div_fmpz...."); fflush(stdout); /* Aliasing */ for (i = 0; i < 100 * flint_test_multiplier(); i++) { fmpq_mat_t A, B; fmpz_t x; slong m, n, bits; m = n_randint(state, 10); n = n_randint(state, 10); bits = 1 + n_randint(state, 100); fmpq_mat_init(A, m, n); fmpq_mat_init(B, m, n); fmpz_init(x); fmpq_mat_randtest(B, state, bits); fmpz_randtest_not_zero(x, state, bits); fmpq_mat_scalar_div_fmpz(A, B, x); fmpq_mat_scalar_div_fmpz(B, B, x); result = fmpq_mat_equal(A, B); if (!result) { flint_printf("FAIL:\n"); flint_printf("A:\n"), fmpq_mat_print(A); flint_printf("B:\n"), fmpq_mat_print(B); abort(); } fmpq_mat_clear(A); fmpq_mat_clear(B); fmpz_clear(x); } /* (A + B) / x == A / x + B / x */ for (i = 0; i < 100 * flint_test_multiplier(); i++) { fmpq_mat_t A, B, C, D; fmpz_t x; slong m, n, bits; m = n_randint(state, 10); n = n_randint(state, 10); bits = 1 + n_randint(state, 100); fmpq_mat_init(A, m, n); fmpq_mat_init(B, m, n); fmpq_mat_init(C, m, n); fmpq_mat_init(D, m, n); fmpz_init(x); fmpq_mat_randtest(A, state, bits); fmpq_mat_randtest(B, state, bits); fmpz_randtest_not_zero(x, state, bits); fmpq_mat_scalar_div_fmpz(C, A, x); fmpq_mat_scalar_div_fmpz(D, B, x); fmpq_mat_add(D, C, D); fmpq_mat_add(C, A, B); fmpq_mat_scalar_div_fmpz(C, C, x); result = fmpq_mat_equal(C, D); if (!result) { flint_printf("FAIL:\n"); flint_printf("A:\n"), fmpq_mat_print(A); flint_printf("B:\n"), fmpq_mat_print(B); abort(); } fmpq_mat_clear(A); fmpq_mat_clear(B); fmpq_mat_clear(C); fmpq_mat_clear(D); fmpz_clear(x); } FLINT_TEST_CLEANUP(state); flint_printf("PASS\n"); return EXIT_SUCCESS; }