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 describe "basic:" do test "minimal-neural-net" do _env = Environ.setup(Program.prepare_basic(), Program.init_seq_b1()) zero = receive_data(~w(csys created)a).new CSys.send_value(zero, 0) assert 0 = receive_data().value one = receive_data(~w(csys created)a).new _two = receive_data(~w(csys created)a).new three = receive_data(~w(csys created)a).new Process.sleep(50) CSys.send_value(one, 1) assert receive_data().value == 1 #assert receive_data().value in [-1, 1] CSys.send_value(three, 3) assert receive_data().value in [2, 3] assert receive_data().value in [2, 3] refute_received msg, "unhandled message(s): #{inspect(msg)}" end end def init_recursive_1() do [ fn [zero] -> CSys.send_message(zero, ~w(csys connect)a, %{target: zero, op: Program.negate()}) CSys.send_message(zero, ~w(csys create succ)a) end ] end describe "recursive:" do test "zero + effector" do _env = Environ.setup(Program.prepare_basic(), init_recursive_1()) zero = receive_data(~w(csys created)a).new _eff = receive_data(~w(csys created)a).new Process.sleep(50) CSys.send_value(zero, 42) assert receive_data().value == 42 refute_received msg, "unhandled message(s): #{inspect(msg)}" end end end