defmodule Scopes.CoreTest do use ExUnit.Case, async: false @moduletag timeout: 5000 alias Scopes.Core.Environ alias Scopes.Core.Program alias Scopes.Core.Shape def receive_select(head) do assert_receive {^head, info}, 100 {head, info} end def receive_data(head \\ [:csys, :data]) do Shape.data(receive_select(head)) end describe "core-basic:" do test "minimal-b1" do Environ.setup(Program.prepare_basic(), Program.init_seq_b1()) Process.sleep(10) env = Environ.get_cell({:env, :c00}) Environ.forward_value(env, [:csys, :c00, "0-0"], 0) assert 0 = receive_data().value Environ.forward_value(env, [:csys, :s01, "1-0"], 1) assert receive_data().value == 1 #assert receive_data().value in [-1, 1] Environ.forward_value(env, [:csys, :s01, "1-1"], 3) assert receive_data().value in [2, 3] assert receive_data().value in [2, 3] refute_receive msg, 10, "unhandled message(s): #{inspect(msg)}" end test "recursive-1" do Environ.setup(Program.prepare_basic(), Program.init_recursive_1()) Process.sleep(10) env = Environ.get_cell({:env, :c00}) Environ.forward_value(env, [:csys, :s01, "1-1"], 42) assert receive_data().value == 42 Environ.forward_value(env, [:csys, :s01, "1-1"], 47) assert receive_data().value == 5 refute_receive msg, 10, "unhandled message(s): #{inspect(msg)}" end end end