Add assignment 4
This commit is contained in:
136
assignments/A4/spec/life.spec.js
Normal file
136
assignments/A4/spec/life.spec.js
Normal file
@ -0,0 +1,136 @@
|
||||
let life=require ("../life.js");
|
||||
let plan = ["############################",
|
||||
"# # # o ##",
|
||||
"# #",
|
||||
"# ##### #",
|
||||
"## # # ## #",
|
||||
"### ## # #",
|
||||
"# ### # #",
|
||||
"# #### #",
|
||||
"# ## o #",
|
||||
"# o # o ### #",
|
||||
"# # #",
|
||||
"############################"];
|
||||
|
||||
let Vector = life.Vector;
|
||||
|
||||
describe("Grid",
|
||||
function() {
|
||||
it("initially undefined",
|
||||
function() {
|
||||
let grid = new life.Grid(5, 5);
|
||||
expect(grid.get(new life.Vector(1, 1))).toBe(undefined);
|
||||
});
|
||||
it("setting a value",
|
||||
function() {
|
||||
let grid = new life.Grid(5, 5);
|
||||
grid.set(new Vector(1, 1), "X");
|
||||
expect(grid.get(new Vector(1, 1))).toEqual("X");
|
||||
});
|
||||
it("forEach",
|
||||
function() {
|
||||
let grid = new life.Grid(5, 5);
|
||||
let test = {grid: grid, sum: 0,
|
||||
method: function () {
|
||||
this.grid.forEach(function() { this.sum++; }, this);
|
||||
}
|
||||
};
|
||||
|
||||
test.grid.set(new Vector(2,3), "#");
|
||||
test.grid.set(new Vector(3,4), "#");
|
||||
test.method();
|
||||
expect(test.sum).toBe(2);
|
||||
});
|
||||
});
|
||||
|
||||
describe("BouncingCritter",
|
||||
function() {
|
||||
let bob = null;
|
||||
beforeEach(function () {
|
||||
spyOn(Math, 'random').and.returnValue(0.5);
|
||||
bob=new life.BouncingCritter();
|
||||
});
|
||||
it("constructor",
|
||||
function() {
|
||||
expect('direction' in bob).toBe(true);
|
||||
expect(bob.direction).toBe('s');
|
||||
});
|
||||
it("act, clear path",
|
||||
function () {
|
||||
let clear = {look: function () {return " ";}};
|
||||
expect(bob.act(clear)).toEqual({type: "move", direction: "s"});
|
||||
});
|
||||
it("act, unclear path",
|
||||
function () {
|
||||
let unclear = {look: function () {return "#";}, find: function () { return "n";}};
|
||||
expect(bob.act(unclear)).toEqual({type: "move", direction: "n"});
|
||||
});
|
||||
});
|
||||
|
||||
describe("World",
|
||||
function () {
|
||||
it("roundtrip",
|
||||
function() {
|
||||
let world = new life.World(plan, {"#": life.Wall, "o": life.BouncingCritter});
|
||||
let rows = world.toString().split("\n");
|
||||
// drop blank row
|
||||
rows.pop();
|
||||
expect(rows).toEqual(plan);
|
||||
});
|
||||
it("turn",
|
||||
function () {
|
||||
let world = new life.World(plan, {"#": life.Wall, "o": life.BouncingCritter});
|
||||
let count=0;
|
||||
spyOn(world, 'letAct').and.callFake(function(critter,vector) {count++;});
|
||||
world.turn();
|
||||
expect(count).toBe(4);
|
||||
});
|
||||
it("checkDestination",
|
||||
function () {
|
||||
let world = new life.World(plan, {"#": life.Wall, "o": life.BouncingCritter});
|
||||
expect(world.checkDestination({direction: 's'},
|
||||
new life.Vector(19,1))).toEqual(new life.Vector(19,2));
|
||||
expect(world.checkDestination({direction: 'n'},
|
||||
new life.Vector(0,0))).toEqual(undefined);
|
||||
});
|
||||
it("letAct",
|
||||
function () {
|
||||
let world = new life.World(plan, {"#": life.Wall, "o": life.BouncingCritter});
|
||||
let src=new life.Vector(19,1);
|
||||
let dest=new life.Vector(19,2);
|
||||
let bob=world.grid.get(src);
|
||||
spyOn(bob,'act').and.returnValue({type: 'move', direction: 's'});
|
||||
world.letAct(bob, src);
|
||||
expect(world.grid.get(dest)).toEqual(bob);
|
||||
});
|
||||
});
|
||||
|
||||
describe("View",
|
||||
function () {
|
||||
let world = new life.World(plan, {"#": life.Wall, "o": life.BouncingCritter});
|
||||
let View=life.View;
|
||||
let position=new Vector(15,9);
|
||||
it("constructor",
|
||||
function () {
|
||||
let view=new View(world, position);
|
||||
expect(view.vector).toEqual(position);
|
||||
});
|
||||
it("look",
|
||||
function () {
|
||||
let view=new View(world, position);
|
||||
expect(view.look("s")).toBe(" ");
|
||||
});
|
||||
it("findAll",
|
||||
function () {
|
||||
let view=new View(world, position);
|
||||
let directionNames = [ 'e', 'n', 'ne', 'nw', 's', 'se', 'sw', 'w' ];
|
||||
expect(view.findAll(" ").sort()).toEqual(directionNames);
|
||||
});
|
||||
it("find",
|
||||
function () {
|
||||
let view=new View(world, position);
|
||||
spyOn(Math, 'random').and.returnValue(0.5);
|
||||
expect(view.find(" ")).toBe('s');
|
||||
});
|
||||
|
||||
});
|
30
assignments/A4/spec/moarlife.spec.js
Normal file
30
assignments/A4/spec/moarlife.spec.js
Normal file
@ -0,0 +1,30 @@
|
||||
let life=require ("../moarlife.js");
|
||||
|
||||
let plan= ["############################",
|
||||
"##### ######",
|
||||
"## *** **##",
|
||||
"# *##** ** O *##",
|
||||
"# *** O ##** *#",
|
||||
"# O ##*** #",
|
||||
"# ##** #",
|
||||
"# O #* #",
|
||||
"#* #** O #",
|
||||
"#*** ##** O **#",
|
||||
"##**** ###*** *###",
|
||||
"############################"];
|
||||
|
||||
|
||||
describe("World",
|
||||
function () {
|
||||
let valley = new life.LifelikeWorld(plan,
|
||||
{"#": life.Wall,
|
||||
"O": life.PlantEater,
|
||||
"*": life.Plant});
|
||||
it("roundtrip",
|
||||
function() {
|
||||
let rows = valley.toString().split("\n");
|
||||
// drop blank row
|
||||
rows.pop();
|
||||
expect(rows).toEqual(plan);
|
||||
});
|
||||
});
|
13
assignments/A4/spec/support/jasmine.json
Normal file
13
assignments/A4/spec/support/jasmine.json
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"spec_dir": "spec",
|
||||
"spec_files": [
|
||||
"**/*[sS]pec.?(m)js"
|
||||
],
|
||||
"helpers": [
|
||||
"helpers/**/*.?(m)js"
|
||||
],
|
||||
"env": {
|
||||
"stopSpecOnExpectationFailure": false,
|
||||
"random": true
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user