Skip to content

Commit cab8a4d

Browse files
committed
Refactor code
1 parent ad758df commit cab8a4d

File tree

12 files changed

+66
-429
lines changed

12 files changed

+66
-429
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
> Fast, lightweight, and extinsible mathematical and statistical functions.
33
44
[![NPM](https://img.shields.io/npm/v/@princedev/calculate.svg)](https://www.npmjs.com/package/@princedev/calculate)
5-
![npm bundle size (scoped)](https://img.shields.io/bundlephobia/min/@princedev/calculate/1.1.2)
5+
![npm bundle size (scoped)](https://img.shields.io/bundlephobia/min/@princedev/calculate/1.1.3)
66
![Libraries.io dependency status for latest release, scoped npm package](https://img.shields.io/librariesio/release/npm/@princedev/calculate)
77
![NPM](https://img.shields.io/npm/l/@princedev/calculate)
88

src/_utils/exactArguments.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/**
2+
* @name exactArguments
3+
*
4+
* @description - Throws error when number of arguments recieved did not meet exact number.
5+
*
6+
* @param {number} required required number of arguments.
7+
* @param {Array<any>} argument arguments received.
8+
*/
9+
export default function exactArguments(
10+
required: number,
11+
argument: IArguments
12+
): any {
13+
if (argument.length !== required) {
14+
throw new TypeError(
15+
`${required} argument${required > 1 ? 's' : ''} required, but ${
16+
argument.length
17+
} is present`
18+
);
19+
}
20+
}

src/_utils/leastArguments.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,18 @@
33
*
44
* @description - Throws error when number of arguments recieved did not meet expected minimum.
55
*
6-
* @param {number} required - required number of arguments.
7-
* @param {number} actual - number of arguments received.
6+
* @param {number} required required number of arguments.
7+
* @param {Array<any>} argument arguments received.
88
*/
9-
export default function leastArguments(required: number, actual: number): any {
10-
if (actual < required) {
9+
export default function leastArguments(
10+
required: number,
11+
argument: IArguments
12+
): any {
13+
if (argument.length < required) {
1114
throw new TypeError(
12-
`${required} argument${
13-
required > 1 ? 's' : ''
14-
} required, but only ${actual} is present`
15+
`${required} argument${required > 1 ? 's' : ''} required, but only ${
16+
argument.length
17+
} is present`
1518
);
1619
}
1720
}

src/cube/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import exactArguments from '../_utils/exactArguments';
2+
13
/**
24
* @name cube
35
* @summary Gets the cube of a number.
@@ -15,5 +17,6 @@
1517
* @function pure
1618
*/
1719
export default function cube(a: number): number {
20+
exactArguments(1, arguments);
1821
return a ** 3;
1922
}

src/difference/index.ts

Lines changed: 4 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -15,69 +15,13 @@ import leastArguments from '../_utils/leastArguments';
1515
* let result = difference(...[120,200,-40]);
1616
* // => -40
1717
*
18-
* @param {number} a first number.
19-
* @param {number} b second number.
20-
* @param {number} c third number.
21-
* @param {number} d fourth number.
22-
* @param {number} e fifth number.
23-
* @param {number} f sixth number.
24-
* @param {number} g seventh number.
25-
* @param {number} h eighth number.
26-
* @param {number} i ninth number.
27-
* @param {number} j tenth number.
28-
* @param {Array<number>} args rest of the arguments.
18+
* @param {Array<number>} args numbers to be subtracted.
2919
* @returns {number} the resulting difference.
3020
*
3121
* @function pure
3222
*/
3323

34-
export default function difference(
35-
a: number,
36-
b: number = 0,
37-
c: number = 0,
38-
d: number = 0,
39-
e: number = 0,
40-
f: number = 0,
41-
g: number = 0,
42-
h: number = 0,
43-
i: number = 0,
44-
j: number = 0,
45-
...args: number[]
46-
): number {
47-
const argLength = arguments.length;
48-
leastArguments(2, argLength);
49-
50-
switch (argLength) {
51-
case 2:
52-
return a - b;
53-
case 3:
54-
return a - b - c;
55-
case 4:
56-
return a - b - c - d;
57-
case 5:
58-
return a - b - c - d - e;
59-
case 6:
60-
return a - b - c - d - e - f;
61-
case 7:
62-
return a - b - c - d - e - f - g;
63-
case 8:
64-
return a - b - c - d - e - f - g - h;
65-
case 9:
66-
return a - b - c - d - e - f - g - h - i;
67-
case 10:
68-
return a - b - c - d - e - f - g - h - i - j;
69-
default: {
70-
const num = args.slice(0);
71-
72-
let length = num.length;
73-
74-
let result = a - b - c - d - e - f - g - h - i - j;
75-
76-
while (length) {
77-
result -= num[--length];
78-
}
79-
80-
return result;
81-
}
82-
}
24+
export default function difference(...args: number[]): number {
25+
leastArguments(2, arguments);
26+
return args.reduce((a, b) => a - b);
8327
}

src/mean/index.ts

Lines changed: 5 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import leastArguments from '../_utils/leastArguments';
2+
import sum from '../sum';
23

34
/**
45
* @name mean
@@ -15,69 +16,13 @@ import leastArguments from '../_utils/leastArguments';
1516
* let result = mean(...[10,20,30]);
1617
* // => 30
1718
*
18-
* @param {number} a first number.
19-
* @param {number} b second number.
20-
* @param {number} c third number.
21-
* @param {number} d fourth number.
22-
* @param {number} e fifth number.
23-
* @param {number} f sixth number.
24-
* @param {number} g seventh number.
25-
* @param {number} h eighth number.
26-
* @param {number} i ninth number.
27-
* @param {number} j tenth number.
28-
* @param {Array<number>} args rest of the arguments.
19+
* @param {Array<number>} args numbers to be averaged..
2920
* @returns {number} the resulting mean.
3021
*
3122
* @function pure
3223
*/
3324

34-
export default function mean(
35-
a: number,
36-
b: number = 0,
37-
c: number = 0,
38-
d: number = 0,
39-
e: number = 0,
40-
f: number = 0,
41-
g: number = 0,
42-
h: number = 0,
43-
i: number = 0,
44-
j: number = 0,
45-
...args: number[]
46-
): number {
47-
const argLength = arguments.length;
48-
leastArguments(2, argLength);
49-
50-
switch (argLength) {
51-
case 2:
52-
return (a + b) / 2;
53-
case 3:
54-
return (a + b + c) / 3;
55-
case 4:
56-
return (a + b + c + d) / 4;
57-
case 5:
58-
return (a + b + c + d + e) / 5;
59-
case 6:
60-
return (a + b + c + d + e + f) / 6;
61-
case 7:
62-
return (a + b + c + d + e + f + g) / 7;
63-
case 8:
64-
return (a + b + c + d + e + f + g + h) / 8;
65-
case 9:
66-
return (a + b + c + d + e + f + g + h + i) / 9;
67-
case 10:
68-
return (a + b + c + d + e + f + g + h + i + j) / 10;
69-
default: {
70-
const num = args.slice(0);
71-
72-
let length = num.length;
73-
74-
let result = a + b + c + d + e + f + g + h + i + j;
75-
76-
while (length) {
77-
result += num[--length];
78-
}
79-
80-
return result / argLength;
81-
}
82-
}
25+
export default function mean(...args: number[]): number {
26+
leastArguments(2, arguments);
27+
return sum(...args) / arguments.length;
8328
}

src/power/index.ts

Lines changed: 4 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -11,69 +11,12 @@ import leastArguments from '../_utils/leastArguments';
1111
* let result = power(2,5,2); // the same as ((2)^5)^2
1212
* // => 1024
1313
*
14-
* @param {number} a first number.
15-
* @param {number} b second number.
16-
* @param {number} c third number.
17-
* @param {number} d fourth number.
18-
* @param {number} e fifth number.
19-
* @param {number} f sixth number.
20-
* @param {number} g seventh number.
21-
* @param {number} h eighth number.
22-
* @param {number} i ninth number.
23-
* @param {number} j tenth number.
24-
* @param {Array<number>} args rest of the arguments.
14+
* @param {Array<number>} args given numbers.
2515
* @returns {number} the power
2616
*
2717
* @function pure
2818
*/
29-
export default function power(
30-
a: number,
31-
b: number = 1,
32-
c: number = 1,
33-
d: number = 1,
34-
e: number = 1,
35-
f: number = 1,
36-
g: number = 1,
37-
h: number = 1,
38-
i: number = 1,
39-
j: number = 1,
40-
...args: number[]
41-
): number {
42-
const argLength = arguments.length;
43-
leastArguments(2, argLength);
44-
45-
switch (argLength) {
46-
case 2:
47-
return a ** b;
48-
case 3:
49-
return (a ** b) ** c;
50-
case 4:
51-
return ((a ** b) ** c) ** d;
52-
case 5:
53-
return (((a ** b) ** c) ** d) ** e;
54-
case 6:
55-
return ((((a ** b) ** c) ** d) ** e) ** f;
56-
case 7:
57-
return (((((a ** b) ** c) ** d) ** e) ** f) ** g;
58-
case 8:
59-
return ((((((a ** b) ** c) ** d) ** e) ** f) ** g) ** h;
60-
case 9:
61-
return (((((((a ** b) ** c) ** d) ** e) ** f) ** g) ** h) ** i;
62-
case 10:
63-
return ((((((((a ** b) ** c) ** d) ** e) ** f) ** g) ** h) ** i) ** j;
64-
default: {
65-
const num = args.slice(0);
66-
67-
let length = num.length;
68-
69-
let result =
70-
((((((((a ** b) ** c) ** d) ** e) ** f) ** g) ** h) ** i) ** j;
71-
72-
while (length) {
73-
result **= num[--length];
74-
}
75-
76-
return result;
77-
}
78-
}
19+
export default function power(...args: number[]): number {
20+
leastArguments(2, arguments);
21+
return args.reduce((a, b) => a ** b);
7922
}

src/product/index.ts

Lines changed: 4 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -15,69 +15,13 @@ import leastArguments from '../_utils/leastArguments';
1515
* let result = product(...[-2,-4,6]);
1616
* // => 48
1717
*
18-
* @param {number} a first number.
19-
* @param {number} b second number.
20-
* @param {number} c third number.
21-
* @param {number} d fourth number.
22-
* @param {number} e fifth number.
23-
* @param {number} f sixth number.
24-
* @param {number} g seventh number.
25-
* @param {number} h eighth number.
26-
* @param {number} i ninth number.
27-
* @param {number} j tenth number.
28-
* @param {Array<number>} args rest of the arguments.
18+
* @param {Array<number>} args numbers to be multiplied.
2919
* @returns {number} the resulting product.
3020
*
3121
* @function pure
3222
*/
3323

34-
export default function product(
35-
a: number,
36-
b: number = 1,
37-
c: number = 1,
38-
d: number = 1,
39-
e: number = 1,
40-
f: number = 1,
41-
g: number = 1,
42-
h: number = 1,
43-
i: number = 1,
44-
j: number = 1,
45-
...args: number[]
46-
): number {
47-
const argLength = arguments.length;
48-
leastArguments(2, argLength);
49-
50-
switch (argLength) {
51-
case 2:
52-
return a * b;
53-
case 3:
54-
return a * b * c;
55-
case 4:
56-
return a * b * c * d;
57-
case 5:
58-
return a * b * c * d * e;
59-
case 6:
60-
return a * b * c * d * e * f;
61-
case 7:
62-
return a * b * c * d * e * f * g;
63-
case 8:
64-
return a * b * c * d * e * f * g * h;
65-
case 9:
66-
return a * b * c * d * e * f * g * h * i;
67-
case 10:
68-
return a * b * c * d * e * f * g * h * i * j;
69-
default: {
70-
const num = args.slice(0);
71-
72-
let length = num.length;
73-
74-
let result = a * b * c * d * e * f * g * h * i * j;
75-
76-
while (length) {
77-
result *= num[--length];
78-
}
79-
80-
return result;
81-
}
82-
}
24+
export default function product(...args: number[]): number {
25+
leastArguments(2, arguments);
26+
return args.reduce((a, b) => a * b);
8327
}

0 commit comments

Comments
 (0)