Packages

An Erlang library that provides matching and assertion functions for testing.

Current section

Files

Jump to
teal src teal_lists.erl
Raw

src/teal_lists.erl

-module(teal_lists).
-export([is_flat/1, assert_is_flat/1, assert_is_flat/2,
same_members/2, assert_same_members/2, assert_same_members/3,
includes_members/2, assert_includes_members/2, assert_includes_members/3,
assert_include/2, include/2,
order/2, assert_order/2, assert_order/3
]).
-spec is_flat(List :: list()) -> true.
is_flat(List) ->
lists:all(fun(Item) ->
case Item of
Item when is_list(Item) ->
false;
_ ->
true
end
end, List).
-spec assert_is_flat(List :: list()) -> true.
assert_is_flat(List) ->
teal:assert(true, is_flat(List), contains_sublists).
-spec assert_is_flat(List :: list(), Msg :: any()) -> true.
assert_is_flat(List, Msg) ->
teal:assert(true, is_flat(List), Msg).
-spec same_members(List1 :: list(), List2 :: list()) -> true.
same_members([], []) ->
true;
same_members([Elem|List1], List2) ->
case lists:member(Elem, List2) of
true ->
same_members(List1, lists:delete(Elem, List2));
false ->
false
end;
same_members(_, _) ->
false.
-spec assert_same_members(List1 :: list(), List2 :: list()) -> boolean().
assert_same_members(List1, List2) ->
teal:assert(true, same_members(List1, List2), not_same_members).
-spec assert_same_members(List1 :: list(), List2 :: list(), Msg :: any()) ->
boolean().
assert_same_members(List1, List2, Msg) ->
teal:assert(true, same_members(List1, List2), Msg).
-spec includes_members(List :: list(), Members :: list()) -> boolean().
includes_members(List, Members) ->
% Check if each of the members is in the list, and store the result
% in a list of results
MemberResults = lists:map(fun(Member) ->
lists:member(Member, List)
end, Members),
% Verify that all of the results are true
lists:all(fun(Result) ->
Result
end, MemberResults).
-spec assert_includes_members(List :: list(), Members :: list()) -> boolean().
assert_includes_members(List, Members) ->
teal:assert(true, includes_members(List, Members), members_missing).
-spec assert_includes_members(List :: list(), Members :: list(),
Msg :: atom()) -> boolean().
assert_includes_members(List, Members, Msg) ->
teal:assert(true, includes_members(List, Members), Msg).
-spec include(List :: list(), Item :: any()) -> true.
include(List, Item) ->
lists:member(Item, List).
-spec assert_include(List :: list(), Item :: any()) -> true.
assert_include(List, Item) ->
teal:assert(true, include(List, Item), member_missing).
-spec order(List :: list(), OrderFun :: fun()) -> boolean().
order(List, OrderFun) ->
List =:= lists:sort(OrderFun, List).
-spec assert_order(List :: list(), OrderFun :: fun()) -> true.
assert_order(List, OrderFun) ->
teal:assert(true, order(List, OrderFun), wrong_order).
-spec assert_order(List :: list(), OrderFun :: fun(), Msg :: any()) -> true.
assert_order(List, OrderFun, Msg) ->
teal:assert(true, order(List, OrderFun), Msg).