diff --git a/src/modules/picture.js b/src/modules/picture.js index a65e566..117d358 100644 --- a/src/modules/picture.js +++ b/src/modules/picture.js @@ -40,7 +40,7 @@ export function picToBoard(pixels, board) { const flat = pixels.reduce((acc, pixel, index) => { const i = index * 4; const count = pixels[i] + pixels[i + 1] + pixels[i + 2]; - const value = count >= 255 ? 1 : 0; + const value = (count >= 255) & 1; acc[index] = value; return acc; }, []); @@ -58,8 +58,7 @@ export function boardToPic(board) { const img = new ImageData(board.width, board.height); const colors = [hexToRGB(live), hexToRGB(dead)]; board.grid.flat().reduce((acc, cell, index) => { - // TODO : bitshift operation instead of ternary - const color = cell === 1 ? colors[0] : colors[1]; + const color = colors[(cell === 1) & 1]; const i = index * 4; acc[i] = color[0]; acc[i + 1] = color[1]; diff --git a/tests/core.test.js b/tests/core.test.js new file mode 100644 index 0000000..355865b --- /dev/null +++ b/tests/core.test.js @@ -0,0 +1,18 @@ +import { describe, expect, test } from "vitest"; +import { evolve1d, create1dStateOneCell } from "src/modules/core.js"; +import { presetRuleset } from "src/modules/preset.js"; + +describe("Core", () => { + test("evolve1d, rules73, 9 cells", () => { + const state = [0, 0, 0, 0, 1, 0, 0, 0, 0]; + const got = evolve1d(state, presetRuleset[0].rules); + const valid = [1, 1, 1, 0, 0, 0, 1, 1, 1]; + expect(got.length).toBe(state.length); + expect(got).toEqual(valid); + }), + test("create1dStateOneCell, 49 cells", () => { + const got = create1dStateOneCell(49); + expect(got.length).toBe(49); + expect(got[24]).toBe(1); + }); +});