erlang: register/whereis, Phase 5 complete (+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:
@@ -843,6 +843,65 @@
|
||||
(ev "Sup = supervisor:start_link(sup7, []), receive after 5 -> ok end, supervisor:stop(Sup)")))
|
||||
"ok")
|
||||
|
||||
;; ── register / whereis / registered ─────────────────────────────
|
||||
(er-eval-test "register returns true"
|
||||
(nm (ev "register(me, self())")) "true")
|
||||
|
||||
(er-eval-test "whereis registered self"
|
||||
(nm (ev "register(me, self()), Pid = whereis(me), if Pid =:= self() -> matched; true -> nope end"))
|
||||
"matched")
|
||||
|
||||
(er-eval-test "whereis undefined"
|
||||
(nm (ev "whereis(no_such)")) "undefined")
|
||||
|
||||
(er-eval-test "send via registered atom"
|
||||
(nm (ev "register(srv, self()), srv ! hello, receive M -> M end"))
|
||||
"hello")
|
||||
|
||||
(er-eval-test "send to spawned registered"
|
||||
(nm
|
||||
(ev "Me = self(), P = spawn(fun () -> receive {From, X} -> From ! {got, X} end end), register(child, P), child ! {Me, payload}, receive {got, V} -> V end"))
|
||||
"payload")
|
||||
|
||||
(er-eval-test "unregister returns true"
|
||||
(nm (ev "register(a, self()), unregister(a)")) "true")
|
||||
|
||||
(er-eval-test "unregister then whereis"
|
||||
(nm (ev "register(a, self()), unregister(a), whereis(a)"))
|
||||
"undefined")
|
||||
|
||||
(er-eval-test "registered/0 lists names"
|
||||
(ev "register(a, self()), register(b, self()), register(c, self()), length(registered())")
|
||||
3)
|
||||
|
||||
(er-eval-test "register dup raises"
|
||||
(do
|
||||
(ev "P = spawn(fun () -> register(d, self()), register(d, self()) end), receive after 0 -> ok end")
|
||||
(let ((reason (er-proc-field (er-mk-pid 1) :exit-reason)))
|
||||
(nm (if (er-atom? reason) reason (nth (get reason :elements) 0)))))
|
||||
"badarg")
|
||||
|
||||
(er-eval-test "unregister missing raises"
|
||||
(do
|
||||
(ev "P = spawn(fun () -> unregister(no_such) end), receive after 0 -> ok end")
|
||||
(let ((reason (er-proc-field (er-mk-pid 1) :exit-reason)))
|
||||
(nm (if (er-atom? reason) reason (nth (get reason :elements) 0)))))
|
||||
"badarg")
|
||||
|
||||
(er-eval-test "dead process auto-unregisters"
|
||||
;; Register a child while it's alive (still in receive). Send `die` so
|
||||
;; it exits. After scheduler drains, whereis should return undefined.
|
||||
(nm
|
||||
(ev "P = spawn(fun () -> receive die -> exit(killed) end end), register(was_alive, P), P ! die, receive after 5 -> ok end, whereis(was_alive)"))
|
||||
"undefined")
|
||||
|
||||
(er-eval-test "send to unregistered name raises"
|
||||
(do
|
||||
(ev "P = spawn(fun () -> no_such ! oops end), receive after 0 -> ok end")
|
||||
(let ((reason (er-proc-field (er-mk-pid 1) :exit-reason)))
|
||||
(nm (if (er-atom? reason) reason (nth (get reason :elements) 0)))))
|
||||
"badarg")
|
||||
|
||||
(define
|
||||
er-eval-test-summary
|
||||
(str "eval " er-eval-test-pass "/" er-eval-test-count))
|
||||
|
||||
Reference in New Issue
Block a user