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 31783c6

Browse files
Merge pull request #56 from variadicjs/maximum-function
Create maximum function and maximum spec file
2 parents 1955395 + df9e96a commit 31783c6

File tree

3 files changed

+46
-0
lines changed

3 files changed

+46
-0
lines changed

‎index.js‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ module.exports = Object.assign(
1515
require('./lib/isAscending.js'),
1616
require('./lib/isDescending.js'),
1717
require('./lib/isPrime.js'),
18+
require('./lib/maximum.js'),
1819
require('./lib/median.js'),
1920
require('./lib/minimum.js'),
2021
require('./lib/mode.js'),

‎lib/maximum.js‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
const { floatPrecise } = require('./floatPrecise');
2+
3+
const handleErrors = (params) => {
4+
if (params.length === 0) throw new Error('Must provide one or more paramters');
5+
if (params.some(param => typeof param !== 'number')) {
6+
throw new Error('One of your parameters does not evaluate to a number');
7+
}
8+
// JS can only safely represent and compare integers
9+
// between Number.MAX_SAFE_INTEGER and Number.MAX_SAFE_INTEGER
10+
if (params.some(param => param > Number.MAX_SAFE_INTEGER || param < Number.MIN_SAFE_INTEGER)) {
11+
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');
12+
}
13+
};
14+
15+
exports.maximum = (...params) => {
16+
handleErrors(params);
17+
18+
const result = params.reduce((prev, cur) => (cur > prev ? cur : prev));
19+
20+
return floatPrecise(result);
21+
};

‎spec/maximumSpec.js‎

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

0 commit comments

Comments
(0)

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