diff --git a/src/main/java/com/thealgorithms/others/EulersFunction.java b/src/main/java/com/thealgorithms/others/EulersFunction.java index f08e5e4f..7a6f49d4 100644 --- a/src/main/java/com/thealgorithms/others/EulersFunction.java +++ b/src/main/java/com/thealgorithms/others/EulersFunction.java @@ -1,12 +1,19 @@ package com.thealgorithms.others; /** - * @brief utility class for Euler's totient function + * Utility class for computing + * Euler's totient function. */ public final class EulersFunction { private EulersFunction() { } + /** + * Validates that the input is a positive integer. + * + * @param n the input number to validate + * @throws IllegalArgumentException if {@code n} is non-positive + */ private static void checkInput(int n) { if (n <= 0) { throw new IllegalArgumentException("n must be positive."); @@ -14,11 +21,12 @@ public final class EulersFunction { } /** - * @brief computes the value of Euler's totient function for given input - * @details has time complexity of O(sqrt(n)) - * @param n the input - * @exception IllegalArgumentException n is non-positive - * @return the value of Euler's totient function for the input + * Computes the value of Euler's totient function for a given input. + * This function has a time complexity of O(sqrt(n)). + * + * @param n the input number + * @return the value of Euler's totient function for the given input + * @throws IllegalArgumentException if {@code n} is non-positive */ public static int getEuler(int n) { checkInput(n); diff --git a/src/test/java/com/thealgorithms/others/EulersFunctionTest.java b/src/test/java/com/thealgorithms/others/EulersFunctionTest.java index b80926b8..655c67c8 100644 --- a/src/test/java/com/thealgorithms/others/EulersFunctionTest.java +++ b/src/test/java/com/thealgorithms/others/EulersFunctionTest.java @@ -3,37 +3,31 @@ package com.thealgorithms.others; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -import java.util.HashMap; -import org.junit.jupiter.api.Test; +import java.util.stream.Stream; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; class EulersFunctionTest { - @Test - public void testGetEuler() { - HashMap testCases = new HashMap<>(); - testCases.put(1, 1); - testCases.put(2, 1); - testCases.put(3, 2); - testCases.put(4, 2); - testCases.put(5, 4); - testCases.put(6, 2); - testCases.put(10, 4); - testCases.put(21, 12); - testCases.put(69, 44); - testCases.put(47, 46); - testCases.put(46, 22); - testCases.put(55, 40); - testCases.put(34, 16); - testCases.put(20, 8); - testCases.put(20, 8); - testCases.put(1024, 512); - for (final var tc : testCases.entrySet()) { - assertEquals(tc.getValue(), EulersFunction.getEuler(tc.getKey())); - } + @ParameterizedTest + @MethodSource("provideNumbersForGetEuler") + void testGetEuler(int input, int expected) { + assertEquals(expected, EulersFunction.getEuler(input)); } - @Test - public void testGetEulerThrowsExceptionForNonPositiveInput() { - assertThrows(IllegalArgumentException.class, () -> EulersFunction.getEuler(0)); + @ParameterizedTest + @MethodSource("provideInvalidNumbersForGetEuler") + void testGetEulerThrowsExceptionForNonPositiveInput(int input) { + assertThrows(IllegalArgumentException.class, () -> EulersFunction.getEuler(input)); + } + + private static Stream provideNumbersForGetEuler() { + return Stream.of(Arguments.of(1, 1), Arguments.of(2, 1), Arguments.of(3, 2), Arguments.of(4, 2), Arguments.of(5, 4), Arguments.of(6, 2), Arguments.of(10, 4), Arguments.of(21, 12), Arguments.of(69, 44), Arguments.of(47, 46), Arguments.of(46, 22), Arguments.of(55, 40), Arguments.of(34, 16), + Arguments.of(20, 8), Arguments.of(1024, 512)); + } + + private static Stream provideInvalidNumbersForGetEuler() { + return Stream.of(Arguments.of(0), Arguments.of(-1), Arguments.of(-10)); } }