Skip to content

Commit 5dc5439

Browse files
committed
Handle Integer.MIN_VALUE overflow in AbsoluteMin
1 parent b8c0c4c commit 5dc5439

2 files changed

Lines changed: 14 additions & 4 deletions

File tree

src/main/java/com/thealgorithms/maths/AbsoluteMin.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,13 @@ public static int getMinValue(int... numbers) {
1515
throw new IllegalArgumentException("Numbers array cannot be empty or null");
1616
}
1717

18-
int absMin = numbers[0];
18+
long absMin = numbers[0];
1919
for (int i = 1; i < numbers.length; i++) {
20-
if (Math.abs(numbers[i]) < Math.abs(absMin) || (Math.abs(numbers[i]) == Math.abs(absMin) && numbers[i] < absMin)) {
21-
absMin = numbers[i];
20+
long current = numbers[i];
21+
if (Math.abs(current) < Math.abs(absMin) || (Math.abs(current) == Math.abs(absMin) && current < absMin)) {
22+
absMin = current;
2223
}
2324
}
24-
return absMin;
25+
return (int) absMin;
2526
}
2627
}

src/test/java/com/thealgorithms/maths/AbsoluteMinTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,13 @@ void testGetMinValueWithSameAbsoluteValues() {
2727
assertEquals(-5, AbsoluteMin.getMinValue(-5, 5));
2828
assertEquals(-5, AbsoluteMin.getMinValue(5, -5));
2929
}
30+
31+
@Test
32+
void testIntegerMinValueOverflow() {
33+
assertEquals(1, AbsoluteMin.getMinValue(Integer.MIN_VALUE, 1));
34+
assertEquals(-1, AbsoluteMin.getMinValue(Integer.MIN_VALUE, -1));
35+
assertEquals(0, AbsoluteMin.getMinValue(Integer.MIN_VALUE, 0));
36+
assertEquals(Integer.MIN_VALUE, AbsoluteMin.getMinValue(Integer.MIN_VALUE));
37+
assertEquals(Integer.MAX_VALUE, AbsoluteMin.getMinValue(Integer.MIN_VALUE, Integer.MAX_VALUE));
38+
}
3039
}

0 commit comments

Comments
 (0)