UNPKG

@tsdotnet/integer

Version:

Utility for processing and asserting integers.

104 lines 3.29 kB
"use strict"; /*! * @author electricessence / https://github.com/electricessence/ * Licensing: MIT */ Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const ArgumentException_1 = tslib_1.__importDefault(require("@tsdotnet/exceptions/dist/ArgumentException")); const ArgumentOutOfRangeException_1 = tslib_1.__importDefault(require("@tsdotnet/exceptions/dist/ArgumentOutOfRangeException")); const MAX_32 = 2147483647; function integer(n) { if (typeof n != 'number') return NaN; if (n > 0) return n > MAX_32 ? Math.floor(n) : (n | 0); if (n < 0) return n < -MAX_32 ? Math.ceil(n) : (n | 0); return n; } /* eslint-disable no-inner-declarations,@typescript-eslint/no-namespace */ (function (integer) { /* tslint:disable:no-bitwise */ integer.MAX_32_BIT = 2147483647; integer.MAX_VALUE = 9007199254740991; const NUMBER = 'number'; /** * Converts any number to its 32bit counterpart. * Throws if conversion is not possible. * @param n * @returns {number} */ function as32Bit(n) { if (isNaN(n)) throw new ArgumentException_1.default('n', 'is not a number.'); const result = n | 0; switch (result) { case 1: case -1: if (n !== result) throw new ArgumentOutOfRangeException_1.default('n', n, 'is too large to be a 32 bit integer.'); } return result; } integer.as32Bit = as32Bit; /** * Returns true if the value is an integer. * @param n * @returns {boolean} */ function is(n) { return typeof n === NUMBER && isFinite(n) && n === integer(n); } integer.is = is; /** * Returns true if the value is within a 32 bit range. * @param n * @returns {boolean} */ function is32Bit(n) { return n === (n | 0); } integer.is32Bit = is32Bit; /** * Throws if not an integer. * @param n * @param argumentName * @returns {boolean} */ function assert(n, argumentName) { const i = is(n); if (!i) throw new ArgumentException_1.default(argumentName || 'n', 'must be a integer.'); return i; } integer.assert = assert; /** * Throws if less than zero. * @param n * @param argumentName * @returns {boolean} */ function assertZeroOrGreater(n, argumentName) { const i = assert(n, argumentName) && n >= 0; if (!i) throw new ArgumentOutOfRangeException_1.default(argumentName || 'n', n, 'must be a valid integer greater than or equal to zero.'); return i; } integer.assertZeroOrGreater = assertZeroOrGreater; /** * Throws if not greater than zero. * @param n * @param argumentName * @returns {boolean} */ function assertPositive(n, argumentName) { const i = assert(n, argumentName) && n > 0; if (!i) throw new ArgumentOutOfRangeException_1.default(argumentName || 'n', n, 'must be greater than zero.'); return i; } integer.assertPositive = assertPositive; })(integer || (integer = {})); exports.default = integer; //# sourceMappingURL=integer.js.map