aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gen/src/list.erl17
-rw-r--r--gen/test/list_test.erl7
-rw-r--r--src/list.gleam10
-rw-r--r--test/list_test.gleam11
4 files changed, 43 insertions, 2 deletions
diff --git a/gen/src/list.erl b/gen/src/list.erl
index b606f22..9c26eba 100644
--- a/gen/src/list.erl
+++ b/gen/src/list.erl
@@ -1,7 +1,7 @@
-module(list).
-compile(no_auto_import).
--export([length/1, reverse/1, is_empty/1, contains/2, head/1, tail/1, filter/2, map/2, traverse/2, drop/2, take/2, new/0, append/2, flatten/1, fold/3, fold_right/3, find/2]).
+-export([length/1, reverse/1, is_empty/1, contains/2, head/1, tail/1, filter/2, map/2, traverse/2, drop/2, take/2, new/0, append/2, flatten/1, fold/3, fold_right/3, find/2, all/2]).
length(A) ->
erlang:length(A).
@@ -171,3 +171,18 @@ find(Haystack, F) ->
find(Rest, F)
end
end.
+
+all(List, F) ->
+ case List of
+ [] ->
+ true;
+
+ [X | Rest] ->
+ case F(X) of
+ true ->
+ all(Rest, F);
+
+ _ ->
+ false
+ end
+ end.
diff --git a/gen/test/list_test.erl b/gen/test/list_test.erl
index 2505a6e..adf4ea2 100644
--- a/gen/test/list_test.erl
+++ b/gen/test/list_test.erl
@@ -1,7 +1,7 @@
-module(list_test).
-compile(no_auto_import).
--export([length_test/0, reverse_test/0, is_empty_test/0, contains_test/0, head_test/0, tail_test/0, filter_test/0, map_test/0, traverse_test/0, drop_test/0, take_test/0, new_test/0, append_test/0, flatten_test/0, fold_test/0, fold_right_test/0, find_test/0]).
+-export([length_test/0, reverse_test/0, is_empty_test/0, contains_test/0, head_test/0, tail_test/0, filter_test/0, map_test/0, traverse_test/0, drop_test/0, take_test/0, new_test/0, append_test/0, flatten_test/0, fold_test/0, fold_right_test/0, find_test/0, all_test/0]).
length_test() ->
expect:equal(list:length([]), 0),
@@ -93,3 +93,8 @@ find_test() ->
expect:equal(list:find([1, 2, 3], F), {ok, 4}),
expect:equal(list:find([1, 3, 2], F), {ok, 4}),
expect:is_error(list:find([1, 3], F)).
+
+all_test() ->
+ expect:equal(list:all([1, 2, 3, 4, 5], fun(X) -> X > 0 end), true),
+ expect:equal(list:all([1, 2, 3, 4, 5], fun(X) -> X < 0 end), false),
+ expect:equal(list:all([], fun(_) -> false end), true).
diff --git a/src/list.gleam b/src/list.gleam
index 22da117..ccc674b 100644
--- a/src/list.gleam
+++ b/src/list.gleam
@@ -158,3 +158,13 @@ pub fn find(haystack, f) {
}
}
+pub fn all(list, f) {
+ case list {
+ | [] -> True
+ | [x | rest] ->
+ case f(x) {
+ | True -> all(rest, f)
+ | _ -> False
+ }
+ }
+}
diff --git a/test/list_test.gleam b/test/list_test.gleam
index c0a16ae..a24c7b8 100644
--- a/test/list_test.gleam
+++ b/test/list_test.gleam
@@ -162,3 +162,14 @@ pub fn find_test() {
|> list:find(_, f)
|> expect:is_error
}
+
+pub fn all_test() {
+ list:all([1,2,3,4,5], fn(x) { x > 0 })
+ |> expect:equal(_, True)
+
+ list:all([1,2,3,4,5], fn(x) { x < 0 })
+ |> expect:equal(_, False)
+
+ list:all([], fn(_) { False })
+ |> expect:equal(_, True)
+}