Skip to content

Commit

Permalink
Fixing issue with unsafe numbers.
Browse files Browse the repository at this point in the history
This commit resolves #13.
  • Loading branch information
marlun78 committed Aug 9, 2018
1 parent 909a1bf commit a8a04db
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 2 deletions.
2 changes: 2 additions & 0 deletions gulpfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ var REQUIRE_PATTERN = /((?:var |,)[^=]+=\s*require\([^\)]+\);?\n?)/g;
var EXPORT_PATTERN = /((?:module\.)?exports\s*=\s*[^,;]+;?\n?)/g;

var files = [
'./src/maxSafeInteger.js',
'./src/isFinite.js',
'./src/isSafeNumber.js',
'./src/makeOrdinal.js',
'./src/toOrdinal.js',
'./src/toWords.js',
Expand Down
13 changes: 13 additions & 0 deletions spec/toOrdinalSpec.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
'use strict';

var toOrdinal = typeof require !== 'undefined' ? require('../src/toOrdinal') : window.numberToWords.toOrdinal;
var MAX_SAFE_INTEGER = 9007199254740991;

describe('toOrdinal', function () {
var tests = [
Expand Down Expand Up @@ -36,4 +37,16 @@ describe('toOrdinal', function () {
}

tests.forEach(addTest);

it('should throw a RangeError if input is greater or lesser than MAX_SAFE_INTEGER', function() {
var unsafe = MAX_SAFE_INTEGER + 100;

expect(function() {
toOrdinal(unsafe);
}).toThrowError(/Input is not a safe number/);

expect(function() {
toOrdinal(-unsafe);
}).toThrowError(/Input is not a safe number/);
});
});
13 changes: 13 additions & 0 deletions spec/toWordsSpec.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict';

var MAX_SAFE_INTEGER = 9007199254740991;
var toWords = typeof require !== 'undefined' ? require('../src/toWords') : window.numberToWords.toWords;

describe('toWords', function () {
Expand Down Expand Up @@ -111,6 +112,18 @@ describe('toWords', function () {
expect(toWords(30, true)).toEqual('thirtieth');
expect(toWords(123, true)).toEqual('one hundred twenty-third');
});

it('should throw a RangeError if input is greater or lesser than MAX_SAFE_INTEGER', function() {
var unsafe = MAX_SAFE_INTEGER + 100;

expect(function() {
toWords(unsafe);
}).toThrowError(/Input is not a safe number/);

expect(function() {
toWords(-unsafe);
}).toThrowError(/Input is not a safe number/);
});
});

function formatNumber(number) {
Expand Down
13 changes: 12 additions & 1 deletion src/toOrdinal.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
'use strict';

var isFinite = require('./isFinite');
var isSafeNumber = require('./isSafeNumber');

/**
* Converts an integer into a string with an ordinal postfix.
Expand All @@ -11,7 +12,17 @@ var isFinite = require('./isFinite');
*/
function toOrdinal(number) {
var num = parseInt(number, 10);
if (!isFinite(num)) throw new TypeError('Not a finite number: ' + number + ' (' + typeof number + ')');

if (!isFinite(num)) {
throw new TypeError(
'Not a finite number: ' + number + ' (' + typeof number + ')'
);
}
if (!isSafeNumber(num)) {
throw new RangeError(
'Input is not a safe number, it’s either too large or too small.'
);
}
var str = String(num);
var lastTwoDigits = Math.abs(num % 100);
var betweenElevenAndThirteen = lastTwoDigits >= 11 && lastTwoDigits <= 13;
Expand Down
13 changes: 12 additions & 1 deletion src/toWords.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

var makeOrdinal = require('./makeOrdinal');
var isFinite = require('./isFinite');
var isSafeNumber = require('./isSafeNumber');

var TEN = 10;
var ONE_HUNDRED = 100;
Expand Down Expand Up @@ -32,7 +33,17 @@ var TENTHS_LESS_THAN_HUNDRED = [
function toWords(number, asOrdinal) {
var words;
var num = parseInt(number, 10);
if (!isFinite(num)) throw new TypeError('Not a finite number: ' + number + ' (' + typeof number + ')');

if (!isFinite(num)) {
throw new TypeError(
'Not a finite number: ' + number + ' (' + typeof number + ')'
);
}
if (!isSafeNumber(num)) {
throw new RangeError(
'Input is not a safe number, it’s either too large or too small.'
);
}
words = generateWords(num);
return asOrdinal ? makeOrdinal(words) : words;
}
Expand Down

0 comments on commit a8a04db

Please sign in to comment.