erlang: list comprehensions (+12 tests)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Has been cancelled
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Has been cancelled
This commit is contained in:
@@ -902,6 +902,41 @@
|
||||
(nm (if (er-atom? reason) reason (nth (get reason :elements) 0)))))
|
||||
"badarg")
|
||||
|
||||
;; ── list comprehensions ───────────────────────────────────────
|
||||
(er-eval-test "lc map double"
|
||||
(ev "hd([X * 2 || X <- [1, 2, 3]])") 2)
|
||||
(er-eval-test "lc map sum"
|
||||
(ev "lists:foldl(fun (X, Acc) -> X + Acc end, 0, [X * 2 || X <- [1, 2, 3]])")
|
||||
12)
|
||||
(er-eval-test "lc length"
|
||||
(ev "length([X || X <- [1, 2, 3, 4, 5]])") 5)
|
||||
(er-eval-test "lc filter sum"
|
||||
(ev "lists:foldl(fun (X, Acc) -> X + Acc end, 0, [X || X <- [1, 2, 3, 4, 5], X rem 2 =:= 0])")
|
||||
6)
|
||||
(er-eval-test "lc filter only"
|
||||
(ev "length([X || X <- [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], X > 5])")
|
||||
5)
|
||||
(er-eval-test "lc empty source"
|
||||
(get (ev "[X || X <- []]") :tag) "nil")
|
||||
(er-eval-test "lc all filtered"
|
||||
(get (ev "[X || X <- [1, 2, 3], X > 100]") :tag) "nil")
|
||||
(er-eval-test "lc cartesian length"
|
||||
(ev "length([{X, Y} || X <- [1, 2, 3], Y <- [a, b]])")
|
||||
6)
|
||||
(er-eval-test "lc pattern match"
|
||||
(ev "lists:foldl(fun (X, Acc) -> X + Acc end, 0, [V || {ok, V} <- [{ok, 1}, {error, x}, {ok, 2}, {ok, 3}]])")
|
||||
6)
|
||||
(er-eval-test "lc nested generators"
|
||||
(ev "length([{X, Y} || X <- [1, 2, 3], Y <- [10, 20, 30], X + Y > 12])")
|
||||
7)
|
||||
(er-eval-test "lc squares"
|
||||
(ev "lists:foldl(fun (X, Acc) -> X + Acc end, 0, [X*X || X <- [1, 2, 3, 4, 5]])")
|
||||
55)
|
||||
;; First {ok, X} tuple: head of [{ok,a}, {ok,b}] is {ok, a}.
|
||||
(er-eval-test "lc tuple capture"
|
||||
(nm (nth (get (get (ev "[{ok, X} || X <- [a, b]]") :head) :elements) 0))
|
||||
"ok")
|
||||
|
||||
(define
|
||||
er-eval-test-summary
|
||||
(str "eval " er-eval-test-pass "/" er-eval-test-count))
|
||||
|
||||
Reference in New Issue
Block a user