import { proposal_merge, } from './proposal.js'; // tile updates test("proposals changing different tiles don't conflict", () => { const a = { lattice_changes: [{ x: 4, y: 3, from: 'empty', to: 'mutable' }], }; const b = { lattice_changes: [{ x: 4, y: 4, from: 'empty', to: 'flag' }], }; expect(proposal_merge([a], b)).toEqual([a, b]); }); test("proposals changing the same tile to different states conflict", () => { const a = { lattice_changes: [{ x: 4, y: 3, from: 'empty', to: 'mutable' }], }; const b = { lattice_changes: [{ x: 4, y: 3, from: 'empty', to: 'flag' }], }; expect(proposal_merge([a], b)).toEqual([]); }); test("proposals changing the same tile to the same state merge to a single proposal", () => { const a = { lattice_changes: [{ x: 4, y: 3, from: 'empty', to: 'mutable' }], }; const b = { lattice_changes: [{ x: 4, y: 3, from: 'empty', to: 'mutable' }], }; expect(proposal_merge([a], b)).toEqual([a]); }); test("proposals with identical tile updates but incompatible tile flags conflict", () => { const a = { lattice_changes: [{ x: 4, y: 3, from: 'empty', to: 'mutable', flags: { v: 'a' } }], }; const b = { lattice_changes: [{ x: 4, y: 3, from: 'empty', to: 'mutable', flags: { v: 'b' } }], }; expect(proposal_merge([a], b)).toEqual([]); }); test("proposals with identical tile updates but compatible tile flags do not conflict", () => { const a = { lattice_changes: [{ x: 4, y: 3, from: 'empty', to: 'mutable', flags: { v: 'a', r: 'd' } }], }; const b = { lattice_changes: [{ x: 4, y: 3, from: 'empty', to: 'mutable', flags: { v: 'a', u: 'b' } }], }; expect(proposal_merge([a], b)).toEqual([a, b]); }); test("proposals moving two agents to the same tile conflict", () => { const a = { agent_changes: [{ agent_id: 'aaa', x: 4, y: 3 }], }; const b = { agent_changes: [{ agent_id: 'bbb', x: 4, y: 3 }], }; expect(proposal_merge([a], b)).toEqual([]); }); // agent updates test("proposals moving two agents to different tiles do not conflict", () => { const a = { agent_changes: [{ agent_id: 'aaa', x: 4, y: 3 }], }; const b = { agent_changes: [{ agent_id: 'bbb', x: 3, y: 3 }], }; expect(proposal_merge([a], b)).toEqual([a, b]); }); test("proposals moving the same agent to different tiles conflict", () => { const a = { agent_changes: [{ agent_id: 'aaa', x: 4, y: 3 }], }; const b = { agent_changes: [{ agent_id: 'aaa', x: 3, y: 3 }], }; expect(proposal_merge([a], b)).toEqual([]); }); test("proposals moving the same agent to the same tile merge", () => { const a = { agent_changes: [{ agent_id: 'aaa', x: 4, y: 3 }], }; const b = { agent_changes: [{ agent_id: 'aaa', x: 4, y: 3 }], }; expect(proposal_merge([a], b)).toEqual([a]); }); test("proposals setting flags on different agents do not conflict", () => { const a = { agent_changes: [{ agent_id: 'aaa', flags: { frozen: false } }], }; const b = { agent_changes: [{ agent_id: 'bbb', flags: { frozen: false } }], }; expect(proposal_merge([a], b)).toEqual([a, b]); }); test("setting the same agent to compatible flags does not conflict", () => { const a = { agent_changes: [{ agent_id: 'aaa', flags: { frozen: false } }], }; const b = { agent_changes: [{ agent_id: 'aaa', flags: { crumpet: 'hi' } }], }; expect(proposal_merge([a], b)).toEqual([a, b]); }); test("setting the same agent to compatible object flags does not conflict", () => { const a = { agent_changes: [{ agent_id: 'aaa', flags: { emit: [0, 1, 1, 0] } }], }; const b = { agent_changes: [{ agent_id: 'aaa', flags: { emit: [0, 1, 1, 0], hi: 4 } }], }; expect(proposal_merge([a], b)).toEqual([a, b]); }); test("setting the same agent to incompatible flags does conflict", () => { const a = { agent_changes: [{ agent_id: 'aaa', flags: { frozen: false } }], }; const b = { agent_changes: [{ agent_id: 'aaa', flags: { frozen: true, crumpet: 'hi' } }], }; expect(proposal_merge([a], b)).toEqual([]); }); test("setting the same agent to incompatible object flags does conflict", () => { const a = { agent_changes: [{ agent_id: 'aaa', flags: { emit: [0, 1, 1, 0] } }], }; const b = { agent_changes: [{ agent_id: 'aaa', flags: { emit: [0, 1, 1, 1], hi: 4 } }], }; expect(proposal_merge([a], b)).toEqual([]); }); test("setting the same agent to identical flags merges", () => { const a = { agent_changes: [{ agent_id: 'aaa', flags: { emit: [0, 1, 1, 0] } }], }; const b = { agent_changes: [{ agent_id: 'aaa', flags: { emit: [0, 1, 1, 0] } }], }; expect(proposal_merge([a], b)).toEqual([a]); });