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 proc(scope), do: elem(scope, 1)
|
||||||
def syns(scope), do: elem(scope, 2)
|
def syns(scope), do: elem(scope, 2)
|
||||||
def env(scope), do: elem(scope, 3)
|
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
|
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: neg_only()})
|
||||||
CSys.send_message(zero, [:csys, :create, :pred], %{op: Program.negate()})
|
CSys.send_message(zero, [:csys, :create, :pred], %{op: Program.negate()})
|
||||||
one = receive_data([:csys, :created]).new
|
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
|
two = receive_data([:csys, :created]).new
|
||||||
Process.sleep(1)
|
Process.sleep(1)
|
||||||
CSys.send_value(one, 1)
|
CSys.send_value(one, 1)
|
||||||
#assert 1 = receive_data().value
|
assert receive_data().value in [-1, 1]
|
||||||
assert Enum.member?([-1, 1], receive_data().value)
|
assert receive_data().value in [-1, 1]
|
||||||
assert Enum.member?([-1, 1], receive_data().value)
|
|
||||||
CSys.send_message(two, [:csys, :create, :pred])
|
CSys.send_message(two, [:csys, :create, :pred])
|
||||||
three = receive_data([:csys, :created]).new
|
three = receive_data([:csys, :created]).new
|
||||||
CSys.send_message(three, [:csys, :connect], %{target: zero})
|
CSys.send_message(three, [:csys, :connect], %{target: zero})
|
||||||
Process.sleep(1)
|
Process.sleep(2)
|
||||||
CSys.send_value(three, 3)
|
CSys.send_value(three, 3)
|
||||||
assert 3 = receive_data().value
|
assert 3 = receive_data().value
|
||||||
assert 3 = receive_data().value
|
assert 3 = receive_data().value
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue