diff options
Diffstat (limited to 'src/world/agent.test.js')
-rw-r--r-- | src/world/agent.test.js | 49 |
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 } + }); +}); |