@@ -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