diff --git a/ebin/erlware_commons.app b/ebin/erlware_commons.app index b3ad38d..506e2b1 100644 --- a/ebin/erlware_commons.app +++ b/ebin/erlware_commons.app @@ -1,7 +1,7 @@ %% -*- mode: Erlang; fill-column: 75; comment-column: 50; -*- {application, erlware_commons, [{description, "Additional standard library for Erlang"}, - {vsn, "0.1.0"}, + {vsn, "0.2.0"}, {modules, [ ec_lists, ec_string, diff --git a/src/ec_lists.erl b/src/ec_lists.erl index 1ad4713..6f76dcc 100644 --- a/src/ec_lists.erl +++ b/src/ec_lists.erl @@ -20,27 +20,24 @@ %% term()} and processing is aborted, if the function returns false, %% processing continues until the end of the list. If the end is found %% and the function never returns true the atom error is returned. --spec find([term()], fun()) -> {ok, term()} | error. -find([Head | Tail], Fun) - when is_function(Fun) -> +-spec find(fun(), list()) -> {ok, term()} | error. +find(Fun, [Head|Tail]) when is_function(Fun) -> case Fun(Head) of true -> {ok, Head}; false -> - find(Tail, Fun) + find(Fun, Tail) end; -find([], _Fun) -> +find(_Fun, []) -> error. %% @doc Fetch a value from the list. If the function returns true the %% value is returend. If processing reaches the end of the list and %% the function has never returned true an exception not_found is %% thrown. --spec fetch(list(), fun()) -> term(). -fetch(List, Fun) - when is_list(List), - is_function(Fun) -> - case find(List, Fun) of +-spec fetch(fun(), list()) -> term(). +fetch(Fun, List) when is_list(List), is_function(Fun) -> + case find(Fun, List) of {ok, Head} -> Head; error -> @@ -56,38 +53,38 @@ fetch(List, Fun) find1_test() -> TestData = [1, 2, 3, 4, 5, 6], - Result = find(TestData, - fun(5) -> + Result = find(fun(5) -> true; (_) -> false - end), + end, + TestData), ?assertMatch({ok, 5}, Result), - Result2 = find(TestData, - fun(37) -> + Result2 = find(fun(37) -> true; (_) -> false - end), + end, + TestData), ?assertMatch(error, Result2). find2_test() -> TestData = ["one", "two", "three", "four", "five", "six"], - Result = find(TestData, - fun("five") -> + Result = find(fun("five") -> true; (_) -> false - end), + end, + TestData), ?assertMatch({ok, "five"}, Result), - Result2 = find(TestData, - fun(super_duper) -> + Result2 = find(fun(super_duper) -> true; (_) -> false - end), + end, + TestData), ?assertMatch(error, Result2). @@ -95,84 +92,81 @@ find2_test() -> find3_test() -> TestData = [{"one", 1}, {"two", 2}, {"three", 3}, {"four", 5}, {"five", 5}, {"six", 6}], - Result = find(TestData, - fun({"one", 1}) -> + Result = find(fun({"one", 1}) -> true; (_) -> false - end), + end, + TestData), ?assertMatch({ok, {"one", 1}}, Result), - Result2 = find(TestData, - fun([fo, bar, baz]) -> + Result2 = find(fun([fo, bar, baz]) -> true; ({"onehundred", 100}) -> true; (_) -> false - end), + end, + TestData), ?assertMatch(error, Result2). fetch1_test() -> TestData = [1, 2, 3, 4, 5, 6], - Result = fetch(TestData, - fun(5) -> + Result = fetch(fun(5) -> true; (_) -> false - end), + end, + TestData), ?assertMatch(5, Result), ?assertThrow(not_found, - fetch(TestData, - fun(37) -> + fetch(fun(37) -> true; (_) -> false - end)). + end, + TestData)). fetch2_test() -> TestData = ["one", "two", "three", "four", "five", "six"], - Result = fetch(TestData, - fun("five") -> + Result = fetch(fun("five") -> true; (_) -> false - end), + end, + TestData), ?assertMatch("five", Result), ?assertThrow(not_found, - fetch(TestData, - fun(super_duper) -> + fetch(fun(super_duper) -> true; (_) -> false - end)). + end, + TestData)). fetch3_test() -> TestData = [{"one", 1}, {"two", 2}, {"three", 3}, {"four", 5}, {"five", 5}, {"six", 6}], - Result = fetch(TestData, - fun({"one", 1}) -> + Result = fetch(fun({"one", 1}) -> true; (_) -> false - end), + end, + TestData), ?assertMatch({"one", 1}, Result), ?assertThrow(not_found, - fetch(TestData, - fun([fo, bar, baz]) -> + fetch(fun([fo, bar, baz]) -> true; ({"onehundred", 100}) -> true; (_) -> false - end)). - - - + end, + TestData)). -endif.