verify/math/fractions_unit_test.nim

This documentation is automatically generated by online-judge-tools/verification-helper

:heavy_check_mark: verify/math/fractions_unit_test.nim

Depends on

Code

# verification-helper: PROBLEM https://onlinejudge.u-aizu.ac.jp/problems/ITP1_1_A
echo "Hello World"
import sequtils, math, sets, algorithm
import cplib/math/fractions

var r = newSeq[Fraction[int]](0)
for i in -3..3:
    for j in -3..3:
        if i == 0 or j == 0: continue
        r.add(initFraction(i, j))
for i in 1..2:
    r.add(initFraction(0, i))
    r.add(initFraction(0, -i))
for i in 1..2:
    r.add(initFraction(i, 0))
    r.add(initFraction(-i, 0))
var t = (-3..3).toSeq

template assert_op(op1, op2: untyped) =
    var x = initFraction(1, 0)
    for i in r:
        for j in r:
            if isNaN(x): x = initFraction(1, 0)
            var xi = x
            op2(x, i)
            assert op1(xi, i) == x or isNaN(x)
            assert (abs(op1(i, j).tofloat - op1(i.tofloat, j.tofloat)) <= 1e-10) or (op1(i.toFloat, j.toFloat).abs.classify == fcInf) or (op1(i.toFloat, j.toFloat).abs.classify == fcNan)
    x = initFraction(1, 0)
    for i in r:
        for j in t:
            if isNaN(x): x = initFraction(1, 0)
            var xi = x
            op2(x, i)
            assert op1(xi, i) == x or isNaN(x)
            assert (abs(op1(i, j).tofloat - op1(i.tofloat, j.tofloat)) <= 1e-10) or (op1(i.toFloat, j.toFloat).abs.classify == fcInf) or (op1(i.toFloat, j.toFloat).abs.classify == fcNan)
    for i in t:
        for j in r:
            assert (abs(op1(i, j).tofloat - op1(i.tofloat, j.tofloat)) <= 1e-10) or (op1(i.toFloat, j.toFloat).abs.classify == fcInf) or (op1(i.toFloat, j.toFloat).abs.classify == fcNan)
assert_op(`+`, `+=`)
assert_op(`-`, `-=`)
assert_op(`*`, `*=`)
assert_op(`/`, `/=`)

proc assert_cmp() =
    proc eq(x, y: float): bool = (x == y) or (abs(x - y) < 1e-10)
    proc lt(x, y: float): bool = (not eq(x, y)) and (x < y)
    proc gt(x, y: float): bool = (not eq(x, y)) and (x > y)
    proc cmp(x, y: float): int = (if lt(x, y): -1 elif eq(x, y): 0 else: 1)
    for i in r:
        for j in r:
            assert lt(i.toFloat, j.toFloat) == (i < j)
            assert gt(i.toFloat, j.toFloat) == (i > j)
            assert eq(i.toFloat, j.toFloat) == (i == j)
            assert (not lt(i.toFloat, j.toFloat)) == (i >= j)
            assert (not gt(i.toFloat, j.toFloat)) == (i <= j)
            assert (not eq(i.toFloat, j.toFloat)) == (i != j)
            assert cmp(i.toFloat, j.toFloat) == cmp(i, j)
    for i in r:
        for j in t:
            assert lt(i.toFloat, j.toFloat) == (i < j)
            assert gt(i.toFloat, j.toFloat) == (i > j)
            assert eq(i.toFloat, j.toFloat) == (i == j)
            assert (not lt(i.toFloat, j.toFloat)) == (i >= j)
            assert (not gt(i.toFloat, j.toFloat)) == (i <= j)
            assert (not eq(i.toFloat, j.toFloat)) == (i != j)
            assert cmp(i.toFloat, j.toFloat) == cmp(i, j)
    for i in t:
        for j in r:
            assert lt(i.toFloat, j.toFloat) == (i < j)
            assert gt(i.toFloat, j.toFloat) == (i > j)
            assert eq(i.toFloat, j.toFloat) == (i == j)
            assert (not lt(i.toFloat, j.toFloat)) == (i >= j)
            assert (not gt(i.toFloat, j.toFloat)) == (i <= j)
            assert (not eq(i.toFloat, j.toFloat)) == (i != j)
            assert cmp(i.toFloat, j.toFloat) == cmp(i, j)
assert_cmp()

var st = initHashSet[Fraction[int]](0)
for _ in 0..1:
    for ri in r:
        st.incl(ri)
for ri in r:
    assert ri.inv == (1 / ri)
    assert ri.abs == (if ri < 0: -ri else: ri)
assert st.len == r.sorted.deduplicate(true).len
Traceback (most recent call last):
  File "/home/runner/.local/lib/python3.12/site-packages/onlinejudge_verify/documentation/build.py", line 71, in _render_source_code_stat
    bundled_code = language.bundle(stat.path, basedir=basedir, options={'include_paths': [basedir]}).decode()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.local/lib/python3.12/site-packages/onlinejudge_verify/languages/nim.py", line 86, in bundle
    raise NotImplementedError
NotImplementedError
Back to top page