assert(mpz(10) == mpz("10"))
assert(mpz(mpz(3)) == mpz("3"))
print(mpz(10) + mpz(3))
assert(mpz(10) + mpz(3) == mpz(13))
assert(mpz(10) + 2 == mpz(12))
assert(3 + mpz(15) == mpz(18))
assert(mpz(10) - mpz(3) == mpz(7))
assert(mpz(10) - 2 == mpz(8))
assert(3 - mpz(15) == -mpz(12))
assert(- mpz(15) == mpz("-15"))
assert(- mpz(15) == -mpz("15"))
assert(mpz(10) * mpz(3) == mpz(30))
assert(mpz(10) * 2 == mpz(20))
assert(3 * mpz(15) == mpz(45))
assert(mpz(3)^2 == mpz(9))
local a = -2
assert(not pcall(function() print(mpz(3)^a) end))
assert(mpz(3) < mpz(5))
assert(mpz(3) > mpz(1))
assert(mpq(3) == mpq("3"))
assert(mpq(3) == mpq(mpq(3)))
assert(mpq(3) == mpq(mpz(3)))
assert(mpq(0.5) == mpq(1)/2)
assert(mpq(0.4) ~= mpq(1)/2)
assert(mpq(10) + mpq(3) == mpq(13))
assert(mpq(10) + 2 == mpq(12))
assert(3 + mpq(15) == mpq(18))
assert(mpq(3) + mpz(15) == mpq(18))
assert(mpq(10) - mpq(3) == mpq(7))
assert(mpq(10) - 2 == mpq(8))
assert(3 - mpq(15) == -mpq(12))
assert(mpq(3) - mpz(15) == -mpq(12))
assert(mpq(10) * mpq(3) == mpq(30))
assert(mpq(10) * 2 == mpq(20))
assert(3 * mpq(15) == mpq(45))
assert(mpq(3) * mpz(15) == mpq(45))
assert(mpq(3)^2 == mpq(9))
print(mpq(0.5)^2)
assert(mpq(0.5)^2 == mpq(1)/4)
local a = -2
assert(not pcall(function() print(mpq(3)^a) end))
assert(mpq(10) / mpq(3) == mpq("10/3"))
assert(mpq(10) / 2 == mpq(5))
assert(3 / mpq(15) == mpq(1)/5)
assert(mpq(3) / mpz(15) == mpq("1/5"))
assert(mpq(3) < mpq(5))
assert(mpq(3) > mpq(1))