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));
}
}