ts-prime
Version:
A utility library for JavaScript and Typescript.
66 lines (65 loc) • 2.27 kB
JavaScript
import { pipe } from './pipe';
import { map } from './map';
import { take } from './take';
import { filter } from './filter';
import { identity } from './identity';
it('should pipe a single operation', function () {
var result = pipe(1, function (x) { return x * 2; });
expect(result).toEqual(2);
});
it('should pipe operations', function () {
var result = pipe(1, function (x) { return x * 2; }, function (x) { return x * 3; });
expect(result).toEqual(6);
});
describe('lazy', function () {
it('lazy map + take', function () {
var count = jest.fn();
var result = pipe([1, 2, 3], map(function (x) {
count();
return x * 10;
}), take(2));
expect(count).toHaveBeenCalledTimes(2);
expect(result).toEqual([10, 20]);
});
it('lazy map + filter + take', function () {
var count = jest.fn();
var result = pipe([1, 2, 3, 4, 5], map(function (x) {
count();
return x * 10;
}), filter(function (x) { return (x / 10) % 2 === 1; }), take(2));
expect(count).toHaveBeenCalledTimes(3);
expect(result).toEqual([10, 30]);
});
it('break lazy', function () {
var count = jest.fn();
var result = pipe([1, 2, 3], map(function (x) {
count();
return x * 10;
}), function (x) { return x; }, take(2));
expect(count).toHaveBeenCalledTimes(3);
expect(result).toEqual([10, 20]);
});
it('multiple take', function () {
var count = jest.fn();
var result = pipe([1, 2, 3], map(function (x) {
count();
return x * 10;
}), take(2), take(1));
expect(count).toHaveBeenCalledTimes(1);
expect(result).toEqual([10]);
});
it('multiple lazy', function () {
var count = jest.fn();
var count2 = jest.fn();
var result = pipe([1, 2, 3, 4, 5, 6, 7], map(function (x) {
count();
return x * 10;
}), take(4), identity, map(function (x) {
count2();
return x * 10;
}), take(2));
expect(count).toHaveBeenCalledTimes(4);
expect(count2).toHaveBeenCalledTimes(2);
expect(result).toEqual([100, 200]);
});
});