import ExUnit.Assertionsassert Process.alive?(self()) == ___information = Process.info(self())assert information[:status] == ___assert is_pid(self()) == ___value =
spawn(fn ->
receive do
end
end)assert is_pid(value) == ___All spawned functions are executed concurrently with the current process. You check back on slow_process and fast_process 50ms later. Let's see if they are still alive!
fast_process = spawn(fn -> :timer.sleep(10) end)
slow_process = spawn(fn -> :timer.sleep(1000) end)
:timer.sleep(50)assert Process.alive?(fast_process) == ___assert Process.alive?(slow_process) == ___send(self(), "hola!")receive do
msg -> assert msg == ___
endwait_forever = fn ->
receive do
end
end
pid = spawn(wait_forever)assert Process.alive?(pid) == ___send(self(), "hola!")
send(self(), "como se llama?")
first_message =
receive do
message -> message
end
second_message =
receive do
message -> message
endassert first_message == ___assert second_message == ___greeter = fn ->
receive do
{:hello, sender} -> send(sender, :how_are_you?)
end
end
pid = spawn(greeter)
send(pid, {:hello, self()})
# ms
timeout = 100
failure_message =
"Sorry, I didn't get the right message. Look at the message that is sent back very closely, and try again"assert_receive ___, timeout, failure_messagedef yelling_echo_loop do
receive do
{caller, value} ->
send(caller, String.upcase(value))
yelling_echo_loop()
end
end
pid = spawn_link(&yelling_echo_loop/0)
send(pid, {self(), "o"})assert_receive ___send(pid, {self(), "hai"})assert_receive ___def state(value) do
receive do
{caller, :get} ->
send(caller, value)
state(value)
{caller, :set, new_value} ->
state(new_value)
end
end
initial_state = "foo"
pid =
spawn(fn ->
state(initial_state)
end)
send(pid, {self(), :get})assert_receive ___send(pid, {self(), :set, "bar"})
send(pid, {self(), :get})assert_receive ___parent = self()
spawn(fn ->
receive do
after
5 -> send(parent, {:waited_too_long, "I am impatient"})
end
end)assert_receive ___parent = self()
pid =
spawn(fn ->
Process.flag(:trap_exit, true)
send(parent, :ready)
receive do
{:EXIT, _pid, reason} -> send(parent, {:exited, reason})
end
end)
receive do
:ready -> true
end
Process.exit(pid, :random_reason)assert_receive ___Process.flag(:trap_exit, true)
spawn_link(fn -> Process.exit(self(), :normal) end)assert_receive {:EXIT, _pid, ___}spawn_monitor(fn -> Process.exit(self(), :normal) end)assert_receive {:DOWN, _ref, :process, _pid, ___}