From 541b103179cac2dc58962c52b5144b41f75316b0 Mon Sep 17 00:00:00 2001
From: sanine <sanine.not@pm.me>
Date: Mon, 6 Nov 2023 00:57:14 -0600
Subject: refactor: agent*.js => proposal*.js

---
 src/world/proposal.test.js | 197 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 197 insertions(+)
 create mode 100644 src/world/proposal.test.js

(limited to 'src/world/proposal.test.js')

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]);
+});
+
+
+
-- 
cgit v1.2.1