Skip to content

Commit e18f19c

Browse files
committed
sum function updated and float coverage added to test cases
1 parent 411b770 commit e18f19c

2 files changed

Lines changed: 25 additions & 7 deletions

File tree

Sprint-1/implement/sum.js

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
function sum(elements) {
2-
const numbers = elements.filter((el) => typeof el === "number");
3-
4-
if (numbers.length === 0) return 0;
5-
6-
if (numbers.length === 1) return numbers[0];
7-
2+
const numbers = elements.filter((el) => Number.isFinite(el));
83
const sumNumbers = numbers.reduce((a, b) => a + b, 0);
94
return sumNumbers;
105
}

Sprint-1/implement/sum.test.js

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ describe("sum", () => {
2626
// When passed to the sum function
2727
// Then it should return the correct total sum
2828
test("sums decimal numbers correctly", () => {
29-
expect(sum([1.5, 2.5, 3.5])).toBe(7.5);
29+
expect(sum([1.5, 2.5, 3.5])).toBeCloseTo(7.5, 5);
3030
});
3131

3232
// Given an array containing non-number values
@@ -42,4 +42,27 @@ describe("sum", () => {
4242
test("returns 0 when array contains only non-number values", () => {
4343
expect(sum(["a", "b", "c"])).toBe(0);
4444
});
45+
46+
test("handles floating point precision issues", () => {
47+
expect(sum([1.2, 0.6, 0.005])).toBeCloseTo(1.805, 5);
48+
});
49+
50+
test("returns consistent result regardless of order", () => {
51+
const a = sum([1.2, 0.6, 0.005]);
52+
const b = sum([0.005, 0.6, 1.2]);
53+
54+
expect(a).toBeCloseTo(b, 10);
55+
});
56+
57+
test("ignores NaN and Infinity values", () => {
58+
expect(sum([10, NaN, 20, Infinity, -Infinity])).toBe(30);
59+
});
60+
61+
test("returns 0 when only NaN and Infinity are present", () => {
62+
expect(sum([NaN, Infinity, -Infinity])).toBe(0);
63+
});
64+
65+
test("does not treat numeric strings as numbers", () => {
66+
expect(sum([10, "20", 30])).toBe(40);
67+
});
4568
});

0 commit comments

Comments
 (0)