computed-types
Version:
Runtime validation types for TypeScript.
206 lines (129 loc) • 26.7 kB
JavaScript
;
require("mocha");
var _chai = require("chai");
var _number = _interopRequireDefault(require("./number"));
var _errors = require("./schema/errors");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/* eslint-disable @typescript-eslint/no-explicit-any */
describe('number', () => {
it('number()', () => {
_chai.assert.equal((0, _number.default)(123), 123);
_chai.assert.equal((0, _number.default)(12.3), 12.3);
_chai.assert.equal((0, _number.default)(-12.3), -12.3);
_chai.assert.equal((0, _number.default)(0), 0);
_chai.assert.isNaN((0, _number.default)(NaN));
_chai.assert.equal((0, _number.default)(Number.EPSILON), Number.EPSILON);
_chai.assert.equal((0, _number.default)(Number.MAX_VALUE), Number.MAX_VALUE);
_chai.assert.equal((0, _number.default)(Number.MIN_VALUE), Number.MIN_VALUE);
_chai.assert.equal((0, _number.default)(Number.MAX_SAFE_INTEGER), Number.MAX_SAFE_INTEGER);
_chai.assert.equal((0, _number.default)(Number.MIN_SAFE_INTEGER), Number.MIN_SAFE_INTEGER);
_chai.assert.equal((0, _number.default)(Number.POSITIVE_INFINITY), Number.POSITIVE_INFINITY);
_chai.assert.equal((0, _number.default)(Number.NEGATIVE_INFINITY), Number.NEGATIVE_INFINITY);
_chai.assert.throws(() => (0, _number.default)('12.3'), _errors.ValidationError);
_chai.assert.throws(() => (0, _number.default)('hello'), _errors.ValidationError);
_chai.assert.throws(() => (0, _number.default)('hello'), _errors.ValidationError);
_chai.assert.throws(() => (0, _number.default)('2 3'), _errors.ValidationError);
_chai.assert.throws(() => (0, _number.default)(undefined), _errors.ValidationError);
_chai.assert.throws(() => (0, _number.default)(null), _errors.ValidationError);
_chai.assert.throws(() => (0, _number.default)(true), _errors.ValidationError);
_chai.assert.throws(() => (0, _number.default)(false), _errors.ValidationError);
});
it('.float()', () => {
_chai.assert.equal(_number.default.float()(123), 123);
_chai.assert.equal(_number.default.float()(12.3), 12.3);
_chai.assert.equal(_number.default.float()(-12.3), -12.3);
_chai.assert.equal(_number.default.float()(0), 0);
_chai.assert.equal(_number.default.float()(Number.EPSILON), Number.EPSILON);
_chai.assert.equal(_number.default.float()(Number.MAX_VALUE), Number.MAX_VALUE);
_chai.assert.equal(_number.default.float()(Number.MIN_VALUE), Number.MIN_VALUE);
_chai.assert.throws(() => _number.default.float()(NaN), _errors.ValidationError);
_chai.assert.throws(() => _number.default.float()(Number.POSITIVE_INFINITY), _errors.ValidationError);
_chai.assert.throws(() => _number.default.float()(Number.NEGATIVE_INFINITY), _errors.ValidationError);
_chai.assert.throws(() => _number.default.float()('12.3'), _errors.ValidationError);
});
it('.integer()', () => {
_chai.assert.equal(_number.default.integer()(123), 123);
_chai.assert.equal(_number.default.integer()(0), 0);
_chai.assert.equal(_number.default.integer()(-3), -3);
_chai.assert.throws(() => _number.default.integer()(undefined), _errors.ValidationError);
_chai.assert.throws(() => _number.default.integer()(null), _errors.ValidationError);
_chai.assert.throws(() => _number.default.integer()(NaN), _errors.ValidationError);
_chai.assert.throws(() => _number.default.integer()(Number.POSITIVE_INFINITY), _errors.ValidationError);
_chai.assert.throws(() => _number.default.integer()(1.23), _errors.ValidationError);
_chai.assert.throws(() => _number.default.integer()(-1.23), _errors.ValidationError);
_chai.assert.throws(() => _number.default.integer()('12.3'), _errors.ValidationError);
_chai.assert.throws(() => _number.default.integer()('hello'), _errors.ValidationError);
});
it('.toExponential()', () => {
_chai.assert.equal(_number.default.toExponential()(1234), '1.234e+3');
});
it('.toExponential().toUpperCase()', () => {
_chai.assert.equal(_number.default.toExponential().toUpperCase()(1234), '1.234E+3');
});
it('.toFixed()', () => {
_chai.assert.equal(_number.default.toFixed(1)(12.34), '12.3');
});
it('.toLocaleString()', () => {
_chai.assert.equal(_number.default.toLocaleString()(1234), '1,234');
_chai.assert.equal(_number.default.toLocaleString('en-US')(1234), '1,234');
});
it('.toPrecision()', () => {
_chai.assert.equal(_number.default.toPrecision()(123.456), '123.456');
_chai.assert.equal(_number.default.toPrecision(2)(123.456), '1.2e+2');
_chai.assert.equal(_number.default.toPrecision(3)(123.456), '123');
});
it('.toString()', () => {
_chai.assert.equal(_number.default.toString()(123.456), '123.456');
_chai.assert.equal(_number.default.toString(16)(123.456), '7b.74bc6a7ef9dc');
});
it('.min()', () => {
_chai.assert.equal(_number.default.min(3)(3), 3);
_chai.assert.equal(_number.default.min(3)(3.5), 3.5);
_chai.assert.throw(() => _number.default.min(3)(2.9), RangeError);
_chai.assert.throw(() => _number.default.min(3)(NaN), RangeError);
_chai.assert.throw(() => _number.default.min(3)(null), _errors.ValidationError);
_chai.assert.throw(() => _number.default.min(3, 'test')(1), _errors.ValidationError, 'test');
});
it('.max()', () => {
_chai.assert.equal(_number.default.max(3)(3), 3);
_chai.assert.equal(_number.default.max(3)(2.9), 2.9);
_chai.assert.throw(() => _number.default.max(3)(4.1), RangeError);
_chai.assert.throw(() => _number.default.max(3)(NaN), RangeError);
_chai.assert.throw(() => _number.default.max(3)(null), _errors.ValidationError);
_chai.assert.throw(() => _number.default.max(3, 'test')(6), _errors.ValidationError, 'test');
});
it('.gte()', () => {
_chai.assert.equal(_number.default.gte(3)(3), 3);
_chai.assert.equal(_number.default.gte(3)(3.1), 3.1);
_chai.assert.throw(() => _number.default.gte(3)(2.9), RangeError);
});
it('.lte()', () => {
_chai.assert.equal(_number.default.lte(3)(3), 3);
_chai.assert.equal(_number.default.lte(3)(2.9), 2.9);
_chai.assert.throw(() => _number.default.lte(3)(3.1), RangeError);
});
it('.gt()', () => {
_chai.assert.equal(_number.default.gt(3)(3.1), 3.1);
_chai.assert.throw(() => _number.default.gt(3)(3), RangeError);
_chai.assert.throw(() => _number.default.gt(3)(NaN), RangeError);
_chai.assert.throw(() => _number.default.gt(3)(2.9), RangeError);
_chai.assert.throw(() => _number.default.gt(3, 'test')(2.9), _errors.ValidationError, 'test');
});
it('.lt()', () => {
_chai.assert.equal(_number.default.lt(3)(2.9), 2.9);
_chai.assert.throw(() => _number.default.lt(3)(3), RangeError);
_chai.assert.throw(() => _number.default.lt(3)(NaN), RangeError);
_chai.assert.throw(() => _number.default.lt(3)(3.1), RangeError);
_chai.assert.throw(() => _number.default.lt(3, 'test')(3.1), _errors.ValidationError, 'test');
});
it('.between()', () => {
_chai.assert.equal(_number.default.between(1, 3)(1), 1);
_chai.assert.equal(_number.default.between(1, 3)(1.5), 1.5);
_chai.assert.equal(_number.default.between(1, 3)(3), 3);
_chai.assert.throw(() => _number.default.between(1, 3)(0.9), RangeError);
_chai.assert.throw(() => _number.default.between(1, 3)(3.1), RangeError);
_chai.assert.throw(() => _number.default.between(1, 3)(NaN), RangeError);
_chai.assert.throw(() => _number.default.between(1, 3, 'test')(NaN), _errors.ValidationError, 'test');
});
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9udW1iZXIudGVzdC50cyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsIml0IiwiYXNzZXJ0IiwiZXF1YWwiLCJpc05hTiIsIk5hTiIsIk51bWJlciIsIkVQU0lMT04iLCJNQVhfVkFMVUUiLCJNSU5fVkFMVUUiLCJNQVhfU0FGRV9JTlRFR0VSIiwiTUlOX1NBRkVfSU5URUdFUiIsIlBPU0lUSVZFX0lORklOSVRZIiwiTkVHQVRJVkVfSU5GSU5JVFkiLCJ0aHJvd3MiLCJWYWxpZGF0aW9uRXJyb3IiLCJ1bmRlZmluZWQiLCJudW1iZXIiLCJmbG9hdCIsImludGVnZXIiLCJ0b0V4cG9uZW50aWFsIiwidG9VcHBlckNhc2UiLCJ0b0ZpeGVkIiwidG9Mb2NhbGVTdHJpbmciLCJ0b1ByZWNpc2lvbiIsInRvU3RyaW5nIiwibWluIiwidGhyb3ciLCJSYW5nZUVycm9yIiwibWF4IiwiZ3RlIiwibHRlIiwiZ3QiLCJsdCIsImJldHdlZW4iXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQTtBQUVBQSxRQUFRLENBQUMsUUFBRCxFQUFXLE1BQU07QUFDdkJDLEVBQUFBLEVBQUUsQ0FBQyxVQUFELEVBQWEsTUFBTTtBQUNuQkMsaUJBQU9DLEtBQVAsQ0FBYSxxQkFBTyxHQUFQLENBQWIsRUFBMEIsR0FBMUI7O0FBQ0FELGlCQUFPQyxLQUFQLENBQWEscUJBQU8sSUFBUCxDQUFiLEVBQTJCLElBQTNCOztBQUNBRCxpQkFBT0MsS0FBUCxDQUFhLHFCQUFPLENBQUMsSUFBUixDQUFiLEVBQTRCLENBQUMsSUFBN0I7O0FBQ0FELGlCQUFPQyxLQUFQLENBQWEscUJBQU8sQ0FBUCxDQUFiLEVBQXdCLENBQXhCOztBQUNBRCxpQkFBT0UsS0FBUCxDQUFhLHFCQUFPQyxHQUFQLENBQWI7O0FBQ0FILGlCQUFPQyxLQUFQLENBQWEscUJBQU9HLE1BQU0sQ0FBQ0MsT0FBZCxDQUFiLEVBQXFDRCxNQUFNLENBQUNDLE9BQTVDOztBQUNBTCxpQkFB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QUFjRCxDQTlKTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdtb2NoYSc7XG5pbXBvcnQgeyBhc3NlcnQgfSBmcm9tICdjaGFpJztcbmltcG9ydCBudW1iZXIgZnJvbSAnLi9udW1iZXInO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi9zY2hlbWEvZXJyb3JzJztcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG5kZXNjcmliZSgnbnVtYmVyJywgKCkgPT4ge1xuICBpdCgnbnVtYmVyKCknLCAoKSA9PiB7XG4gICAgYXNzZXJ0LmVxdWFsKG51bWJlcigxMjMpLCAxMjMpO1xuICAgIGFzc2VydC5lcXVhbChudW1iZXIoMTIuMyksIDEyLjMpO1xuICAgIGFzc2VydC5lcXVhbChudW1iZXIoLTEyLjMpLCAtMTIuMyk7XG4gICAgYXNzZXJ0LmVxdWFsKG51bWJlcigwKSwgMCk7XG4gICAgYXNzZXJ0LmlzTmFOKG51bWJlcihOYU4pKTtcbiAgICBhc3NlcnQuZXF1YWwobnVtYmVyKE51bWJlci5FUFNJTE9OKSwgTnVtYmVyLkVQU0lMT04pO1xuICAgIGFzc2VydC5lcXVhbChudW1iZXIoTnVtYmVyLk1BWF9WQUxVRSksIE51bWJlci5NQVhfVkFMVUUpO1xuICAgIGFzc2VydC5lcXVhbChudW1iZXIoTnVtYmVyLk1JTl9WQUxVRSksIE51bWJlci5NSU5fVkFMVUUpO1xuICAgIGFzc2VydC5lcXVhbChudW1iZXIoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7XG4gICAgYXNzZXJ0LmVxdWFsKG51bWJlcihOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiksIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSKTtcbiAgICBhc3NlcnQuZXF1YWwobnVtYmVyKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG4gICAgYXNzZXJ0LmVxdWFsKG51bWJlcihOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpLCBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpO1xuXG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBudW1iZXIoJzEyLjMnIGFzIGFueSksIFZhbGlkYXRpb25FcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBudW1iZXIoJ2hlbGxvJyBhcyBhbnkpLCBWYWxpZGF0aW9uRXJyb3IpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbnVtYmVyKCdoZWxsbycgYXMgYW55KSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IG51bWJlcignMiAzJyBhcyBhbnkpLCBWYWxpZGF0aW9uRXJyb3IpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbnVtYmVyKHVuZGVmaW5lZCBhcyBhbnkpLCBWYWxpZGF0aW9uRXJyb3IpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbnVtYmVyKG51bGwgYXMgYW55KSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IG51bWJlcih0cnVlIGFzIGFueSksIFZhbGlkYXRpb25FcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBudW1iZXIoZmFsc2UgYXMgYW55KSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgfSk7XG5cbiAgaXQoJy5mbG9hdCgpJywgKCkgPT4ge1xuICAgIGFzc2VydC5lcXVhbChudW1iZXIuZmxvYXQoKSgxMjMpLCAxMjMpO1xuICAgIGFzc2VydC5lcXVhbChudW1iZXIuZmxvYXQoKSgxMi4zKSwgMTIuMyk7XG4gICAgYXNzZXJ0LmVxdWFsKG51bWJlci5mbG9hdCgpKC0xMi4zKSwgLTEyLjMpO1xuICAgIGFzc2VydC5lcXVhbChudW1iZXIuZmxvYXQoKSgwKSwgMCk7XG4gICAgYXNzZXJ0LmVxdWFsKG51bWJlci5mbG9hdCgpKE51bWJlci5FUFNJTE9OKSwgTnVtYmVyLkVQU0lMT04pO1xuICAgIGFzc2VydC5lcXVhbChudW1iZXIuZmxvYXQoKShOdW1iZXIuTUFYX1ZBTFVFKSwgTnVtYmVyLk1BWF9WQUxVRSk7XG4gICAgYXNzZXJ0LmVxdWFsKG51bWJlci5mbG9hdCgpKE51bWJlci5NSU5fVkFMVUUpLCBOdW1iZXIuTUlOX1ZBTFVFKTtcblxuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbnVtYmVyLmZsb2F0KCkoTmFOKSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT4gbnVtYmVyLmZsb2F0KCkoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxcbiAgICAgIFZhbGlkYXRpb25FcnJvcixcbiAgICApO1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiBudW1iZXIuZmxvYXQoKShOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpLFxuICAgICAgVmFsaWRhdGlvbkVycm9yLFxuICAgICk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBudW1iZXIuZmxvYXQoKSgnMTIuMycgYXMgYW55KSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgfSk7XG5cbiAgaXQoJy5pbnRlZ2VyKCknLCAoKSA9PiB7XG4gICAgYXNzZXJ0LmVxdWFsKG51bWJlci5pbnRlZ2VyKCkoMTIzKSwgMTIzKTtcbiAgICBhc3NlcnQuZXF1YWwobnVtYmVyLmludGVnZXIoKSgwKSwgMCk7XG4gICAgYXNzZXJ0LmVxdWFsKG51bWJlci5pbnRlZ2VyKCkoLTMpLCAtMyk7XG5cbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IG51bWJlci5pbnRlZ2VyKCkodW5kZWZpbmVkIGFzIGFueSksIFZhbGlkYXRpb25FcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBudW1iZXIuaW50ZWdlcigpKG51bGwgYXMgYW55KSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IG51bWJlci5pbnRlZ2VyKCkoTmFOKSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT4gbnVtYmVyLmludGVnZXIoKShOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLFxuICAgICAgVmFsaWRhdGlvbkVycm9yLFxuICAgICk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBudW1iZXIuaW50ZWdlcigpKDEuMjMpLCBWYWxpZGF0aW9uRXJyb3IpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbnVtYmVyLmludGVnZXIoKSgtMS4yMyksIFZhbGlkYXRpb25FcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBudW1iZXIuaW50ZWdlcigpKCcxMi4zJyBhcyBhbnkpLCBWYWxpZGF0aW9uRXJyb3IpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbnVtYmVyLmludGVnZXIoKSgnaGVsbG8nIGFzIGFueSksIFZhbGlkYXRpb25FcnJvcik7XG4gIH0pO1xuXG4gIGl0KCcudG9FeHBvbmVudGlhbCgpJywgKCkgPT4ge1xuICAgIGFzc2VydC5lcXVhbChudW1iZXIudG9FeHBvbmVudGlhbCgpKDEyMzQpLCAnMS4yMzRlKzMnKTtcbiAgfSk7XG5cbiAgaXQoJy50b0V4cG9uZW50aWFsKCkudG9VcHBlckNhc2UoKScsICgpID0+IHtcbiAgICBhc3NlcnQuZXF1YWwobnVtYmVyLnRvRXhwb25lbnRpYWwoKS50b1VwcGVyQ2FzZSgpKDEyMzQpLCAnMS4yMzRFKzMnKTtcbiAgfSk7XG5cbiAgaXQoJy50b0ZpeGVkKCknLCAoKSA9PiB7XG4gICAgYXNzZXJ0LmVxdWFsKG51bWJlci50b0ZpeGVkKDEpKDEyLjM0KSwgJzEyLjMnKTtcbiAgfSk7XG5cbiAgaXQoJy50b0xvY2FsZVN0cmluZygpJywgKCkgPT4ge1xuICAgIGFzc2VydC5lcXVhbChudW1iZXIudG9Mb2NhbGVTdHJpbmcoKSgxMjM0KSwgJzEsMjM0Jyk7XG4gICAgYXNzZXJ0LmVxdWFsKG51bWJlci50b0xvY2FsZVN0cmluZygnZW4tVVMnKSgxMjM0KSwgJzEsMjM0Jyk7XG4gIH0pO1xuXG4gIGl0KCcudG9QcmVjaXNpb24oKScsICgpID0+IHtcbiAgICBhc3NlcnQuZXF1YWwobnVtYmVyLnRvUHJlY2lzaW9uKCkoMTIzLjQ1NiksICcxMjMuNDU2Jyk7XG4gICAgYXNzZXJ0LmVxdWFsKG51bWJlci50b1ByZWNpc2lvbigyKSgxMjMuNDU2KSwgJzEuMmUrMicpO1xuICAgIGFzc2VydC5lcXVhbChudW1iZXIudG9QcmVjaXNpb24oMykoMTIzLjQ1NiksICcxMjMnKTtcbiAgfSk7XG5cbiAgaXQoJy50b1N0cmluZygpJywgKCkgPT4ge1xuICAgIGFzc2VydC5lcXVhbChudW1iZXIudG9TdHJpbmcoKSgxMjMuNDU2KSwgJzEyMy40NTYnKTtcbiAgICBhc3NlcnQuZXF1YWwobnVtYmVyLnRvU3RyaW5nKDE2KSgxMjMuNDU2KSwgJzdiLjc0YmM2YTdlZjlkYycpO1xuICB9KTtcblxuICBpdCgnLm1pbigpJywgKCkgPT4ge1xuICAgIGFzc2VydC5lcXVhbChudW1iZXIubWluKDMpKDMpLCAzKTtcbiAgICBhc3NlcnQuZXF1YWwobnVtYmVyLm1pbigzKSgzLjUpLCAzLjUpO1xuXG4gICAgYXNzZXJ0LnRocm93KCgpID0+IG51bWJlci5taW4oMykoMi45KSwgUmFuZ2VFcnJvcik7XG4gICAgYXNzZXJ0LnRocm93KCgpID0+IG51bWJlci5taW4oMykoTmFOKSwgUmFuZ2VFcnJvcik7XG4gICAgYXNzZXJ0LnRocm93KCgpID0+IG51bWJlci5taW4oMykobnVsbCBhcyBhbnkpLCBWYWxpZGF0aW9uRXJyb3IpO1xuICAgIGFzc2VydC50aHJvdygoKSA9PiBudW1iZXIubWluKDMsICd0ZXN0JykoMSksIFZhbGlkYXRpb25FcnJvciwgJ3Rlc3QnKTtcbiAgfSk7XG5cbiAgaXQoJy5tYXgoKScsICgpID0+IHtcbiAgICBhc3NlcnQuZXF1YWwobnVtYmVyLm1heCgzKSgzKSwgMyk7XG4gICAgYXNzZXJ0LmVxdWFsKG51bWJlci5tYXgoMykoMi45KSwgMi45KTtcblxuICAgIGFzc2VydC50aHJvdygoKSA9PiBudW1iZXIubWF4KDMpKDQuMSksIFJhbmdlRXJyb3IpO1xuICAgIGFzc2VydC50aHJvdygoKSA9PiBudW1iZXIubWF4KDMpKE5hTiksIFJhbmdlRXJyb3IpO1xuICAgIGFzc2VydC50aHJvdygoKSA9PiBudW1iZXIubWF4KDMpKG51bGwgYXMgYW55KSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhc3NlcnQudGhyb3coKCkgPT4gbnVtYmVyLm1heCgzLCAndGVzdCcpKDYpLCBWYWxpZGF0aW9uRXJyb3IsICd0ZXN0Jyk7XG4gIH0pO1xuXG4gIGl0KCcuZ3RlKCknLCAoKSA9PiB7XG4gICAgYXNzZXJ0LmVxdWFsKG51bWJlci5ndGUoMykoMyksIDMpO1xuICAgIGFzc2VydC5lcXVhbChudW1iZXIuZ3RlKDMpKDMuMSksIDMuMSk7XG5cbiAgICBhc3NlcnQudGhyb3coKCkgPT4gbnVtYmVyLmd0ZSgzKSgyLjkpLCBSYW5nZUVycm9yKTtcbiAgfSk7XG5cbiAgaXQoJy5sdGUoKScsICgpID0+IHtcbiAgICBhc3NlcnQuZXF1YWwobnVtYmVyLmx0ZSgzKSgzKSwgMyk7XG4gICAgYXNzZXJ0LmVxdWFsKG51bWJlci5sdGUoMykoMi45KSwgMi45KTtcblxuICAgIGFzc2VydC50aHJvdygoKSA9PiBudW1iZXIubHRlKDMpKDMuMSksIFJhbmdlRXJyb3IpO1xuICB9KTtcblxuICBpdCgnLmd0KCknLCAoKSA9PiB7XG4gICAgYXNzZXJ0LmVxdWFsKG51bWJlci5ndCgzKSgzLjEpLCAzLjEpO1xuXG4gICAgYXNzZXJ0LnRocm93KCgpID0+IG51bWJlci5ndCgzKSgzKSwgUmFuZ2VFcnJvcik7XG4gICAgYXNzZXJ0LnRocm93KCgpID0+IG51bWJlci5ndCgzKShOYU4pLCBSYW5nZUVycm9yKTtcbiAgICBhc3NlcnQudGhyb3coKCkgPT4gbnVtYmVyLmd0KDMpKDIuOSksIFJhbmdlRXJyb3IpO1xuICAgIGFzc2VydC50aHJvdygoKSA9PiBudW1iZXIuZ3QoMywgJ3Rlc3QnKSgyLjkpLCBWYWxpZGF0aW9uRXJyb3IsICd0ZXN0Jyk7XG4gIH0pO1xuXG4gIGl0KCcubHQoKScsICgpID0+IHtcbiAgICBhc3NlcnQuZXF1YWwobnVtYmVyLmx0KDMpKDIuOSksIDIuOSk7XG5cbiAgICBhc3NlcnQudGhyb3coKCkgPT4gbnVtYmVyLmx0KDMpKDMpLCBSYW5nZUVycm9yKTtcbiAgICBhc3NlcnQudGhyb3coKCkgPT4gbnVtYmVyLmx0KDMpKE5hTiksIFJhbmdlRXJyb3IpO1xuICAgIGFzc2VydC50aHJvdygoKSA9PiBudW1iZXIubHQoMykoMy4xKSwgUmFuZ2VFcnJvcik7XG4gICAgYXNzZXJ0LnRocm93KCgpID0+IG51bWJlci5sdCgzLCAndGVzdCcpKDMuMSksIFZhbGlkYXRpb25FcnJvciwgJ3Rlc3QnKTtcbiAgfSk7XG5cbiAgaXQoJy5iZXR3ZWVuKCknLCAoKSA9PiB7XG4gICAgYXNzZXJ0LmVxdWFsKG51bWJlci5iZXR3ZWVuKDEsIDMpKDEpLCAxKTtcbiAgICBhc3NlcnQuZXF1YWwobnVtYmVyLmJldHdlZW4oMSwgMykoMS41KSwgMS41KTtcbiAgICBhc3NlcnQuZXF1YWwobnVtYmVyLmJldHdlZW4oMSwgMykoMyksIDMpO1xuXG4gICAgYXNzZXJ0LnRocm93KCgpID0+IG51bWJlci5iZXR3ZWVuKDEsIDMpKDAuOSksIFJhbmdlRXJyb3IpO1xuICAgIGFzc2VydC50aHJvdygoKSA9PiBudW1iZXIuYmV0d2VlbigxLCAzKSgzLjEpLCBSYW5nZUVycm9yKTtcbiAgICBhc3NlcnQudGhyb3coKCkgPT4gbnVtYmVyLmJldHdlZW4oMSwgMykoTmFOKSwgUmFuZ2VFcnJvcik7XG4gICAgYXNzZXJ0LnRocm93KFxuICAgICAgKCkgPT4gbnVtYmVyLmJldHdlZW4oMSwgMywgJ3Rlc3QnKShOYU4pLFxuICAgICAgVmFsaWRhdGlvbkVycm9yLFxuICAgICAgJ3Rlc3QnLFxuICAgICk7XG4gIH0pO1xufSk7XG4iXX0=