spica
Version:
Supervisor, Coroutine, Channel, select, AtomicPromise, Cancellation, Cache, List, Queue, Stack, and some utils.
25 lines (19 loc) • 1.05 kB
text/typescript
import { Sequence } from '../../../sequence';
describe('Unit: lib/monad/sequence/member/iterate', () => {
describe('iterate', () => {
it('', () => {
let thunk = new Sequence<number, number>((_ = 0, cons) => cons()).iterate();
assert.deepStrictEqual(thunk, [undefined, Sequence.Iterator.done, -1]);
thunk = new Sequence<number, number>((n = 0, cons) => cons(n)).iterate();
assert.deepStrictEqual(thunk, [0, Sequence.Thunk.iterator(thunk), 0]);
thunk = new Sequence<number, number>((n = 1, cons) => n < 4 ? cons(n, n * 2) : cons(n)).iterate();
assert.deepStrictEqual(thunk, [1, Sequence.Thunk.iterator(thunk), 0]);
thunk = Sequence.Thunk.iterator(thunk)();
assert.deepStrictEqual(thunk, [2, Sequence.Thunk.iterator(thunk), 1]);
thunk = Sequence.Thunk.iterator(thunk)();
assert.deepStrictEqual(thunk, [4, Sequence.Thunk.iterator(thunk), 2]);
thunk = Sequence.Thunk.iterator(thunk)();
assert.deepStrictEqual(thunk, [undefined, Sequence.Iterator.done, -1]);
});
});
});