nerevelon5/option/option_test.lua
2025-03-22 01:18:53 +03:00

56 lines
945 B
Lua

--- Tests
local none = None
local none1 = None
local some = Some(42)
local some1 = Some('foo')
assert(none:is_none())
assert(none1 == none)
assert(some:is_some())
assert(some ~= some1)
assert(some:unwrap(43) == 42)
assert(some:unwrap() == 42)
assert(none:unwrap(43) == 43)
assert(some:try(
function(x)
return x + 1
end
) == 43)
assert(none:try(
function(x)
return x + 1
end
) == None)
assert(tostring(some) == "Some(42)")
assert(tostring(none) == "None")
--- Usage
local function safe_div(a, b)
if (b == 0) then return None end
return Some(a / b)
end
local res = safe_div(10, 2)
assert(res:is_some())
local res1 = safe_div(10, 0)
assert(res1:is_none())
local chain = safe_div(10, 2):try(
function(x)
return safe_div(x, 5)
end
)
assert(chain:unwrap(0) == 1)
local chain1 = safe_div(10, 0):try(
function(x)
return safe_div(x, 5)
end
)
assert(chain1:unwrap(0) == 0)