Packages

Advent of code helper - automating setup of tests, solution template and problem input

Current section

Files

Jump to
adglent src showtime@tests@should.erl
Raw

src/showtime@tests@should.erl

-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).