Repository: TheAlgorithms/Java
Pull request #6350 (2025-07-07 21:22:07)

refactor: improve PythagoreanTriple logic and add parameterized tests
This PR improves the implementation and testing of the PythagoreanTriple utility class.

Changes include:
- Refactored `isPythagTriple` method for better readability and validation.
- Added unit tests using JUnit 5 with parameterized inputs.
- Removed redundant assertions from main method and migrated checks to a proper test suite.

This enhances code quality, robustness, and maintainability.


<!--
Thank you for your contribution!
In order to reduce the number of notifications sent to the maintainers, please:
- create your PR as draft, cf. https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests#draft-pull-requests,
- make sure that all of the CI checks pass,
- mark your PR as ready for review, cf. https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request#marking-a-pull-request-as-ready-for-review
-->

<!-- For completed items, change [ ] to [x] -->

- [x] I have read [CONTRIBUTING.md](https://github.com/TheAlgorithms/Java/blob/master/CONTRIBUTING.md).
- [x] This pull request is all my own work -- I have not plagiarized it.
- [x] All filenames are in PascalCase.
- [x] All functions and variable names follow Java naming conventions.
- [x] All new algorithms have a URL in their comments that points to Wikipedia or other similar explanations.
- [x] All new code is formatted with `clang-format -i --style=file path/to/your/file.java`

codecov-commenter: ## [Codecov](https://app.codecov.io/gh/TheAlgorithms/Java/pull/6350?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=TheAlgorithms) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Project coverage is 74.59%. Comparing base [(`2f5bc8c`)](https://app.codecov.io/gh/TheAlgorithms/Java/commit/2f5bc8c24281d69872fd645e5cb908144f1f21a1?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=TheAlgorithms) to head [(`903d4cb`)](https://app.codecov.io/gh/TheAlgorithms/Java/commit/903d4cb99a132769118202e2d030bf0b06275e86?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=TheAlgorithms).

<details><summary>Additional details and impacted files</summary>


```diff
@@             Coverage Diff              @@
##             master    #6350      +/-   ##
============================================
+ Coverage     74.55%   74.59%   +0.03%     
  Complexity     5452     5452              
============================================
  Files           682      682              
  Lines         19033    19030       -3     
  Branches       3688     3683       -5     
============================================
+ Hits          14190    14195       +5     
+ Misses         4278     4271       -7     
+ Partials        565      564       -1     
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/TheAlgorithms/Java/pull/6350?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=TheAlgorithms).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=TheAlgorithms).

<details><summary> :rocket: New features to boost your workflow: </summary>

- :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
</details>

Patch:
diff --git a/src/main/java/com/thealgorithms/maths/PythagoreanTriple.java b/src/main/java/com/thealgorithms/maths/PythagoreanTriple.java
index f535e9e6..2780b113 100644
--- a/src/main/java/com/thealgorithms/maths/PythagoreanTriple.java
+++ b/src/main/java/com/thealgorithms/maths/PythagoreanTriple.java
@@ -1,36 +1,43 @@
 package com.thealgorithms.maths;
 
 /**
- * https://en.wikipedia.org/wiki/Pythagorean_triple
+ * Utility class to check if three integers form a Pythagorean triple.
+ * A Pythagorean triple consists of three positive integers a, b, and c,
+ * such that a² + b² = c².
+ *
+ * Common examples:
+ * - (3, 4, 5)
+ * - (5, 12, 13)
+ *
+ * Reference: https://en.wikipedia.org/wiki/Pythagorean_triple
  */
 public final class PythagoreanTriple {
-    private PythagoreanTriple() {
-    }
 
-    public static void main(String[] args) {
-        assert isPythagTriple(3, 4, 5);
-        assert isPythagTriple(5, 12, 13);
-        assert isPythagTriple(6, 8, 10);
-        assert !isPythagTriple(10, 20, 30);
-        assert !isPythagTriple(6, 8, 100);
-        assert !isPythagTriple(-1, -1, 1);
+    private PythagoreanTriple() {
     }
 
     /**
-     * Check if a,b,c are a Pythagorean Triple
+     * Checks whether three integers form a Pythagorean triple.
+     * The order of parameters does not matter.
      *
-     * @param a x/y component length of a right triangle
-     * @param b y/x component length of a right triangle
-     * @param c hypotenuse length of a right triangle
-     * @return boolean <tt>true</tt> if a, b, c satisfy the Pythagorean theorem,
-     * otherwise
-     * <tt>false</tt>
+     * @param a one side length
+     * @param b another side length
+     * @param c another side length
+     * @return {@code true} if (a, b, c) can form a Pythagorean triple, otherwise {@code false}
      */
     public static boolean isPythagTriple(int a, int b, int c) {
         if (a <= 0 || b <= 0 || c <= 0) {
             return false;
-        } else {
-            return (a * a) + (b * b) == (c * c);
         }
+
+        // Sort the sides so the largest is treated as hypotenuse
+        int[] sides = {a, b, c};
+        java.util.Arrays.sort(sides);
+
+        int x = sides[0];
+        int y = sides[1];
+        int hypotenuse = sides[2];
+
+        return x * x + y * y == hypotenuse * hypotenuse;
     }
 }


Test patch:
diff --git a/src/test/java/com/thealgorithms/maths/PythagoreanTripleTest.java b/src/test/java/com/thealgorithms/maths/PythagoreanTripleTest.java
index 13ea5815..75219dc4 100644
--- a/src/test/java/com/thealgorithms/maths/PythagoreanTripleTest.java
+++ b/src/test/java/com/thealgorithms/maths/PythagoreanTripleTest.java
@@ -1,22 +1,24 @@
 package com.thealgorithms.maths;
 
-import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 public class PythagoreanTripleTest {
 
+    @ParameterizedTest
+    @CsvSource({"3, 4, 5, true", "6, 8, 10, true", "9, 12, 15, true", "12, 16, 20, true", "15, 20, 25, true", "18, 24, 30, true", "5, 20, 30, false", "6, 8, 100, false", "-2, -2, 2, false", "0, 0, 0, false", "5, 5, 5, false"})
+    void testIsPythagoreanTriple(int a, int b, int c, boolean expected) {
+        assertEquals(expected, PythagoreanTriple.isPythagTriple(a, b, c));
+    }
+
     @Test
-    public void testPythagoreanTriple() {
-        assertTrue(PythagoreanTriple.isPythagTriple(3, 4, 5));
-        assertTrue(PythagoreanTriple.isPythagTriple(6, 8, 10));
-        assertTrue(PythagoreanTriple.isPythagTriple(9, 12, 15));
-        assertTrue(PythagoreanTriple.isPythagTriple(12, 16, 20));
-        assertTrue(PythagoreanTriple.isPythagTriple(15, 20, 25));
-        assertTrue(PythagoreanTriple.isPythagTriple(18, 24, 30));
-        assertFalse(PythagoreanTriple.isPythagTriple(5, 20, 30));
-        assertFalse(PythagoreanTriple.isPythagTriple(6, 8, 100));
-        assertFalse(PythagoreanTriple.isPythagTriple(-2, -2, 2));
+    void testUnorderedInputStillValid() {
+        // Should still detect Pythagorean triples regardless of argument order
+        assertTrue(PythagoreanTriple.isPythagTriple(5, 3, 4));
+        assertTrue(PythagoreanTriple.isPythagTriple(13, 12, 5));
     }
 }