lively.lang
Version:
JavaScript utils providing useful abstractions for working with collections, functions, objects.
97 lines (82 loc) • 2.86 kB
JavaScript
/*global beforeEach, afterEach, describe, it, setInterval, clearInterval, setTimeout*/
import { expect } from "mocha-es6";
import { tableFromObjects, getRow, getCol, get, create, set, setCol, setRow, map, forEach, toObjects, mapCreate } from "../grid.js";
describe('grid', function() {
it("creates a grid", function() {
var result = create(2, 3, 'foo'),
expected = [
['foo', 'foo', 'foo'],
['foo', 'foo', 'foo']];
expect(expected).to.eql(result);
});
it("creates grid with distinct columns", function() {
var result = create(2, 3, 'foo'),
expected = [
['foo', 'bar', 'foo'],
['foo', 'foo', 'foo']];
result[0][1] = 'bar';
expect(expected).to.eql(result);
});
it("enumerates", function() {
var result = [],
expected = [[0,0], [0,1], [0,2],
[1,0], [1,1], [1,2]];
forEach(create(2, 3), function(_, row, col) {
result.push([row, col]); });
expect(expected).to.eql(result);
});
it("maps", function() {
var result = map(create(2, 3), function(_, row, col) {
return row + col; }),
expected = [[0, 1, 2],
[1, 2, 3]];
expect(expected).to.eql(result);
});
it("gridMapCreate", function() {
var result = mapCreate(2, 3, function(row, col) {
return row + col; }),
expected = [[0, 1, 2],
[1, 2, 3]];
expect(expected).to.eql(result);
});
it("converts toObjects", function() {
expect([{a:1,b:2},{a:3,b:4}]).to.eql(toObjects([['a', 'b'],[1,2],[3,4]]));
});
it("creates grid from objects", function() {
var objects = [{x:1,y:2},{x:3},{z:4}],
expected = [["x","y","z"],[1,2,null],[3,null,null],[null,null,4]];
expect(expected).to.eql(tableFromObjects(objects));
// gracefully handle non-arrays
var object = {x:1,y:2},
expected = [["x","y"],[1,2]];
expect(expected).to.eql(tableFromObjects(object));
});
it("index access", function() {
var g = mapCreate(3,3, function(i,j) { return [i,j]; });
expect(get(g, 0, 0)).eql([0,0]);
expect(get(g, 0, 1)).eql([0,1]);
expect(get(g, 2, 2)).eql([2,2]);
expect(get(g, 2, 3)).equal(undefined);
expect(get(g, 3, 2)).equal(undefined);
set(g, 0, 1, "foo");
expect(get(g, 0, 1)).equal("foo");
});
it("row access", function() {
var g = mapCreate(3,3, function(i,j) { return [i,j]; });
expect(getRow(g, 1)).eql([[1,0], [1,1], [1,2]]);
setRow(g, 1, [1,2,3])
expect(g).eql([
[[0, 0], [0, 1], [0, 2]],
[1,2,3],
[[2, 0], [2, 1], [2, 2]]]);
});
it("col access", function() {
var g = mapCreate(3,3, function(i,j) { return [i,j]; });
expect(getCol(g, 1)).eql([[0,1], [1,1], [2,1]]);
setCol(g, 1, [1,2,3])
expect(g).eql([
[[0, 0], 1, [0, 2]],
[[1, 0], 2, [1, 2]],
[[2, 0], 3, [2, 2]]]);
});
});