stub fieldStream
This commit is contained in:
parent
530acc0aeb
commit
bf239fe656
5 changed files with 84 additions and 33 deletions
|
@ -1,3 +1,5 @@
|
||||||
|
const { Stream } = require("../utils");
|
||||||
|
|
||||||
class Cell {
|
class Cell {
|
||||||
constructor(living = false, liveNeighbors = 0) {
|
constructor(living = false, liveNeighbors = 0) {
|
||||||
this.living = living;
|
this.living = living;
|
||||||
|
@ -22,21 +24,6 @@ class Cell {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Stream {
|
|
||||||
constructor(head, next) {
|
|
||||||
this.head = head;
|
|
||||||
this.tail = next;
|
|
||||||
this.memo = false;
|
|
||||||
}
|
|
||||||
get next() {
|
|
||||||
if (!this.memo) {
|
|
||||||
this.tail = this.tail();
|
|
||||||
this.memo = true;
|
|
||||||
}
|
|
||||||
return this.tail;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class CellStream extends Stream {
|
class CellStream extends Stream {
|
||||||
constructor(head, next) {
|
constructor(head, next) {
|
||||||
super(head, next);
|
super(head, next);
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { cellStream } from "./Cell";
|
const { cellStream } = require("./Cell");
|
||||||
|
const { Stream } = require("../utils");
|
||||||
|
|
||||||
export default class GameField {
|
class GameField {
|
||||||
constructor({ fieldArray = [], fieldMap = {} }) {
|
constructor({ fieldArray = [], fieldMap = {} }) {
|
||||||
// seed = [ [] ]
|
// seed = [ [] ]
|
||||||
this.map = {};
|
this.map = {};
|
||||||
|
@ -19,8 +20,32 @@ export default class GameField {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class FieldStream extends Stream {
|
||||||
|
constructor(head, next) {
|
||||||
|
super(head, next);
|
||||||
|
}
|
||||||
|
get map() {
|
||||||
|
return this.head.map;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const fieldStream = ({ fieldArray, fieldMap }) => {
|
||||||
|
return new FieldStream(new GameField({ fieldArray, fieldMap }), function () {
|
||||||
|
// calculate liveNeighbors for all cells on first next call
|
||||||
|
|
||||||
|
new FieldStream({}, function () {
|
||||||
|
// call .next on all Cells on second next call
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
// as a stream -> fieldStream => Stream(GameField, () => Stream(fieldStream.computeNeighbors(), () => Stream(fieldStream.setLiving()))
|
// as a stream -> fieldStream => Stream(GameField, () => Stream(fieldStream.computeNeighbors(), () => Stream(fieldStream.setLiving()))
|
||||||
|
|
||||||
// instantiate table (orientation of major and minor axis dependent on viewport)
|
// instantiate table (orientation of major and minor axis dependent on viewport)
|
||||||
// const gameFields = new Array(1).fill(new GameField({}));
|
// const gameFields = new Array(1).fill(new GameField({}));
|
||||||
// const container = document.getElementById("game-field");
|
// const container = document.getElementById("game-field");
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
GameField,
|
||||||
|
fieldStream,
|
||||||
|
};
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
import reset from "./styles/reset.css";
|
import reset from "./styles/reset.css";
|
||||||
import css from "./styles/style.css";
|
import css from "./styles/style.css";
|
||||||
// import Controls from './components/Controls';
|
// import Controls from './components/Controls';
|
||||||
import GameField from "./components/GameField";
|
const { GameField } = require("./components/GameField");
|
||||||
(() => console.log("hello world!"))();
|
(() => console.log("hello world!"))();
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
// -- state=idle ?
|
// -- state=idle ?
|
||||||
// ---- rewind runs through gameHistory to current state - 1 step
|
// ---- rewind runs through gameHistory to current state - 1 step
|
||||||
|
|
|
@ -1,33 +1,55 @@
|
||||||
import GameField from "../components/GameField";
|
import { GameField, fieldStream } from "../components/GameField";
|
||||||
|
|
||||||
describe("Game Field seeds living Cells with array", () => {
|
const fieldArray = [
|
||||||
const gameArraySeed = new GameField({
|
|
||||||
fieldArray: [
|
|
||||||
[0, 1, 0],
|
[0, 1, 0],
|
||||||
[1, 0, 1],
|
[1, 0, 1],
|
||||||
],
|
];
|
||||||
});
|
|
||||||
const gameMapSeed = new GameField({
|
const fieldMap = {
|
||||||
fieldMap: {
|
|
||||||
"0-0": true,
|
"0-0": true,
|
||||||
"0-2": true,
|
"0-2": true,
|
||||||
"1-1": true,
|
"1-1": true,
|
||||||
},
|
};
|
||||||
});
|
|
||||||
|
describe("Game Field seeds living Cells with array", () => {
|
||||||
|
const gameArraySeed = new GameField({ fieldArray });
|
||||||
|
const gameMapSeed = new GameField({ fieldMap });
|
||||||
|
const streamArraySeed = fieldStream({ fieldArray });
|
||||||
|
const streamMapSeed = fieldStream({ fieldMap });
|
||||||
|
|
||||||
["0-1", "1-0", "1-2"].forEach((key) => {
|
["0-1", "1-0", "1-2"].forEach((key) => {
|
||||||
test(`Array seed: ${key} should equal living Cell`, () => {
|
test(`Array seed: ${key} should equal living Cell`, () => {
|
||||||
expect(gameArraySeed.map[key].living).toEqual(true);
|
expect(gameArraySeed.map[key].living).toEqual(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
test(`Map seed: ${key} should equal undefined`, () => {
|
test(`Map seed: ${key} should equal undefined`, () => {
|
||||||
expect(gameMapSeed.map[key]).toEqual(undefined);
|
expect(gameMapSeed.map[key]).toEqual(undefined);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test(`Stream array seed: ${key} should equal living Cell`, () => {
|
||||||
|
expect(streamArraySeed.map[key].living).toEqual(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test(`Stream map seed: ${key} should equal undefined`, () => {
|
||||||
|
expect(streamMapSeed.map[key]).toEqual(undefined);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
["0-0", "0-2", "1-1"].forEach((key) => {
|
["0-0", "0-2", "1-1"].forEach((key) => {
|
||||||
test(`Array seed: ${key} should equal undefined`, () => {
|
test(`Array seed: ${key} should equal undefined`, () => {
|
||||||
expect(gameArraySeed.map[key]).toEqual(undefined);
|
expect(gameArraySeed.map[key]).toEqual(undefined);
|
||||||
});
|
});
|
||||||
|
|
||||||
test(`Map seed: ${key} should equal living Cell`, () => {
|
test(`Map seed: ${key} should equal living Cell`, () => {
|
||||||
expect(gameMapSeed.map[key].living).toEqual(true);
|
expect(gameMapSeed.map[key].living).toEqual(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test(`Stream array seed: ${key} should equal undefined`, () => {
|
||||||
|
expect(streamArraySeed.map[key]).toEqual(undefined);
|
||||||
|
});
|
||||||
|
|
||||||
|
test(`Stream map seed: ${key} should equal living Cell`, () => {
|
||||||
|
expect(streamMapSeed.map[key].living).toEqual(true);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
18
src/utils/index.js
Normal file
18
src/utils/index.js
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
class Stream {
|
||||||
|
constructor(head, next) {
|
||||||
|
this.head = head;
|
||||||
|
this.tail = next;
|
||||||
|
this.memo = false;
|
||||||
|
}
|
||||||
|
get next() {
|
||||||
|
if (!this.memo) {
|
||||||
|
this.tail = this.tail();
|
||||||
|
this.memo = true;
|
||||||
|
}
|
||||||
|
return this.tail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
Stream,
|
||||||
|
};
|
Loading…
Reference in a new issue