added unit tests for bigint
This commit is contained in:
63
tests/test_bigint.nim
Normal file
63
tests/test_bigint.nim
Normal file
@@ -0,0 +1,63 @@
|
||||
import mmath/bigint
|
||||
import unittest
|
||||
import random
|
||||
from strutils import parseBiggestUInt
|
||||
|
||||
suite "Nim arbitrary precision integers (powered by GMP)":
|
||||
|
||||
let str = "2347822319"
|
||||
test "parse " & str:
|
||||
let str = "2347822319"
|
||||
let bi = BigInt.fromString(str, 10)
|
||||
let ul : BiggestUInt = parseBiggestUInt(str)
|
||||
check newBigInt(ul.int64) == bi
|
||||
|
||||
var rng = initRand(101325)
|
||||
|
||||
for i in 0..5:
|
||||
let n1 = rng.rand(-1000..1000).int64
|
||||
let n2 = rng.rand(-1000..1000).int64
|
||||
let bi1 = BigInt.of(n1)
|
||||
let bi2 = BigInt.of(n2)
|
||||
|
||||
test $n1 & " + " & $n2:
|
||||
check BigInt.of(n1 + n2) == bi1 + bi2
|
||||
|
||||
test $n1 & " - " & $n2:
|
||||
check BigInt.of(n1 - n2) == bi1 - bi2
|
||||
|
||||
test $n1 & " * " & $n2:
|
||||
check BigInt.of(n1 * n2) == bi1 * bi2
|
||||
|
||||
test $n1 & " div " & $n2:
|
||||
check BigInt.of(n1 div n2) == bi1 div bi2
|
||||
|
||||
test $n1 & " mod " & $n2:
|
||||
check BigInt.of(n1 mod n2) == bi1 mod bi2
|
||||
|
||||
test $n1 & " pow " & $3:
|
||||
check BigInt.of(n1 * n1 * n1) == pow(bi1, 3)
|
||||
|
||||
test "abs(" & $n1 & ")":
|
||||
check BigInt.of(n1.abs()) == bi1.abs()
|
||||
|
||||
test "abs(" & $n2 & ")":
|
||||
check BigInt.of(n2.abs()) == bi2.abs()
|
||||
|
||||
test $n1 & " cmp " & $n2:
|
||||
check cmp(n1, n2) == cmp(bi1, bi2)
|
||||
|
||||
test $n1 & " < " & $n2:
|
||||
check (n1 < n2) == (bi1 < bi2)
|
||||
|
||||
test $n1 & " > " & $n2:
|
||||
check (n1 > n2) == (bi1 > bi2)
|
||||
|
||||
test $n1 & " == " & $n1:
|
||||
check bi1 == bi1
|
||||
|
||||
test $n2 & " == " & $n2:
|
||||
check bi2 == bi2
|
||||
|
||||
test $n1 & " != " & $n2:
|
||||
check bi1 != bi2
|
Reference in New Issue
Block a user