From 96c1a96647c947f8f0c531ade3bc18967359e0ea Mon Sep 17 00:00:00 2001 From: Piotr Idzik <65706193+vil02@users.noreply.github.com> Date: Sun, 28 May 2023 22:45:13 +0200 Subject: [PATCH] Fix empty input handling in FindMax (#4206) --- .../java/com/thealgorithms/maths/FindMax.java | 18 ++++++++----- .../com/thealgorithms/maths/FindMaxTest.java | 27 ++++++++++++++++++- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/thealgorithms/maths/FindMax.java b/src/main/java/com/thealgorithms/maths/FindMax.java index a7be8690..559424fe 100644 --- a/src/main/java/com/thealgorithms/maths/FindMax.java +++ b/src/main/java/com/thealgorithms/maths/FindMax.java @@ -24,16 +24,20 @@ public class FindMax { } /** - * find max of array + * @brief finds the maximum value stored in the input array * - * @param array the array contains element - * @return max value of given array + * @param array the input array + * @exception IllegalArgumentException input array is empty + * @return the maximum value stored in the input array */ public static int findMax(int[] array) { - int max = array[0]; - for (int i = 1; i < array.length; ++i) { - if (array[i] > max) { - max = array[i]; + if (array.length == 0) { + throw new IllegalArgumentException("array must be non-empty."); + } + int max = Integer.MIN_VALUE; + for (final var value : array) { + if (value > max) { + max = value; } } return max; diff --git a/src/test/java/com/thealgorithms/maths/FindMaxTest.java b/src/test/java/com/thealgorithms/maths/FindMaxTest.java index 43daaeac..a7a18fe1 100644 --- a/src/test/java/com/thealgorithms/maths/FindMaxTest.java +++ b/src/test/java/com/thealgorithms/maths/FindMaxTest.java @@ -1,16 +1,41 @@ package com.thealgorithms.maths; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.Test; public class FindMaxTest { @Test - public void testFindMaxValue() { + public void testFindMax0() { assertEquals( 10, FindMax.findMax(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }) ); } + + @Test + public void testFindMax1() { + assertEquals( + 7, + FindMax.findMax(new int[] { 6, 3, 5, 1, 7, 4, 1 }) + ); + } + + @Test + public void testFindMax2() { + assertEquals( + 10, + FindMax.findMax(new int[] { 10, 0 }) + ); + } + + @Test + public void testFindMaxThrowsExceptionForEmptyInput() { + assertThrows( + IllegalArgumentException.class, + () -> FindMax.findMax(new int[]{}) + ); + } }