text: "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.NumberPredicate = void 0;
  const is_1 = require("@sindresorhus/is");
  const predicate_1 = require("./predicate");
  class NumberPredicate extends predicate_1.Predicate {
      /**
      @hidden
      */
      constructor(options) {
          super('number', options);
      }
      /**
      Test a number to be in a specified range.
  
      @param start - Start of the range.
      @param end - End of the range.
      */
      inRange(start, end) {
          return this.addValidator({
              message: (value, label) => `Expected ${label} to be in range [${start}..${end}], got ${value}`,
              validator: value => is_1.default.inRange(value, [start, end])
          });
      }
      /**
      Test a number to be greater than the provided value.
  
      @param number - Minimum value.
      */
      greaterThan(number) {
          return this.addValidator({
              message: (value, label) => `Expected ${label} to be greater than ${number}, got ${value}`,
              validator: value => value > number
          });
      }
      /**
      Test a number to be greater than or equal to the provided value.
  
      @param number - Minimum value.
      */
      greaterThanOrEqual(number) {
          return this.addValidator({
              message: (value, label) => `Expected ${label} to be greater than or equal to ${number}, got ${value}`,
              validator: value => value >= number
          });
      }
      /**
      Test a number to be less than the provided value.
  
      @param number - Maximum value.
      */
      lessThan(number) {
          return this.addValidator({
              message: (value, label) => `Expected ${label} to be less than ${number}, got ${value}`,
              validator: value => value < number
          });
      }
      /**
      Test a number to be less than or equal to the provided value.
  
      @param number - Minimum value.
      */
      lessThanOrEqual(number) {
          return this.addValidator({
              message: (value, label) => `Expected ${label} to be less than or equal to ${number}, got ${value}`,
              validator: value => value <= number
          });
      }
      /**
      Test a number to be equal to a specified number.
  
      @param expected - Expected value to match.
      */
      equal(expected) {
          return this.addValidator({
              message: (value, label) => `Expected ${label} to be equal to ${expected}, got ${value}`,
              validator: value => value === expected
          });
      }
      /**
      Test if a number is an element of the provided list.
  
      @param list - List of possible values.
      */
      oneOf(list) {
          return this.addValidator({
              message: (value, label) => {
                  let printedList = JSON.stringify(list);
                  if (list.length > 10) {
                      const overflow = list.length - 10;
                      printedList = JSON.stringify(list.slice(0, 10)).replace(/]$/, `,…+${overflow} more]`);
                  }
                  return `Expected ${label} to be one of \`${printedList}\`, got ${value}`;
              },
              validator: value => list.includes(value)
          });
      }
      /**
      Test a number to be an integer.
      */
      get integer() {
          return this.addValidator({
              message: (value, label) => `Expected ${label} to be an integer, got ${value}`,
              validator: value => is_1.default.integer(value)
          });
      }
      /**
      Test a number to be finite.
      */
      get finite() {
          return this.addValidator({
              message: (value, label) => `Expected ${label} to be finite, got ${value}`,
              validator: value => !is_1.default.infinite(value)
          });
      }
      /**
      Test a number to be infinite.
      */
      get infinite() {
          return this.addValidator({
              message: (value, label) => `Expected ${label} to be infinite, got ${value}`,
              validator: value => is_1.default.infinite(value)
          });
      }
      /**
      Test a number to be positive.
      */
      get positive() {
          return this.addValidator({
              message: (value, label) => `Expected ${label} to be positive, got ${value}`,
              validator: value => value > 0
          });
      }
      /**
      Test a number to be negative.
      */
      get negative() {
          return this.addValidator({
              message: (value, label) => `Expected ${label} to be negative, got ${value}`,
              validator: value => value < 0
          });
      }
      /**
      Test a number to be an integer or infinite.
      */
      get integerOrInfinite() {
          return this.addValidator({
              message: (value, label) => `Expected ${label} to be an integer or infinite, got ${value}`,
              validator: value => is_1.default.integer(value) || is_1.default.infinite(value)
          });
      }
      /**
      Test a number to be in a valid range for a 8-bit unsigned integer.
      */
      get uint8() {
          return this.integer.inRange(0, 255);
      }
      /**
      Test a number to be in a valid range for a 16-bit unsigned integer.
      */
      get uint16() {
          return this.integer.inRange(0, 65535);
      }
      /**
      Test a number to be in a valid range for a 32-bit unsigned integer.
      */
      get uint32() {
          return this.integer.inRange(0, 4294967295);
      }
      /**
      Test a number to be in a valid range for a 8-bit signed integer.
      */
      get int8() {
          return this.integer.inRange(-128, 127);
      }
      /**
      Test a number to be in a valid range for a 16-bit signed integer.
      */
      get int16() {
          return this.integer.inRange(-32768, 32767);
      }
      /**
      Test a number to be in a valid range for a 32-bit signed integer.
      */
      get int32() {
          return this.integer.inRange(-2147483648, 2147483647);
      }
  }
  exports.NumberPredicate = NumberPredicate;
  