Skip to content

Commit

Permalink
feat: add isValidNumber, isNotValidNumber (#247)
Browse files Browse the repository at this point in the history
Closes #235
  • Loading branch information
Undistraction authored and char0n committed Dec 22, 2017
1 parent f26fac9 commit d94c1b5
Show file tree
Hide file tree
Showing 6 changed files with 151 additions and 0 deletions.
12 changes: 12 additions & 0 deletions src/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,18 @@ declare namespace RamdaAdjunct {
*/
isNotFloat(val: any): boolean;

/**
* Checks if value is a valid `Number`. A valid `Number` is a number that is not `NaN`,
* `Infinity` or `-Infinity`.
*/
isValidNumber(val: any): boolean;

/**
* Checks if value is not a valid `Number`. A valid `Number` is a number that is not `NaN`,
* `Infinity` or `-Infinity`.
*/
isNotValidNumber(val: any): boolean;

/**
* Checks if value is odd integer number.
* An odd number is an integer which is not a multiple DIVISIBLE of two.
Expand Down
2 changes: 2 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ export { default as isInteger } from './isInteger';
export { default as isNotInteger } from './isNotInteger';
export { default as isFloat } from './isFloat';
export { default as isNotFloat } from './isNotFloat';
export { default as isValidNumber } from './isValidNumber';
export { default as isNotValidNumber } from './isNotValidNumber';
export { default as isOdd } from './isOdd';
export { default as isEven } from './isEven';
export { default as isPair } from './isPair';
Expand Down
27 changes: 27 additions & 0 deletions src/isNotValidNumber.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { complement } from 'ramda';

import isValidNumber from './isValidNumber';

/**
* Checks if value is not a valid `Number`. A valid `Number` is a number that is not `NaN`,
* `Infinity` or `-Infinity`.
*
* @func isNotValidNumber
* @memberOf RA
* @since {@link https://char0n.github.io/ramda-adjunct/2.2.0|v2.2.0}
* @category Type
* @sig * -> Boolean
* @param {*} val The value to test
* @return {Boolean}
* @see {@link RA.isValidNumber|isValidNumber}
* @example
*
* RA.isNotValidNumber(1); //=> false
* RA.isNotValidNumber(''); //=> true
* RA.isNotValidNumber(NaN); //=> true
* RA.isNotValidNumber(Infinity); //=> true
* RA.isNotValidNumber(-Infinity); //=> true
*/
const isNotValidNumber = complement(isValidNumber);

export default isNotValidNumber;
28 changes: 28 additions & 0 deletions src/isValidNumber.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { either } from 'ramda';

import isFloat from './isFloat';
import isInteger from './isInteger';

/**
* Checks if value is a valid `Number`. A valid `Number` is a number that is not `NaN`, `Infinity`
* or `-Infinity`.
*
* @func isValidNumber
* @memberOf RA
* @since {@link https://char0n.github.io/ramda-adjunct/2.2.0|v2.2.0}
* @category Type
* @sig * -> Boolean
* @param {*} val The value to test
* @return {Boolean}
* @see {@link RA.isNotValidNumber|isNotValidNumber}
* @example
*
* RA.isValidNumber(1); //=> true
* RA.isValidNumber(''); //=> false
* RA.isValidNumber(NaN); //=> false
* RA.isValidNumber(Infinity); //=> false
* RA.isValidNumber(-Infinity); //=> false
*/
const isValidNumber = either(isInteger, isFloat);

export default isValidNumber;
41 changes: 41 additions & 0 deletions test/isNotValidNumber.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import * as RA from '../src/index';
import MAX_SAFE_INTEGER from '../src/internal/polyfills/Number.MAX_SAFE_INTEGER';
import MIN_SAFE_INTEGER from '../src/internal/polyfills/Number.MIN_SAFE_INTEGER';
import eq from './shared/eq';
import args from './shared/arguments';
import Symbol from './shared/Symbol';

describe('isNotValidNumber', function() {
it('tests a value for complement of valid `Number`', function() {
eq(RA.isNotValidNumber(0), false);
eq(RA.isNotValidNumber(0.1), false);
eq(RA.isNotValidNumber(-0.1), false);
eq(RA.isNotValidNumber(1), false);
eq(RA.isNotValidNumber(-1), false);
eq(RA.isNotValidNumber(MAX_SAFE_INTEGER), false);
eq(RA.isNotValidNumber(MIN_SAFE_INTEGER), false);
eq(RA.isNotValidNumber(Number.MAX_VALUE), false);
eq(RA.isNotValidNumber(Number.MIN_VALUE), false);

eq(RA.isNotValidNumber(NaN), true);
eq(RA.isNotValidNumber(Infinity), true);
eq(RA.isNotValidNumber(-Infinity), true);
eq(RA.isNotValidNumber(new Date()), true);
eq(RA.isNotValidNumber(args), true);
eq(RA.isNotValidNumber([1, 2, 3]), true);
eq(RA.isNotValidNumber(Object(true)), true);
eq(RA.isNotValidNumber(new Error()), true);
eq(RA.isNotValidNumber(RA), true);
eq(RA.isNotValidNumber(Array.prototype.slice), true);
eq(RA.isNotValidNumber({ a: 1 }), true);
eq(RA.isNotValidNumber(/x/), true);
eq(RA.isNotValidNumber(Object('a')), true);

if (Symbol !== 'undefined') {
eq(RA.isNotValidNumber(Symbol), true);
}

eq(RA.isNotValidNumber(null), true);
eq(RA.isNotValidNumber(undefined), true);
});
});
41 changes: 41 additions & 0 deletions test/isValidNumber.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import * as RA from '../src/index';
import MAX_SAFE_INTEGER from '../src/internal/polyfills/Number.MAX_SAFE_INTEGER';
import MIN_SAFE_INTEGER from '../src/internal/polyfills/Number.MIN_SAFE_INTEGER';
import eq from './shared/eq';
import args from './shared/arguments';
import Symbol from './shared/Symbol';

describe('isValidNumber', function() {
it('tests a value for a valid `Number`', function() {
eq(RA.isValidNumber(0), true);
eq(RA.isValidNumber(0.1), true);
eq(RA.isValidNumber(-0.1), true);
eq(RA.isValidNumber(1), true);
eq(RA.isValidNumber(-1), true);
eq(RA.isValidNumber(MAX_SAFE_INTEGER), true);
eq(RA.isValidNumber(MIN_SAFE_INTEGER), true);
eq(RA.isValidNumber(Number.MAX_VALUE), true);
eq(RA.isValidNumber(Number.MIN_VALUE), true);

eq(RA.isValidNumber(NaN), false);
eq(RA.isValidNumber(Infinity), false);
eq(RA.isValidNumber(-Infinity), false);
eq(RA.isValidNumber(new Date()), false);
eq(RA.isValidNumber(args), false);
eq(RA.isValidNumber([1, 2, 3]), false);
eq(RA.isValidNumber(Object(false)), false);
eq(RA.isValidNumber(new Error()), false);
eq(RA.isValidNumber(RA), false);
eq(RA.isValidNumber(Array.prototype.slice), false);
eq(RA.isValidNumber({ a: 1 }), false);
eq(RA.isValidNumber(/x/), false);
eq(RA.isValidNumber(Object('a')), false);

if (Symbol !== 'undefined') {
eq(RA.isValidNumber(Symbol), false);
}

eq(RA.isValidNumber(null), false);
eq(RA.isValidNumber(undefined), false);
});
});

0 comments on commit d94c1b5

Please sign in to comment.