Skip to content

Commit

Permalink
feat: finite/coerce
Browse files Browse the repository at this point in the history
  • Loading branch information
medikoo committed Apr 3, 2019
1 parent 48a9a85 commit accaad1
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 0 deletions.
14 changes: 14 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,20 @@ ensureNumber(12); // "12"
ensureNumber(null); // Thrown TypeError: null is not a number
```

#### Finite Number

##### `finite/coerce`

Follows [`number/coerce`](#numbercoerce) additionally rejecting `Infinity` and `-Infinity` values (`null` is returned if given values coerces to them)

```javascript
const coerceToFinite = require("type/finite/coerce");

coerceToFinite("12"); // 12
coerceToFinite(Infinity); // null
coerceToFinite(null); // null
```

#### Object

_Object_ is assumed to be any non-primitive JavaScript value
Expand Down
8 changes: 8 additions & 0 deletions finite/coerce.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
"use strict";

var coerceToNumber = require("../number/coerce");

module.exports = function (value) {
value = coerceToNumber(value);
return isFinite(value) ? value : null;
};
40 changes: 40 additions & 0 deletions test/finite/coerce.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
"use strict";

var assert = require("chai").assert
, coerceToFinite = require("../../finite/coerce");

describe("number/finite/coerce", function () {
it("Should return input number", function () {
assert.equal(coerceToFinite(123.123), 123.123);
});
it("Should coerce string", function () { assert.equal(coerceToFinite("12"), 12); });
it("Should coerce booleans", function () { assert.equal(coerceToFinite(true), 1); });
it("Should coerce number objects", function () {
assert.equal(coerceToFinite(new Number(343)), 343);
});
it("Should coerce objects", function () {
assert.equal(coerceToFinite({ valueOf: function () { return 23; } }), 23);
});

it("Should reject infinite number", function () {
assert.equal(coerceToFinite(Infinity), null);
});
it("Should reject NaN", function () { assert.equal(coerceToFinite(NaN), null); });

if (typeof Object.create === "function") {
it("Should not coerce objects with no number representation", function () {
assert.equal(coerceToFinite(Object.create(null)), null);
});
}

it("Should not coerce null", function () { assert.equal(coerceToFinite(null), null); });
it("Should not coerce undefined", function () {
assert.equal(coerceToFinite(undefined), null);
});

if (typeof Symbol === "function") {
it("Should not coerce symbols", function () {
assert.equal(coerceToFinite(Symbol("foo")), null);
});
}
});

0 comments on commit accaad1

Please sign in to comment.