diff options
Diffstat (limited to 'aoc2023/build/packages/adglent/src/showtime@tests@should.erl')
-rw-r--r-- | aoc2023/build/packages/adglent/src/showtime@tests@should.erl | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/aoc2023/build/packages/adglent/src/showtime@tests@should.erl b/aoc2023/build/packages/adglent/src/showtime@tests@should.erl new file mode 100644 index 0000000..29906b4 --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime@tests@should.erl @@ -0,0 +1,143 @@ +-module(showtime@tests@should). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([evaluate/1, equal/2, equal_meta/3, not_equal/2, not_equal_meta/3, be_ok/1, be_ok_meta/2, be_error/1, be_error_meta/2, fail/0, fail_meta/1, be_true/1, be_true_meta/2, be_false/1, be_false_meta/2]). +-export_type([assertion/2]). + +-type assertion(MXP, MXQ) :: {eq, + MXP, + MXP, + gleam@option:option(showtime@tests@meta:meta())} | + {not_eq, MXP, MXP, gleam@option:option(showtime@tests@meta:meta())} | + {is_ok, + {ok, MXP} | {error, MXQ}, + gleam@option:option(showtime@tests@meta:meta())} | + {is_error, + {ok, MXP} | {error, MXQ}, + gleam@option:option(showtime@tests@meta:meta())} | + {fail, gleam@option:option(showtime@tests@meta:meta())}. + +-spec evaluate(assertion(any(), any())) -> nil. +evaluate(Assertion) -> + case Assertion of + {eq, A, B, _} -> + case A =:= B of + true -> + nil; + + false -> + showtime_ffi:gleam_error({error, Assertion}) + end; + + {not_eq, A@1, B@1, _} -> + case A@1 /= B@1 of + true -> + nil; + + false -> + showtime_ffi:gleam_error({error, Assertion}) + end; + + {is_ok, A@2, _} -> + case A@2 of + {ok, _} -> + nil; + + {error, _} -> + showtime_ffi:gleam_error({error, Assertion}) + end; + + {is_error, A@3, _} -> + case A@3 of + {error, _} -> + nil; + + {ok, _} -> + showtime_ffi:gleam_error({error, Assertion}) + end; + + {fail, _} -> + showtime_ffi:gleam_error({error, Assertion}) + end. + +-spec equal(MXR, MXR) -> nil. +equal(A, B) -> + evaluate({eq, A, B, none}). + +-spec equal_meta(MXT, MXT, showtime@tests@meta:meta()) -> nil. +equal_meta(A, B, Meta) -> + evaluate({eq, A, B, {some, Meta}}). + +-spec not_equal(MXV, MXV) -> nil. +not_equal(A, B) -> + evaluate({not_eq, A, B, none}). + +-spec not_equal_meta(MXX, MXX, showtime@tests@meta:meta()) -> nil. +not_equal_meta(A, B, Meta) -> + evaluate({not_eq, A, B, {some, Meta}}). + +-spec be_ok({ok, MXZ} | {error, any()}) -> MXZ. +be_ok(A) -> + evaluate({is_ok, A, none}), + {ok, Value} = case A of + {ok, _} -> A; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"showtime/tests/should"/utf8>>, + function => <<"be_ok"/utf8>>, + line => 30}) + end, + Value. + +-spec be_ok_meta({ok, any()} | {error, any()}, showtime@tests@meta:meta()) -> nil. +be_ok_meta(A, Meta) -> + evaluate({is_ok, A, {some, Meta}}). + +-spec be_error({ok, any()} | {error, MYK}) -> MYK. +be_error(A) -> + evaluate({is_error, A, none}), + {error, Value} = case A of + {error, _} -> A; + _assert_fail -> + erlang:error(#{gleam_error => let_assert, + message => <<"Assertion pattern match failed"/utf8>>, + value => _assert_fail, + module => <<"showtime/tests/should"/utf8>>, + function => <<"be_error"/utf8>>, + line => 40}) + end, + Value. + +-spec be_error_meta({ok, any()} | {error, any()}, showtime@tests@meta:meta()) -> nil. +be_error_meta(A, Meta) -> + evaluate({is_error, A, {some, Meta}}). + +-spec fail() -> nil. +fail() -> + evaluate({fail, none}). + +-spec fail_meta(showtime@tests@meta:meta()) -> nil. +fail_meta(Meta) -> + evaluate({fail, {some, Meta}}). + +-spec be_true(boolean()) -> nil. +be_true(A) -> + _pipe = A, + equal(_pipe, true). + +-spec be_true_meta(boolean(), showtime@tests@meta:meta()) -> nil. +be_true_meta(A, Meta) -> + _pipe = A, + equal_meta(_pipe, true, Meta). + +-spec be_false(boolean()) -> nil. +be_false(A) -> + _pipe = A, + equal(_pipe, false). + +-spec be_false_meta(boolean(), showtime@tests@meta:meta()) -> nil. +be_false_meta(A, Meta) -> + _pipe = A, + equal_meta(_pipe, false, Meta). |