altered ordering on the fetch and find functions, version patch bumped

Ordering altered to match existing list functions, Version patch
bumped because because API is not yet final

Signed-off-by: Eric Merritt <ericbmerritt@gmail.com>
This commit is contained in:
Martin J. Logan 2011-03-12 22:10:12 -06:00 committed by Eric Merritt
parent b4981ff4b5
commit 3c9e60c5a2
2 changed files with 44 additions and 50 deletions

View file

@ -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,

View file

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