From 08688355f5d2645d581b61c10c4c751d40e99c9e Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Sun, 19 Apr 2026 12:04:27 +0200 Subject: [PATCH] separate dummy hello and real actor tests; actor (and test) improvements --- lib/actor.ex | 25 ++++++++++++++----------- lib/{xplore.ex => hello.ex} | 6 +++--- test/actor_test.exs | 19 +++++++++++++++++++ test/hello_test.exs | 9 +++++++++ test/xplore_test.exs | 24 ------------------------ 5 files changed, 45 insertions(+), 38 deletions(-) rename lib/{xplore.ex => hello.ex} (61%) create mode 100644 test/actor_test.exs create mode 100644 test/hello_test.exs delete mode 100644 test/xplore_test.exs diff --git a/lib/actor.ex b/lib/actor.ex index f284cde..38d6829 100644 --- a/lib/actor.ex +++ b/lib/actor.ex @@ -1,12 +1,15 @@ defmodule Xplore.Actor do - def loop(bhv) do - receive do - {:message, msg} -> - bhv.(msg) - loop(bhv) - {:system, :become, bhv_n} -> loop(bhv_n) - {:system, :quit} -> :quit + defp loop(bhv) do + receive do msg -> + #IO.puts("receive: #{inspect msg}") + case msg do + {:message, msg} -> + bhv.(msg) + loop(bhv) + {:become, bhv_n} -> loop(bhv_n) + {:quit} -> nil + end end end @@ -14,15 +17,15 @@ defmodule Xplore.Actor do spawn_link(fn -> loop(bhv) end) end - def send_message(ac, msg) do - send(ac, {:message, msg}) + def send(ac, msg) do + Kernel.send(ac, {:message, msg}) end def become(ac, bhv) do - send(ac, {:system, :become, bhv}) + Kernel.send(ac, {:become, bhv}) end def stop(ac) do - send(ac, {:system, :quit}) + Kernel.send(ac, {:quit}) end end diff --git a/lib/xplore.ex b/lib/hello.ex similarity index 61% rename from lib/xplore.ex rename to lib/hello.ex index dc54775..2a09d35 100644 --- a/lib/xplore.ex +++ b/lib/hello.ex @@ -1,6 +1,6 @@ -defmodule Xplore do +defmodule Hello do @moduledoc """ - Documentation for `Xplore`. + Documentation for `Hello`. """ @doc """ @@ -8,7 +8,7 @@ defmodule Xplore do ## Examples - iex> Xplore.hello() + iex> Hello.hello() :world """ diff --git a/test/actor_test.exs b/test/actor_test.exs new file mode 100644 index 0000000..0208cfb --- /dev/null +++ b/test/actor_test.exs @@ -0,0 +1,19 @@ +defmodule ActorTest do + use ExUnit.Case, async: true + + alias Xplore.Actor + + describe "simple-actors:" do + test "basic-life-cycle" do + this = self() + ac = Actor.create(fn msg -> send(this, msg) end) + Actor.send(ac, "Hello Actor!") + Actor.become(ac, fn _msg -> send(this, "Goodbye") end) + Actor.send(ac, "Hello Actor!") + Actor.stop(ac) + assert_receive "Hello Actor!" + assert_receive "Goodbye" + end + end +end + diff --git a/test/hello_test.exs b/test/hello_test.exs new file mode 100644 index 0000000..e7f9326 --- /dev/null +++ b/test/hello_test.exs @@ -0,0 +1,9 @@ +defmodule HelloTest do + use ExUnit.Case + doctest Hello + + test "greets the world" do + assert Hello.hello() == :world + end +end + diff --git a/test/xplore_test.exs b/test/xplore_test.exs deleted file mode 100644 index 8c472c4..0000000 --- a/test/xplore_test.exs +++ /dev/null @@ -1,24 +0,0 @@ -defmodule XploreTest do - use ExUnit.Case - doctest Xplore - - alias Xplore.Actor - - test "greets the world" do - assert Xplore.hello() == :world - end - - describe "some simple actors" do - test "basic actor live cycle" do - this = self() - ac = Actor.create(fn msg -> send(this, msg) end) - Actor.send_message(ac, "Hello Actor!") - Actor.become(ac, fn _msg -> send(this, "Goodbye") end) - Actor.send_message(ac, "Hello Actor!") - Actor.stop(ac) - assert_receive "Hello Actor!" - assert_receive "Goodbye" - end - end -end -