mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-12-19 07:00:35 +08:00
Added Sum of Squares Lagrange's Four Square algorithm implementation (#6583)
* Add Sum of Squares algorithm implementation * Format code and add Wikipedia URL for Lagrange's theorem * Fixed clang-format issues --------- Co-authored-by: Oleksandr Klymenko <alexanderklmn@gmail.com>
This commit is contained in:
68
src/test/java/com/thealgorithms/maths/SumOfSquaresTest.java
Normal file
68
src/test/java/com/thealgorithms/maths/SumOfSquaresTest.java
Normal file
@@ -0,0 +1,68 @@
|
||||
package com.thealgorithms.maths;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/**
|
||||
* Test class for SumOfSquares
|
||||
*
|
||||
* @author BEASTSHRIRAM
|
||||
*/
|
||||
class SumOfSquaresTest {
|
||||
|
||||
@Test
|
||||
void testPerfectSquares() {
|
||||
// Perfect squares should return 1
|
||||
assertEquals(1, SumOfSquares.minSquares(1)); // 1^2
|
||||
assertEquals(1, SumOfSquares.minSquares(4)); // 2^2
|
||||
assertEquals(1, SumOfSquares.minSquares(9)); // 3^2
|
||||
assertEquals(1, SumOfSquares.minSquares(16)); // 4^2
|
||||
assertEquals(1, SumOfSquares.minSquares(25)); // 5^2
|
||||
}
|
||||
|
||||
@Test
|
||||
void testTwoSquares() {
|
||||
// Numbers that can be expressed as sum of two squares
|
||||
assertEquals(2, SumOfSquares.minSquares(2)); // 1^2 + 1^2
|
||||
assertEquals(2, SumOfSquares.minSquares(5)); // 1^2 + 2^2
|
||||
assertEquals(2, SumOfSquares.minSquares(8)); // 2^2 + 2^2
|
||||
assertEquals(2, SumOfSquares.minSquares(10)); // 1^2 + 3^2
|
||||
assertEquals(2, SumOfSquares.minSquares(13)); // 2^2 + 3^2
|
||||
}
|
||||
|
||||
@Test
|
||||
void testThreeSquares() {
|
||||
// Numbers that require exactly three squares
|
||||
assertEquals(3, SumOfSquares.minSquares(3)); // 1^2 + 1^2 + 1^2
|
||||
assertEquals(3, SumOfSquares.minSquares(6)); // 1^2 + 1^2 + 2^2
|
||||
assertEquals(3, SumOfSquares.minSquares(11)); // 1^2 + 1^2 + 3^2
|
||||
assertEquals(3, SumOfSquares.minSquares(12)); // 2^2 + 2^2 + 2^2
|
||||
assertEquals(3, SumOfSquares.minSquares(14)); // 1^2 + 2^2 + 3^2
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFourSquares() {
|
||||
// Numbers that require exactly four squares (form 4^a * (8b + 7))
|
||||
assertEquals(4, SumOfSquares.minSquares(7)); // 1^2 + 1^2 + 1^2 + 2^2
|
||||
assertEquals(4, SumOfSquares.minSquares(15)); // 1^2 + 1^2 + 2^2 + 3^2
|
||||
assertEquals(4, SumOfSquares.minSquares(23)); // 1^2 + 1^2 + 3^2 + 3^2
|
||||
assertEquals(4, SumOfSquares.minSquares(28)); // 4 * 7, so needs 4 squares
|
||||
assertEquals(4, SumOfSquares.minSquares(31)); // 1^2 + 2^2 + 3^2 + 3^2
|
||||
}
|
||||
|
||||
@Test
|
||||
void testLargerNumbers() {
|
||||
// Test some larger numbers
|
||||
assertEquals(1, SumOfSquares.minSquares(100)); // 10^2
|
||||
assertEquals(2, SumOfSquares.minSquares(65)); // 1^2 + 8^2
|
||||
assertEquals(3, SumOfSquares.minSquares(19)); // 1^2 + 3^2 + 3^2
|
||||
assertEquals(4, SumOfSquares.minSquares(60)); // 4 * 15, and 15 = 8*1 + 7
|
||||
}
|
||||
|
||||
@Test
|
||||
void testEdgeCases() {
|
||||
// Test edge case
|
||||
assertEquals(1, SumOfSquares.minSquares(0)); // 0^2
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user