csys: fixes, clean-ups, simplifications: atom lists, fix sleep() call
This commit is contained in:
parent
3a9d281f65
commit
8e79c80470
5 changed files with 22 additions and 18 deletions
|
|
@ -69,7 +69,7 @@ defmodule Scopes.CSys do
|
||||||
# notifications
|
# notifications
|
||||||
|
|
||||||
def notify_created(new, scope) do
|
def notify_created(new, scope) do
|
||||||
msg = Shape.create([:csys, :created], data: %{old: self(), new: new})
|
msg = Shape.create(~w(csys created)a, data: %{old: self(), new: new})
|
||||||
notify(msg, scope)
|
notify(msg, scope)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,11 @@ defmodule Scopes.CSys.Environ do
|
||||||
neurons = [new | state.neurons]
|
neurons = [new | state.neurons]
|
||||||
names = data[:name] && Map.put(state.names, data.name, new) || state.names
|
names = data[:name] && Map.put(state.names, data.name, new) || state.names
|
||||||
{step, seq} = List.pop_at(state.init_seq, 0)
|
{step, seq} = List.pop_at(state.init_seq, 0)
|
||||||
CSys.update({%State{neurons: neurons, names: names, init_seq: seq}, proc, syns, env})
|
state1 = %State{neurons: neurons, names: names, init_seq: seq}
|
||||||
if step, do: step.(neurons)
|
CSys.update({state1, proc, syns, env})
|
||||||
|
if step do
|
||||||
|
Process.sleep(1)
|
||||||
|
step.(neurons)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -103,13 +103,13 @@ alias Scopes.CSys
|
||||||
def create_succ(msg, scope) do
|
def create_succ(msg, scope) do
|
||||||
new = CSys.create(msg, restart(scope))
|
new = CSys.create(msg, restart(scope))
|
||||||
data = Shape.data(msg)
|
data = Shape.data(msg)
|
||||||
CSys.send_message(self(), [:csys, :connect], Map.put(data, :target, new))
|
CSys.send_message(self(), ~w(csys connect)a, Map.put(data, :target, new))
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_pred(msg, scope) do
|
def create_pred(msg, scope) do
|
||||||
new = CSys.create(msg, restart(scope))
|
new = CSys.create(msg, restart(scope))
|
||||||
data = Shape.data(msg)
|
data = Shape.data(msg)
|
||||||
CSys.send_message(new, [:csys, :connect], Map.put(data, :target, self()))
|
CSys.send_message(new, ~w(csys connect)a, Map.put(data, :target, self()))
|
||||||
end
|
end
|
||||||
|
|
||||||
# synapse operations
|
# synapse operations
|
||||||
|
|
@ -133,14 +133,14 @@ alias Scopes.CSys
|
||||||
# demo init sequences
|
# demo init sequences
|
||||||
|
|
||||||
def init_seq_b1() do [
|
def init_seq_b1() do [
|
||||||
fn [zero | _ns] -> CSys.send_message(zero, [:csys, :create, :pred],
|
fn [zero | _ns] -> CSys.send_message(zero, ~w(csys create pred)a,
|
||||||
%{op: [CSys.data_only(), negate()]}) end,
|
%{op: [CSys.data_only(), negate()]}) end,
|
||||||
fn [one | _ns] -> CSys.send_message(one, [:csys, :create, :succ],
|
fn [one | _ns] -> CSys.send_message(one, ~w(csys create succ)a,
|
||||||
%{op: CSys.data_only()}) end,
|
%{op: CSys.data_only()}) end,
|
||||||
fn [two | _ns] -> CSys.send_message(two, [:csys, :create, :pred]) end,
|
fn [two | _ns] -> CSys.send_message(two, ~w(csys create pred)a) end,
|
||||||
fn [three | others] ->
|
fn [three | others] ->
|
||||||
zero = List.last(others)
|
zero = List.last(others)
|
||||||
CSys.send_message(three, [:csys, :connect], %{target: zero})
|
CSys.send_message(three, ~w(csys connect)a, %{target: zero})
|
||||||
end
|
end
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -19,12 +19,12 @@ defmodule Scopes.CSysTest do
|
||||||
describe "basic:" do
|
describe "basic:" do
|
||||||
test "minimal-neural-net" do
|
test "minimal-neural-net" do
|
||||||
_env = Environ.setup(Program.prepare_basic(), Program.init_seq_b1())
|
_env = Environ.setup(Program.prepare_basic(), Program.init_seq_b1())
|
||||||
zero = receive_data([:csys, :created]).new
|
zero = receive_data(~w(csys created)a).new
|
||||||
CSys.send_value(zero, 0)
|
CSys.send_value(zero, 0)
|
||||||
assert 0 = receive_data().value
|
assert 0 = receive_data().value
|
||||||
one = receive_data([:csys, :created]).new
|
one = receive_data(~w(csys created)a).new
|
||||||
_two = receive_data([:csys, :created]).new
|
_two = receive_data(~w(csys created)a).new
|
||||||
three = receive_data([:csys, :created]).new
|
three = receive_data(~w(csys created)a).new
|
||||||
Process.sleep(50)
|
Process.sleep(50)
|
||||||
CSys.send_value(one, 1)
|
CSys.send_value(one, 1)
|
||||||
assert receive_data().value == 1
|
assert receive_data().value == 1
|
||||||
|
|
@ -38,8 +38,8 @@ defmodule Scopes.CSysTest do
|
||||||
|
|
||||||
def init_recursive_1() do [
|
def init_recursive_1() do [
|
||||||
fn [zero] ->
|
fn [zero] ->
|
||||||
CSys.send_message(zero, [:csys, :connect], %{target: zero, op: Program.negate()})
|
CSys.send_message(zero, ~w(csys connect)a, %{target: zero, op: Program.negate()})
|
||||||
CSys.send_message(zero, [:csys, :create, :succ])
|
CSys.send_message(zero, ~w(csys create succ)a)
|
||||||
end
|
end
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
@ -47,8 +47,8 @@ defmodule Scopes.CSysTest do
|
||||||
describe "recursive:" do
|
describe "recursive:" do
|
||||||
test "zero + effector" do
|
test "zero + effector" do
|
||||||
_env = Environ.setup(Program.prepare_basic(), init_recursive_1())
|
_env = Environ.setup(Program.prepare_basic(), init_recursive_1())
|
||||||
zero = receive_data([:csys, :created]).new
|
zero = receive_data(~w(csys created)a).new
|
||||||
_eff = receive_data([:csys, :created]).new
|
_eff = receive_data(~w(csys created)a).new
|
||||||
Process.sleep(50)
|
Process.sleep(50)
|
||||||
CSys.send_value(zero, 42)
|
CSys.send_value(zero, 42)
|
||||||
assert receive_data().value == 42
|
assert receive_data().value == 42
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ defmodule Scopes.ShapeTest do
|
||||||
|
|
||||||
describe "shape:" do
|
describe "shape:" do
|
||||||
test "basic" do
|
test "basic" do
|
||||||
rec = Shape.create([:dom, :data], data: %{value: 42})
|
rec = Shape.create(~w(dom data)a, data: %{value: 42})
|
||||||
assert 42 = Shape.data(rec).value
|
assert 42 = Shape.data(rec).value
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue