Skip to content

Instantly share code, notes, and snippets.

@williammartin
Created February 15, 2023 14:14
Show Gist options
  • Save williammartin/9d87438cb4d4d0cb0ab79bb476160575 to your computer and use it in GitHub Desktop.
Save williammartin/9d87438cb4d4d0cb0ab79bb476160575 to your computer and use it in GitHub Desktop.
# 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