From 078a01a078dae15b5e8e3482b57f156ecd0c7fae Mon Sep 17 00:00:00 2001 From: sanine Date: Mon, 6 Nov 2023 00:34:06 -0600 Subject: implement flag conflicts --- src/world/agent.test.js | 68 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) (limited to 'src/world/agent.test.js') diff --git a/src/world/agent.test.js b/src/world/agent.test.js index 2a86908..fe73b25 100644 --- a/src/world/agent.test.js +++ b/src/world/agent.test.js @@ -5,6 +5,8 @@ import { // --===== proposal conflicts =====-- +// tile updates + test("proposals changing different tiles don't conflict", () => { const a = { world_changes: [{ x: 4, y: 3, from: 'empty', to: 'mutable' }], @@ -41,6 +43,32 @@ test("proposals changing the same tile to the same state merge to a single propo }); +test("proposals with identical tile updates but incompatible tile flags conflict", () => { + const a = { + world_changes: [{ x: 4, y: 3, from: 'empty', to: 'mutable', flags: { v: 'a' } }], + }; + const b = { + world_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 = { + world_changes: [{ x: 4, y: 3, from: 'empty', to: 'mutable', flags: { v: 'a', r: 'd' } }], + }; + const b = { + world_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 }], @@ -53,6 +81,7 @@ test("proposals moving two agents to the same tile conflict", () => { }); +// agent updates test("proposals moving two agents to different tiles do not conflict", () => { const a = { agent_changes: [{ agent_id: 'aaa', x: 4, y: 3 }], @@ -87,3 +116,42 @@ test("proposals moving the same agent to the same tile merge", () => { 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 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([]); +}); -- cgit v1.2.1