erlang: -module/M:F cross-module calls (+10 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:
@@ -634,6 +634,71 @@
|
||||
(nm (ev "try exit(a) catch error:X -> e; throw:X -> t; exit:X -> x end"))
|
||||
"x")
|
||||
|
||||
;; ── modules: -module(M)., M:F/N cross-module calls ─────────────
|
||||
(er-eval-test "load module returns name"
|
||||
(nm (erlang-load-module "-module(m1). foo() -> 42."))
|
||||
"m1")
|
||||
|
||||
(er-eval-test "cross-module zero-arity"
|
||||
(do
|
||||
(erlang-load-module "-module(m2). val() -> 7.")
|
||||
(ev "m2:val()"))
|
||||
7)
|
||||
|
||||
(er-eval-test "cross-module n-ary"
|
||||
(do
|
||||
(erlang-load-module "-module(m3). add(X, Y) -> X + Y.")
|
||||
(ev "m3:add(3, 4)"))
|
||||
7)
|
||||
|
||||
(er-eval-test "module recursive fn"
|
||||
(do
|
||||
(erlang-load-module "-module(m4). fact(0) -> 1; fact(N) -> N * fact(N-1).")
|
||||
(ev "m4:fact(6)"))
|
||||
720)
|
||||
|
||||
(er-eval-test "module sibling calls"
|
||||
(do
|
||||
(erlang-load-module "-module(m5). a(X) -> b(X) + 1. b(X) -> X * 10.")
|
||||
(ev "m5:a(5)"))
|
||||
51)
|
||||
|
||||
(er-eval-test "module multi-arity"
|
||||
(do
|
||||
(erlang-load-module
|
||||
"-module(m6). f(X) -> X. f(X, Y) -> X + Y. f(X, Y, Z) -> X * Y + Z.")
|
||||
(ev "{m6:f(1), m6:f(2, 3), m6:f(2, 3, 4)}"))
|
||||
(er-mk-tuple (list 1 5 10)))
|
||||
|
||||
(er-eval-test "module pattern match clauses"
|
||||
(do
|
||||
(erlang-load-module
|
||||
"-module(m7). check(0) -> zero; check(N) when N > 0 -> pos; check(_) -> neg.")
|
||||
(nm (ev "m7:check(-3)")))
|
||||
"neg")
|
||||
|
||||
(er-eval-test "cross-module call within module"
|
||||
(do
|
||||
(erlang-load-module "-module(util1). dbl(X) -> X * 2.")
|
||||
(erlang-load-module "-module(util2). quad(X) -> util1:dbl(X) * 2.")
|
||||
(ev "util2:quad(5)"))
|
||||
20)
|
||||
|
||||
(er-eval-test "module undefined fn raises"
|
||||
(do
|
||||
(erlang-load-module "-module(m8). foo() -> 1.")
|
||||
(er-io-flush!)
|
||||
(ev "P = spawn(fun () -> m8:bar() end), receive after 0 -> ok end")
|
||||
(let ((reason (er-proc-field (er-mk-pid 1) :exit-reason)))
|
||||
(and (er-tuple? reason) (nm (nth (get reason :elements) 0)))))
|
||||
"undef")
|
||||
|
||||
(er-eval-test "module function used in spawn"
|
||||
(do
|
||||
(erlang-load-module "-module(m9). work(P) -> P ! done.")
|
||||
(ev "Me = self(), spawn(fun () -> m9:work(Me) end), receive done -> ok end"))
|
||||
(er-mk-atom "ok"))
|
||||
|
||||
(define
|
||||
er-eval-test-summary
|
||||
(str "eval " er-eval-test-pass "/" er-eval-test-count))
|
||||
|
||||
Reference in New Issue
Block a user