97 lines
2.4 KiB
Nim
97 lines
2.4 KiB
Nim
import unittest
|
|
from mmath/rational import newRational, `+`, `-`, `*`, `/`, `$`, simplify, gcd, pow, mcm, `==`, `cmp`, `<`, `>`, `<=`, `>=`, abs
|
|
|
|
suite "Nim rational numbers":
|
|
|
|
test "gcd":
|
|
let a = 14
|
|
let b = 21
|
|
check 7 == gcd(a, b)
|
|
|
|
test "mcm":
|
|
let a = 14
|
|
let b = 21
|
|
check 42 == mcm(a, b)
|
|
|
|
test "pow":
|
|
check 625 == pow(5, 4)
|
|
|
|
test "==":
|
|
let r1 = newRational(1, 3)
|
|
let r2 = newRational(5, 15)
|
|
let r3 = newRational(35, 105)
|
|
check r1 == r2
|
|
check r1 == r3
|
|
check r2 == r3
|
|
|
|
test "+":
|
|
let r1 = newRational(1, 3)
|
|
let r2 = newRational(2, 3)
|
|
let r3 = r1 + r2
|
|
check r3 == newRational(1)
|
|
|
|
test "-":
|
|
let r1 = newRational(1, 3)
|
|
let r2 = newRational(2, 3)
|
|
let r3 = r1 - r2
|
|
check r3 == newRational(-1, 3)
|
|
|
|
test "*":
|
|
let r1 = newRational(1, 3)
|
|
let r2 = newRational(2, 3)
|
|
let r3 = r1 * r2
|
|
check r3 == newRational(2, 9)
|
|
|
|
test "/":
|
|
let r1 = newRational(1, 3)
|
|
let r2 = newRational(2, 3)
|
|
let r3 = r1 / r2
|
|
check r3 == newRational(1, 2)
|
|
|
|
test "simplify":
|
|
var r1 = newRational(65, 169)
|
|
check r1 == newRational(5, 13)
|
|
r1.simplify()
|
|
check r1.num == 5
|
|
check r1.den == 13
|
|
|
|
test "pow":
|
|
let r1 = newRational(65, 169)
|
|
let r2 = r1.pow(2)
|
|
check r2 == newRational(25, 169)
|
|
|
|
test "cmp":
|
|
let r1 = newRational(65, 169)
|
|
let r2 = newRational(5, 13)
|
|
let r3 = newRational(6, 13)
|
|
check r1 < r3
|
|
check r3 > r1
|
|
check r1 <= r3
|
|
check r1 <= r2
|
|
check r3 >= r1
|
|
check r2 >= r1
|
|
check r2 == r1
|
|
|
|
test "abs":
|
|
let r1 = newRational(-65, -169)
|
|
let r2 = newRational(65, -169)
|
|
check r1 == r1.abs()
|
|
check r1 == r2.abs()
|
|
check r1 != r2
|
|
|
|
test "i64":
|
|
let p1 = 32452867i64
|
|
let p2 = 49979687i64
|
|
let p3 = 15485867i64
|
|
let r1 = newRational(p3, p1 * p2)
|
|
let r2 = newRational(p2, p1 * p3)
|
|
var r3 = newRational(p2, p2 * p3)
|
|
check newRational(1i64, p3) == r3
|
|
r3.simplify()
|
|
check r3.num == 1i64
|
|
check r3.den == p3
|
|
expect(OverflowDefect):
|
|
discard r1 / r2
|
|
expect(OverflowDefect):
|
|
discard r1 + r2
|