From e3cc5ae9840962ff36f14e1e6c47c817429cb6e2 Mon Sep 17 00:00:00 2001 From: Sorrel Bri Date: Sun, 24 May 2020 16:26:56 -0700 Subject: [PATCH] refactor GameField and ensure glider functions --- src/components/GameField.js | 5 ++ src/test/GameField.test.js | 95 ++++++++++++++++++++++++++++++++++++- 2 files changed, 98 insertions(+), 2 deletions(-) diff --git a/src/components/GameField.js b/src/components/GameField.js index 59f3d13..3706504 100644 --- a/src/components/GameField.js +++ b/src/components/GameField.js @@ -74,6 +74,11 @@ const fieldStream = ({ fieldArray, fieldMap }) => { }); }; +// wrapper for fieldStream +// -- .next => calls .next.next on fieldStream to advance one generation +// -- .reset => instantiates new fieldStream +// -- .toggle(cell) => manually toggles cell state + // instantiate table (orientation of major and minor axis dependent on viewport) // const gameFields = new Array(1).fill(new GameField({})); // const container = document.getElementById("game-field"); diff --git a/src/test/GameField.test.js b/src/test/GameField.test.js index 8bec979..5791d9b 100644 --- a/src/test/GameField.test.js +++ b/src/test/GameField.test.js @@ -235,7 +235,7 @@ describe("fieldStream.next tests still lifes", () => { }); }); -describe("fieldStream.next tests oscillators", () => { +describe("fieldStream.next tests oscillators, spaceships", () => { const blinkerArray = [ [0, 1, 0], [0, 1, 0], @@ -269,8 +269,99 @@ describe("fieldStream.next tests oscillators", () => { ["2,2", false], ].forEach(([key, live]) => { test(`after two generations of blinker, ${key} alive: ${live}`, () => { - console.log(streamBlinker.next.next.map); expect(streamBlinker.next.next.next.next.map[key].living).toEqual(live); }); }); + + const gliderArray = [ + [0, 1, 0], + [0, 0, 1], + [1, 1, 1], + ]; + const streamGlider = fieldStream({ fieldArray: gliderArray }); + + [ + ["0,0", false], + ["0,1", false], + ["0,2", false], + ["1,0", true], + ["1,1", false], + ["1,2", true], + ["2,0", false], + ["2,1", true], + ["2,2", true], + ["3,0", false], + ["3,1", true], + ["3,2", false], + ].forEach(([key, live]) => { + test(`after one generation of glider, ${key} alive: ${live}`, () => { + expect(streamGlider.next.next.map[key].living).toEqual(live); + }); + }); + [ + ["0,0", false], + ["0,1", false], + ["0,2", false], + ["1,0", false], + ["1,1", false], + ["1,2", true], + ["2,0", true], + ["2,1", false], + ["2,2", true], + ["3,0", false], + ["3,1", true], + ["3,2", true], + ].forEach(([key, live]) => { + test(`after two generations of glider, ${key} alive: ${live}`, () => { + expect(streamGlider.next.next.next.next.map[key].living).toEqual(live); + }); + }); + [ + ["0,0", false], + ["0,1", false], + ["0,2", false], + ["0,3", false], + ["1,0", false], + ["1,1", true], + ["1,2", false], + ["1,3", false], + ["2,0", false], + ["2,1", false], + ["2,2", true], + ["2,3", true], + ["3,0", false], + ["3,1", true], + ["3,2", true], + ["3,3", false], + ].forEach(([key, live]) => { + test(`after three generations of glider, ${key} alive: ${live}`, () => { + expect( + streamGlider.next.next.next.next.next.next.map[key].living + ).toEqual(live); + }); + }); + [ + ["0,0", false], + ["0,1", false], + ["0,2", false], + ["0,3", false], + ["1,0", false], + ["1,1", false], + ["1,2", true], + ["1,3", false], + ["2,0", false], + ["2,1", false], + ["2,2", false], + ["2,3", true], + ["3,0", false], + ["3,1", true], + ["3,2", true], + ["3,3", true], + ].forEach(([key, live]) => { + test(`after four generations of glider, ${key} alive: ${live}`, () => { + expect( + streamGlider.next.next.next.next.next.next.next.next.map[key].living + ).toEqual(live); + }); + }); });