Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 0a7897b

Browse files
add absoluteValue function
1 parent bb6c0fd commit 0a7897b

File tree

3 files changed

+51
-0
lines changed

3 files changed

+51
-0
lines changed

‎index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,5 @@ module.exports = Object.assign(
2828
require('./lib/isPositiveInteger.js'),
2929
require('./lib/isDecimal.js'),
3030
require('./lib/isNegativeInteger.js'),
31+
require('./lib/absoluteValue.js'),
3132
);

‎lib/absoluteValue.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
2+
const handleErrors = (params) => {
3+
if (params.length === 0) throw new Error('Must provide one or more paramters');
4+
if (params.some(param => typeof param !== 'number')) {
5+
throw new Error('One of your parameters does not evaluate to a number');
6+
}
7+
// JS can only safely represent and compare integers
8+
// between Number.MAX_SAFE_INTEGER and Number.MAX_SAFE_INTEGER
9+
if (params.some(param => param > Number.MAX_SAFE_INTEGER || param < Number.MIN_SAFE_INTEGER)) {
10+
throw new Error('Cannot reliably test primality of numbers larger than 9,007,199,254,740,991 or smaller than -9,007,199,254,740,991');
11+
}
12+
};
13+
14+
/**
15+
* This function converts all numbers to a positive number
16+
* @memberof variadic
17+
* @author tdnelson
18+
* @param {...*} params - One or more parameters.
19+
*/
20+
exports.absoluteValue = (...params) => {
21+
handleErrors(params);
22+
return params.map((num) => Math.abs(num));
23+
}

‎spec/absoluteValueSpec.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
const { absoluteValue } = require('../lib/absoluteValue');
2+
3+
describe('absoluteValue', () => {
4+
it('should return the absolute value of all parameters, given that all parameters evaluate to numbers', () => {
5+
let result = absoluteValue(1.6,-2.3325,-9007199254740990,596960,3938475,+"-395757");
6+
expect(result).toBe(1.6, 2.3325, 9007199254740990, 596960, 3938475,395757);
7+
8+
result = absoluteValue(1);
9+
expect(result).toBe(1);
10+
});
11+
12+
it('should throw an error when no parameters are provided', () => {
13+
expect(absoluteValue).toThrow();
14+
});
15+
16+
it('should throw an error when at least one parameter does not evaluate to a number', () => {
17+
expect(() => absoluteValue('yo')).toThrow();
18+
});
19+
20+
it('should throw an error when at least one parameter evaluates to a number larger than Number.MAX_SAFE_INTEGER', () => {
21+
expect(() => absoluteValue(Number.MAX_SAFE_INTEGER + 1)).toThrow();
22+
});
23+
24+
it('should throw an error when at least one parameter evaluates to a number smaller than Number.MIN_SAFE_INTEGER', () => {
25+
expect(() => absoluteValue(Number.MIN_SAFE_INTEGER - 1)).toThrow();
26+
});
27+
});

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /