Created
February 15, 2023 14:14
-
-
Save williammartin/9d87438cb4d4d0cb0ab79bb476160575 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# typed: true | |
require "minitest/autorun" | |
require_relative "../lib/result" | |
class TestResult < Minitest::Test | |
def test_unwrap_success_returns_value | |
r = Result.ok("val") | |
assert_equal r.unwrap, "val" | |
end | |
def test_unwrap_error_raises | |
r = Result.err("oh no") | |
err = assert_raises(Result::UnwrapError) { | |
r.unwrap | |
} | |
assert_equal err.message, "called `Result::unwrap` on a Failure containing: 'oh no'" | |
end | |
def test_map_success_maps_value | |
r = Result.ok(2).map { |v| v * 2 } | |
assert_equal r.unwrap, 4 | |
end | |
def test_map_failure_does_not_map_and_retains_error | |
r = Result.err("oh no").map { |v| raise "unexpected mapping" } | |
err = assert_raises(Result::UnwrapError) { | |
r.unwrap | |
} | |
assert_equal err.message, "called `Result::unwrap` on a Failure containing: 'oh no'" | |
end | |
def test_and_then_success | |
r = Result.ok("str-to-len").and_then { |v| Result.ok(v.length) } | |
assert_equal r.unwrap, 10 | |
end | |
def test_and_then_failure | |
r = Result.err("oh no").and_then { |v| raise "unexpected and_thenning" } | |
err = assert_raises(Result::UnwrapError) { | |
r.unwrap | |
} | |
assert_equal err.message, "called `Result::unwrap` on a Failure containing: 'oh no'" | |
end | |
def test_map_err_success_does_not_map_and_retains_error | |
r = Result.ok(2).map_err { |v| raise "unexpected mapping" } | |
assert_equal r.unwrap, 2 | |
end | |
def test_map_err_failure_maps_err | |
r = Result.err(2).map_err { |v| v * 2 } | |
assert_equal r.unwrap, 2 | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment