summaryrefslogtreecommitdiff
path: root/src/world/agent.test.js
diff options
context:
space:
mode:
authorsanine <sanine.not@pm.me>2023-11-08 23:09:41 -0600
committersanine <sanine.not@pm.me>2023-11-08 23:09:41 -0600
commit5f2683c0aff63880794b2f3262e0d6abc76bd80a (patch)
treec896e6af6143c77b05f359d7ba988875f241934c /src/world/agent.test.js
parentf78493e192daf4639b91352909e4029b9970fcdb (diff)
export extra topology functions & add agent.js
Diffstat (limited to 'src/world/agent.test.js')
-rw-r--r--src/world/agent.test.js49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/world/agent.test.js b/src/world/agent.test.js
new file mode 100644
index 0000000..5d5828f
--- /dev/null
+++ b/src/world/agent.test.js
@@ -0,0 +1,49 @@
+import { agent_decide, agent_apply } from './agent.js';
+
+
+test("simple agent decisions", () => {
+ const lattice = null;
+ const agent = {
+ id: 3,
+ net: { compute: () => [[0, 1], 'state'] },
+ state: null,
+ x: 0, y: 0,
+ flags: {},
+ };
+
+ const senses = [];
+ const actions = [
+ { size: 1, propose: (agent, head) => [{ agent_changes: [{ agent_id: 3, flags: { act1: head[0] } }] }] },
+ { size: 1, propose: (agent, head) => [{ agent_changes: [{ agent_id: 3, flags: { act2: head[0] } }] }] },
+ ];
+
+ expect(agent_decide(lattice, agent, senses, actions)).toEqual([
+ { ...agent, state: 'state' },
+ actions.map((a, idx) => a.propose(null, [idx])).flat(),
+ ]);
+});
+
+
+test("apply proposals to agent", () => {
+ const props = [
+ { agent_changes: [{ agent_id: 14, x: 4, y: 3 }] },
+ { agent_changes: [{ agent_id: 16, x: 5, y: 3 }] },
+ { agent_changes: [{ agent_id: 14, flags: { frozen: true } }] },
+ ];
+
+ const agent = {
+ id: 14,
+ net: null,
+ state: null,
+ x: 0, y: 0,
+ flags: { frozen: false, emit: 6 }
+ };
+
+ expect(agent_apply(agent, props)).toEqual({
+ id: 14,
+ net: null,
+ state: null,
+ x: 4, y: 3,
+ flags: { frozen: true, emit: 6 }
+ });
+});