|
|
|
'use strict';
|
|
|
|
|
|
|
|
const InfiniteList = require('../es5/infinity.min');
|
|
|
|
|
|
|
|
const {
|
|
|
|
InfiniteListItem
|
|
|
|
} = require('..');
|
|
|
|
|
|
|
|
String.prototype.trimify = function() {
|
|
|
|
return this.replace(/\s/g, '');
|
|
|
|
};
|
|
|
|
|
|
|
|
const testStrings = [
|
|
|
|
`InfiniteListItem[.. {
|
|
|
|
"i": 35,
|
|
|
|
"a": {
|
|
|
|
"$ref": "$"
|
|
|
|
}
|
|
|
|
} ..]`,
|
|
|
|
`InfiniteList[{
|
|
|
|
"i": 10,
|
|
|
|
"a": {
|
|
|
|
"$ref": "$"
|
|
|
|
}
|
|
|
|
}, {
|
|
|
|
"i": 15,
|
|
|
|
"a": {
|
|
|
|
"$ref": "$"
|
|
|
|
}
|
|
|
|
}, ...]`
|
|
|
|
];
|
|
|
|
|
|
|
|
/* global describe it expect */
|
|
|
|
describe("InfiniteList", () => {
|
|
|
|
|
|
|
|
it("Should be true", () => {
|
|
|
|
const Infinite = new InfiniteList(0, x => x + 2);
|
|
|
|
expect(Infinite instanceof InfiniteList).toBe(true);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("Should be true", () => {
|
|
|
|
const Infinite = new InfiniteList(0, x => x + 2);
|
|
|
|
expect(Infinite.get(5) instanceof InfiniteListItem).toBe(true);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("Should be 22", () => {
|
|
|
|
const Infinite = new InfiniteList(0, x => x + 2);
|
|
|
|
expect(Infinite.get(11).value).toBe(22);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("Should be 0", () => {
|
|
|
|
const Infinite = new InfiniteList(0, x => x + 2);
|
|
|
|
expect(Infinite.first().value).toBe(0);
|
|
|
|
expect(Infinite.top().value).toBe(0);
|
|
|
|
expect(Infinite.last().value).toBe(Infinity);
|
|
|
|
expect(Infinite.end().value).toBe(Infinity);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("Should be 102", () => {
|
|
|
|
const Infinite = new InfiniteList(0, x => x + 2);
|
|
|
|
const hundred = Infinite.get(50);
|
|
|
|
expect(hundred.next().value).toBe(102);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("Should be [ 50, 52, 54, 56 ]", () => {
|
|
|
|
const Infinite = new InfiniteList(0, x => x + 2);
|
|
|
|
|
|
|
|
const fourtyEight = Infinite.get(24);
|
|
|
|
const arr = [
|
|
|
|
fourtyEight.next(),
|
|
|
|
fourtyEight.next(2),
|
|
|
|
fourtyEight.next(3),
|
|
|
|
fourtyEight.next(4)
|
|
|
|
]
|
|
|
|
|
|
|
|
expect(arr.map(x => x.value)).toEqual([ 50, 52, 54, 56 ]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("Should be 98", () => {
|
|
|
|
const Infinite = new InfiniteList(0, x => x + 2);
|
|
|
|
const hundred = Infinite.get(50);
|
|
|
|
expect(hundred.previous().value).toBe(98);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("Should be [ 46, 44, 42, 40 ]", () => {
|
|
|
|
const Infinite = new InfiniteList(0, x => x + 2);
|
|
|
|
|
|
|
|
const fourtyEight = Infinite.get(24);
|
|
|
|
const arr = [
|
|
|
|
fourtyEight.previous(),
|
|
|
|
fourtyEight.previous(2),
|
|
|
|
fourtyEight.previous(3),
|
|
|
|
fourtyEight.previous(4)
|
|
|
|
]
|
|
|
|
|
|
|
|
expect(arr.map(x => x.value)).toEqual([ 46, 44, 42, 40 ]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("Should equal []", () => {
|
|
|
|
const Infinite = new InfiniteList(0, x => x + 2);
|
|
|
|
|
|
|
|
expect(Infinite.take()).toEqual([ ]);
|
|
|
|
expect(Infinite.take(0)).toEqual([ ]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("Should equal [ 0 ]", () => {
|
|
|
|
const Infinite = new InfiniteList(0, x => x + 2);
|
|
|
|
|
|
|
|
expect(Infinite.take(0, 0).map(x => x.value)).toEqual([ 0 ]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("Should equal [ 0, 2, 4, 6, 8 ]", () => {
|
|
|
|
const Infinite = new InfiniteList(0, x => x + 2);
|
|
|
|
expect(Infinite.take(5).map(x => x.value)).toEqual([0, 2, 4, 6, 8]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("Should equal [ 16, 18, 20 ]", () => {
|
|
|
|
const Infinite = new InfiniteList(0, x => x + 2);
|
|
|
|
expect(Infinite.take(8, 10).map(x => x.value)).toEqual([16, 18, 20]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("Should be [ 0, 2, 4, 6, 8 ]", () => {
|
|
|
|
const Infinite = new InfiniteList(0, x => x + 2);
|
|
|
|
|
|
|
|
const acc = [];
|
|
|
|
for (let i of Infinite) {
|
|
|
|
if (i.index >= 5) break;
|
|
|
|
acc.push(i.value)
|
|
|
|
}
|
|
|
|
|
|
|
|
expect(acc).toEqual([0, 2, 4, 6, 8]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("Stringified InfiniteList should equal test string [0]", () => {
|
|
|
|
const a = {
|
|
|
|
i: 10
|
|
|
|
}
|
|
|
|
a.a = a;
|
|
|
|
const next = x => {
|
|
|
|
const y = {
|
|
|
|
i: x.i + 5
|
|
|
|
};
|
|
|
|
y.a = y;
|
|
|
|
return y;
|
|
|
|
}
|
|
|
|
|
|
|
|
const str = new InfiniteList(a, next)
|
|
|
|
.get(5)
|
|
|
|
.toString();
|
|
|
|
|
|
|
|
expect(str.trimify()).toBe(testStrings[0].trimify());
|
|
|
|
});
|
|
|
|
|
|
|
|
it("Stringified InfiniteListItem should equal test string [1]", () => {
|
|
|
|
const a = {
|
|
|
|
i: 10
|
|
|
|
}
|
|
|
|
a.a = a;
|
|
|
|
const next = x => {
|
|
|
|
const y = {
|
|
|
|
i: x.i + 5
|
|
|
|
};
|
|
|
|
y.a = y;
|
|
|
|
return y;
|
|
|
|
}
|
|
|
|
|
|
|
|
const str = new InfiniteList(a, next).toString();
|
|
|
|
|
|
|
|
expect(str.trimify()).toBe(testStrings[1].trimify());
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|