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: (world, agent, head) => [{ agent_changes: [{ agent_id: 3, flags: { act1: head[0] } }] }] }, { size: 1, propose: (world, 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, 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 } }); });