csys: provide compose() function for combining synapse operators
This commit is contained in:
parent
02db5f3ad4
commit
acda4f301f
2 changed files with 20 additions and 5 deletions
|
|
@ -78,4 +78,19 @@ defmodule Scopes.CSys do
|
|||
def proc(scope), do: elem(scope, 1)
|
||||
def syns(scope), do: elem(scope, 2)
|
||||
def env(scope), do: elem(scope, 3)
|
||||
|
||||
# helpers
|
||||
|
||||
def compose(ops) do
|
||||
fn msg ->
|
||||
Enum.reduce(ops, msg,
|
||||
fn op, val ->
|
||||
case val do
|
||||
nil -> nil
|
||||
val -> op.(val)
|
||||
end
|
||||
end
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -29,17 +29,17 @@ defmodule Scopes.CSysTest do
|
|||
#CSys.send_message(zero, [:csys, :create, :pred], %{op: neg_only()})
|
||||
CSys.send_message(zero, [:csys, :create, :pred], %{op: Program.negate()})
|
||||
one = receive_data([:csys, :created]).new
|
||||
CSys.send_message(one, [:csys, :create, :succ], %{op: CSys.data_only()})
|
||||
CSys.send_message(one, [:csys, :create, :succ],
|
||||
%{op: CSys.compose([CSys.data_only(), Program.negate()])})
|
||||
two = receive_data([:csys, :created]).new
|
||||
Process.sleep(1)
|
||||
CSys.send_value(one, 1)
|
||||
#assert 1 = receive_data().value
|
||||
assert Enum.member?([-1, 1], receive_data().value)
|
||||
assert Enum.member?([-1, 1], receive_data().value)
|
||||
assert receive_data().value in [-1, 1]
|
||||
assert receive_data().value in [-1, 1]
|
||||
CSys.send_message(two, [:csys, :create, :pred])
|
||||
three = receive_data([:csys, :created]).new
|
||||
CSys.send_message(three, [:csys, :connect], %{target: zero})
|
||||
Process.sleep(1)
|
||||
Process.sleep(2)
|
||||
CSys.send_value(three, 3)
|
||||
assert 3 = receive_data().value
|
||||
assert 3 = receive_data().value
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue