REQUIRE((integer_class(100) % integer_class(17)) == 15); // compound modulus operator j = -9; i = 7; j %= i; REQUIRE(j == -2); // move constructor and move assignment integer_class n = 5; integer_class m(std::move(n)); i = std::move(m); // construction of rational_class // r = rational_class(integer_class(2),3); fails! r = rational_class(integer_class(2), integer_class(3)); // truncated division j = integer_class(12) / integer_class(5); REQUIRE(j == 2); j = integer_class(-12) / integer_class(5); REQUIRE(j == -2); } TEST_CASE("powers and roots: integer_class", "[integer_class]") { integer_class res, i; // mp_pow_ui mp_pow_ui(res, -1, 0); REQUIRE(res == 1);
CWRAPPER_OUTPUT_TYPE complex_set_mpq(basic s, const mpq_t re, const mpq_t im) { CWRAPPER_BEGIN s->m = SymEngine::Complex::from_mpq(rational_class(re), rational_class(im)); CWRAPPER_END }
CWRAPPER_OUTPUT_TYPE rational_set_ui(basic s, unsigned long a, unsigned long b) { CWRAPPER_BEGIN s->m = SymEngine::Rational::from_mpq(rational_class(a, b)); CWRAPPER_END }
CWRAPPER_OUTPUT_TYPE rational_set_mpq(basic s, const mpq_t i) { CWRAPPER_BEGIN s->m = SymEngine::Rational::from_mpq(rational_class(i)); CWRAPPER_END }
REQUIRE(eq(*r1, *r2)); r1 = add(x, I); r2 = add(I, x); REQUIRE(eq(*r1, *r2)); r2 = add({I, x}); REQUIRE(eq(*r1, *r2)); r1 = mul(x, I); r2 = mul(mul(I, i2), x); r3 = mul(mul(I, i3), x); r2 = add(r1, r2); REQUIRE(eq(*r3, *r2)); r1 = real_double(0.1); r2 = Rational::from_mpq(rational_class(1, 2)); r3 = add(add(add(r1, r2), integer(1)), real_double(0.2)); REQUIRE(is_a<RealDouble>(*r3)); REQUIRE(std::abs(rcp_static_cast<const RealDouble>(r3)->i - 1.8) < 1e-12); r3 = add({r1, r2, integer(1), real_double(0.2)}); REQUIRE(std::abs(rcp_static_cast<const RealDouble>(r3)->i - 1.8) < 1e-12); r1 = complex_double(std::complex<double>(0.1, 0.2)); r2 = Complex::from_two_nums(*Rational::from_mpq(rational_class(1, 2)), *Rational::from_mpq(rational_class(7, 5))); r3 = add(add(add(r1, r2), integer(1)), real_double(0.4)); REQUIRE(is_a<ComplexDouble>(*r3)); REQUIRE(std::abs(rcp_static_cast<const ComplexDouble>(r3)->i.real() - 2.0) < 1e-12); REQUIRE(std::abs(rcp_static_cast<const ComplexDouble>(r3)->i.imag() - 1.6) < 1e-12);