Files
op/tests/tests.nim
2020-07-02 19:59:01 +02:00

92 lines
2.2 KiB
Nim

# To run these tests, simply execute `nimble test`.
import unittest
import op
suite "Basic tests":
test "Check OK":
let test = ok 1
check test.isOk == true
test "Check fail":
let test = fail(void, "no data here")
check test.isOk == false
test "Check proc results":
proc createValue: OP[string] =
let myString = "This is test code!"
ok myString
let data = createValue()
check data.isOk
check data.val == "This is test code!"
test "Check failing result proc":
proc someProc(): OP[int] =
result.fail "Not implemented!"
let data = someProc()
assert data.isOk == false
assert data.error == "Not implemented!"
test "Check failing typedesc proc ":
proc someProc(): OP[int] =
op.fail(int, "Not implemented!")
let data = someProc()
assert data.isOk == false
assert data.error == "Not implemented!"
test "Check failing type param proc ":
proc someProc(): OP[int] =
fail(int, "Not implemented!")
let data = someProc()
assert data.isOk == false
assert data.error == "Not implemented!"
test "Check changing result":
proc checker(): OP[int] =
result = ok 42
# something happend here
result = result.fail "data got corrupted"
let data = checker()
check data.isOk == false
check data.error == "data got corrupted"
test "Check divider proc":
proc divide(a, b: int): OP[float] =
if b == 0:
return fail(float, "Cannot divide by zero!")
else:
return ok a / b
let
a = 42
b = 0
let r = divide(a, b)
check r.isOk == false
check r.error == "Cannot divide by zero!"
test "Check implicit fail type":
proc divide(a, b: int): OP[float] =
if b == 0:
return fail "Cannot divide by zero!"
else:
return ok a / b
let r = divide(1, 0)
check r.isOk == false
check r.error == "Cannot divide by zero!"
test "Check type of impolicit fail":
proc divide(a, b: int): OP[float] =
if b == 0:
return fail "Cannot divide by zero!"
else:
return ok a / b
let r = divide(1, 0)
check r.isOk == false
check r.error == "Cannot divide by zero!"