Skip to content

Commit

Permalink
feat: add isFloat
Browse files Browse the repository at this point in the history
Ref #98
  • Loading branch information
char0n committed Aug 24, 2017
1 parent 97535cc commit 40d74e6
Show file tree
Hide file tree
Showing 8 changed files with 83 additions and 6 deletions.
7 changes: 6 additions & 1 deletion src/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -218,10 +218,15 @@ declare namespace RamdaAdjunct {
isNotFinite(val: any): boolean;

/**
* Checks whether the passed value is a an `integer`.
* Checks whether the passed value is an `integer`.
*/
isInteger(val: any): boolean;

/**
* Checks whether the passed value is a `float`.
*/
isFloat(val: any): boolean;

/**
* Checks whether the passed value is complement of `integer`.
*/
Expand Down
7 changes: 5 additions & 2 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ import isNaN from './isNaN';
import isNotNaN from './isNotNaN';
import isFinite from './isFinite';
import isNotFinite from './isNotFinite';
import isInteger from './isInterger';
import isInteger from './isInteger';
import isFloat from './isFloat';
import isNotInteger from './isNotInteger';
// Function
import stubUndefined from './stubUndefined';
Expand Down Expand Up @@ -114,7 +115,8 @@ export { default as isNaN } from './isNaN';
export { default as isNotNaN } from './isNotNaN';
export { default as isFinite } from './isFinite';
export { default as isNotFinite } from './isNotFinite';
export { default as isInteger } from './isInterger';
export { default as isInteger } from './isInteger';
export { default as isFloat } from './isFloat';
export { default as isNotInteger } from './isNotInteger';
// Function
export { default as stubUndefined } from './stubUndefined';
Expand Down Expand Up @@ -198,6 +200,7 @@ const RA = {
isFinite,
isNotFinite,
isInteger,
isFloat,
isNotInteger,
// Function
stubUndefined,
Expand Down
38 changes: 38 additions & 0 deletions src/isFloat.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import { complement, allPass } from 'ramda';

import isInteger from './isInteger';
import isNumber from './isNumber';
import isNotNaN from './isNotNaN';
import isFinite from './isFinite';

/**
* Checks whether the passed value is a `float`.
*
* @func isFloat
* @memberOf RA
* @since {@link https://char0n.github.io/ramda-adjunct/1.14.0|v1.14.0}
* @category Type
* @sig * -> Boolean
* @param {*} val The value to test
* @return {Boolean}
* @see {@link RA.isNotFloat|isNotFloat}
* @example
*
* RA.isFloat(0); //=> false
* RA.isFloat(1); //=> false
* RA.isFloat(-100000); //=> false
*
* RA.isFloat(0.1); //=> true
* RA.isFloat(Math.PI); //=> true
*
* RA.isFloat(NaN); //=> false
* RA.isFloat(Infinity); //=> false
* RA.isFloat(-Infinity); //=> false
* RA.isFloat('10'); //=> false
* RA.isFloat(true); //=> false
* RA.isFloat(false); //=> false
* RA.isFloat([1]); //=> false
*/
const isFloat = allPass([isNumber, isNotNaN, isFinite, complement(isInteger)]);

export default isFloat;
2 changes: 1 addition & 1 deletion src/isInterger.js → src/isInteger.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { or } from 'ramda';
import polyfill from './internal/polyfills/Number.isInteger';

/**
* Checks whether the passed value is a an `integer`.
* Checks whether the passed value is an `integer`.
*
* @func isInteger
* @memberOf RA
Expand Down
2 changes: 1 addition & 1 deletion src/isNotInteger.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { complement } from 'ramda';

import isInteger from './isInterger';
import isInteger from './isInteger';


/**
Expand Down
3 changes: 2 additions & 1 deletion src/isNumber.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ import _isNumber from 'ramda/src/internal/_isNumber';
* RA.isNumber(5); // => true
* RA.isNumber(Number.MAX_VALUE); // => true
* RA.isNumber(-Infinity); // => true
* RA.isNumber('5'); // => false
* RA.isNumber(NaN); // => true
* RA.isNumber('5'); // => false *
*/
const isNumber = _isNumber;

Expand Down
28 changes: 28 additions & 0 deletions test/isFloat.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import 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';


describe('isFloat', function() {
it('tests a value for `float`', function() {
eq(RA.isFloat(0), false);
eq(RA.isFloat(1), false);
eq(RA.isFloat(-100000), false);
eq(RA.isFloat(MAX_SAFE_INTEGER), false);
eq(RA.isFloat(MIN_SAFE_INTEGER), false);
eq(RA.isFloat(5e+0), false);

eq(RA.isFloat(0.1), true);
eq(RA.isFloat(Math.PI), true);
eq(RA.isFloat(5.56789e+0), true);

eq(RA.isFloat(NaN), false);
eq(RA.isFloat(Infinity), false);
eq(RA.isFloat(-Infinity), false);
eq(RA.isFloat('10'), false);
eq(RA.isFloat(true), false);
eq(RA.isFloat(false), false);
eq(RA.isFloat([1]), false);
});
});
2 changes: 2 additions & 0 deletions test/isInteger.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,11 @@ describe('isInteger', function() {
eq(RA.isInteger(-100000), true);
eq(RA.isInteger(MAX_SAFE_INTEGER), true);
eq(RA.isInteger(MIN_SAFE_INTEGER), true);
eq(RA.isInteger(5e+0), true);

eq(RA.isInteger(0.1), false);
eq(RA.isInteger(Math.PI), false);
eq(RA.isInteger(5.56789e+0), false);

eq(RA.isInteger(NaN), false);
eq(RA.isInteger(Infinity), false);
Expand Down

0 comments on commit 40d74e6

Please sign in to comment.