@fractorysolutions/safe-units
Version:
Type-safe TypeScript units of measure
61 lines • 3.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var genericMeasureFactory_1 = require("../genericMeasureFactory");
var genericMeasureUtils_1 = require("../genericMeasureUtils");
var numberMeasure_1 = require("../numberMeasure");
describe("Generic measures", function () {
describe("function wrappers", function () {
var meters = numberMeasure_1.Measure.dimension("L", "m");
var add = function (left, right) { return left + right; };
it("unary wrapper", function () {
var increment = (0, genericMeasureUtils_1.wrapUnaryFn)(function (x) { return x + 1; });
var result = increment(numberMeasure_1.Measure.of(10, meters));
expect(result).toEqual(numberMeasure_1.Measure.of(11, meters));
});
it("binary wrapper", function () {
var measureAdd = (0, genericMeasureUtils_1.wrapBinaryFn)(add);
var result = measureAdd(numberMeasure_1.Measure.of(5, meters), numberMeasure_1.Measure.of(10, meters));
expect(result).toEqual(numberMeasure_1.Measure.of(15, meters));
});
it("spread wrapper", function () {
var sum = (0, genericMeasureUtils_1.wrapSpreadFn)(function () {
var values = [];
for (var _i = 0; _i < arguments.length; _i++) {
values[_i] = arguments[_i];
}
return values.reduce(add, 0);
});
var result = sum(numberMeasure_1.Measure.of(5, meters), numberMeasure_1.Measure.of(10, meters), numberMeasure_1.Measure.of(15, meters));
expect(result).toEqual(numberMeasure_1.Measure.of(30, meters));
});
it("reducer wrapper", function () {
var sum = (0, genericMeasureUtils_1.wrapReducerFn)(add);
var result = sum(numberMeasure_1.Measure.of(5, meters), numberMeasure_1.Measure.of(10, meters), numberMeasure_1.Measure.of(15, meters));
expect(result).toEqual(numberMeasure_1.Measure.of(30, meters));
});
});
describe("static methods", function () {
var numericOps = {
one: function () { return 1; },
neg: function (x) { return -x; },
add: function (x, y) { return x + y; },
sub: function (x, y) { return x - y; },
mult: function (x, y) { return x * y; },
div: function (x, y) { return x / y; },
pow: function (x, y) { return Math.pow(x, y); },
compare: function (x, y) { return x - y; },
format: function (x) { return "".concat(x); },
};
it("should attach static methods when given", function () {
var LocalMeasure = (0, genericMeasureFactory_1.createMeasureType)(numericOps, {
staticMethod: function () { return "method"; },
});
expect("staticMethod" in LocalMeasure).toBe(true);
});
it("should not attach static methods when omitted", function () {
var LocalMeasure = (0, genericMeasureFactory_1.createMeasureType)(numericOps);
expect("staticMethod" in LocalMeasure).toBe(false);
});
});
});
//# sourceMappingURL=genericMeasureTests.js.map