112 lines
2.5 KiB
Nim
112 lines
2.5 KiB
Nim
# To run these tests, simply execute `nimble test`.
|
|
|
|
import unittest
|
|
import op
|
|
|
|
suite "Basic tests":
|
|
proc divide(a, b: int): OP[float] =
|
|
if b == 0:
|
|
return fail "Cannot divide by zero!"
|
|
else:
|
|
return ok a / b
|
|
|
|
test "Check OK":
|
|
let test = ok 1
|
|
check test.isOk == true
|
|
|
|
test "Check fail":
|
|
let test = int.fail "no data here"
|
|
check test.isOk == false
|
|
|
|
test "Check proc results":
|
|
proc createValue: OP[string] =
|
|
let myString = "This is test code!"
|
|
ok myString
|
|
let r = createValue()
|
|
check r.isOk
|
|
check r.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 OK":
|
|
let r = divide(12, 6)
|
|
check r.isOk == true
|
|
check r.val == 2
|
|
|
|
test "Check implicit fail type":
|
|
let r = divide(1, 0)
|
|
check r.isOk == false
|
|
check r.error == "Cannot divide by zero!"
|
|
|
|
test "Check case":
|
|
let r = divide(1, 2)
|
|
case r.isOK:
|
|
of true:
|
|
check r.val == 0.5
|
|
of false:
|
|
echo r.error
|
|
|
|
test "Check hiding of Either":
|
|
let r = divide(1, 2)
|
|
case r.isOK:
|
|
of true:
|
|
check r.val == 0.5
|
|
of false:
|
|
echo r.error
|
|
|
|
test "Expect invalid field":
|
|
let r = divide(1, 2)
|
|
expect FieldError:
|
|
echo r.error
|
|
|
|
test "Expect in case":
|
|
let r = divide(1, 2)
|
|
case r.isOK:
|
|
of true:
|
|
expect FieldError:
|
|
echo r.error
|
|
of false:
|
|
echo r.error
|
|
|
|
# These will not work. How could this be done?
|
|
# test "Expect access before check":
|
|
# let r = divide(1, 2)
|
|
# expect FieldError:
|
|
# echo r.val
|
|
|
|
# test "Expect invalid field after check":
|
|
# let r = divide(1, 2)
|
|
# if r.isOK:
|
|
# echo r.error |