     # NOTE: this does not catch the exception, presumably because
     # the main process is killed itself due to spawn_link
     assert_raise RuntimeError, "I'm failing!", fn() ->
-      spawn_link(TheChild, :ping, [%{parent_pid: self, call: 1, raise: true}])
+      spawn_link(TheChild, :ping, [%{parent_pid: self(), call: 1, raise: true}])
     end
   end
   
   test "WorkingWithMultipleProcesses-5" do
     # spawn_monitor won't crash the main process, and will notify a :DOWN message
-    spawn_monitor(TheChild, :ping, [%{parent_pid: self, call: 1, raise: true}])
+    spawn_monitor(TheChild, :ping, [%{parent_pid: self(), call: 1, raise: true}])
     output = TheParent.receive_loop
     assert 1 = Enum.count(output)
     {:DOWN, _, :process, _, _} = Enum.at(output, 0)

  end
  
  test "WorkingWithMultipleProcesses-3" do
    spawn_link(TheChild, :ping, [%{parent_pid: self, call: 1, raise: false}])
    # We are not waiting inside receive when the messages are sent,
    # yet they will arrive to the parent nonetheless.
    :timer.sleep(250)


  test "recursive receive" do
    pid = spawn(RecursiveAdder, :add, [100])
    send(pid, {self(), 10})
    send(pid, {self(), 10})
    send(pid, {self(), :done})
    receive do
      {:ok, new_sum} -> assert 110 == new_sum
    end
