diff options
author | sanine <sanine.not@pm.me> | 2023-11-06 00:57:14 -0600 |
---|---|---|
committer | sanine <sanine.not@pm.me> | 2023-11-06 00:57:14 -0600 |
commit | 541b103179cac2dc58962c52b5144b41f75316b0 (patch) | |
tree | 7a9dc091d84dfac183be905bdadcfa3798e7b9a2 /src/world/proposal.test.js | |
parent | 078a01a078dae15b5e8e3482b57f156ecd0c7fae (diff) |
refactor: agent*.js => proposal*.js
Diffstat (limited to 'src/world/proposal.test.js')
-rw-r--r-- | src/world/proposal.test.js | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/src/world/proposal.test.js b/src/world/proposal.test.js new file mode 100644 index 0000000..a1e1203 --- /dev/null +++ b/src/world/proposal.test.js @@ -0,0 +1,197 @@ +import { + proposal_merge, +} from './proposal.js'; + + +// tile updates + +test("proposals changing different tiles don't conflict", () => { + const a = { + world_changes: [{ x: 4, y: 3, from: 'empty', to: 'mutable' }], + }; + const b = { + world_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 = { + world_changes: [{ x: 4, y: 3, from: 'empty', to: 'mutable' }], + }; + const b = { + world_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 = { + world_changes: [{ x: 4, y: 3, from: 'empty', to: 'mutable' }], + }; + const b = { + world_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 = { + 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 }], + }; + 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]); +}); + + + |