defmodule Scopes.CSysTest do use ExUnit.Case, async: true @moduletag timeout: 5000 alias Scopes.CSys alias Scopes.CSys.Environ alias Scopes.CSys.Program alias Scopes.Shape def receive_select(head) do assert_receive {^head, info} {head, info} end def receive_data(head \\ [:csys, :data]) do Shape.data(receive_select(head)) end def neg_only(msg) do val = Shape.data(msg)[:value] if val && val < 0 do msg end end describe "basic:" do test "minimal-neural-net" do zero = Environ.setup(Program.prepare_basic()) CSys.send_value(zero, "Hello Zero!") assert "Hello Zero!" = receive_data().value #CSys.send_message(zero, [:csys, :create, :pred]) CSys.send_message(zero, [:csys, :create, :pred], %{op: &neg_only/1}) assert_receive {:created, new1} CSys.send_message(new1, [:csys, :create, :succ]) assert_receive {:created, _new2} CSys.send_value(new1, "Hello New1!") assert "Hello New1!" = receive_data().value #assert "Hello New1!" = receive_data().value Process.sleep(50) # Actor.stop(zero) refute_received msg, "unhandled message(s): #{inspect(msg)}" end end end