erlang: guard BIFs + call dispatch (+20 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:
@@ -174,6 +174,42 @@
|
||||
(ev "case {ok, 7} of {ok, X} -> X end + 1")
|
||||
8)
|
||||
|
||||
;; ── guard BIFs (is_*) ────────────────────────────────────────────
|
||||
(er-eval-test "is_integer 42" (nm (ev "is_integer(42)")) "true")
|
||||
(er-eval-test "is_integer ok" (nm (ev "is_integer(ok)")) "false")
|
||||
(er-eval-test "is_atom ok" (nm (ev "is_atom(ok)")) "true")
|
||||
(er-eval-test "is_atom int" (nm (ev "is_atom(42)")) "false")
|
||||
(er-eval-test "is_list cons" (nm (ev "is_list([1,2])")) "true")
|
||||
(er-eval-test "is_list nil" (nm (ev "is_list([])")) "true")
|
||||
(er-eval-test "is_list tuple" (nm (ev "is_list({1,2})")) "false")
|
||||
(er-eval-test "is_tuple tuple" (nm (ev "is_tuple({ok,1})")) "true")
|
||||
(er-eval-test "is_tuple list" (nm (ev "is_tuple([1])")) "false")
|
||||
(er-eval-test "is_number int" (nm (ev "is_number(42)")) "true")
|
||||
(er-eval-test "is_number atom" (nm (ev "is_number(foo)")) "false")
|
||||
(er-eval-test "is_boolean true" (nm (ev "is_boolean(true)")) "true")
|
||||
(er-eval-test "is_boolean false" (nm (ev "is_boolean(false)")) "true")
|
||||
(er-eval-test "is_boolean atom" (nm (ev "is_boolean(foo)")) "false")
|
||||
|
||||
;; ── guard BIFs wired into case / if ─────────────────────────────
|
||||
(er-eval-test "guard is_integer pick"
|
||||
(nm (ev "case 5 of N when is_integer(N) -> int; _ -> other end"))
|
||||
"int")
|
||||
(er-eval-test "guard is_integer reject"
|
||||
(nm (ev "case foo of N when is_integer(N) -> int; _ -> other end"))
|
||||
"other")
|
||||
(er-eval-test "guard is_atom"
|
||||
(nm (ev "case foo of X when is_atom(X) -> atom_yes; _ -> no end"))
|
||||
"atom_yes")
|
||||
(er-eval-test "guard conjunction"
|
||||
(nm (ev "case 5 of N when is_integer(N), N > 0 -> pos; _ -> np end"))
|
||||
"pos")
|
||||
(er-eval-test "guard disjunction (if)"
|
||||
(nm (ev "X = foo, if is_integer(X); is_atom(X) -> yes; true -> no end"))
|
||||
"yes")
|
||||
(er-eval-test "guard arith"
|
||||
(nm (ev "case 3 of N when N * 2 > 5 -> big; _ -> small end"))
|
||||
"big")
|
||||
|
||||
(define
|
||||
er-eval-test-summary
|
||||
(str "eval " er-eval-test-pass "/" er-eval-test-count))
|
||||
|
||||
Reference in New Issue
Block a user