11package com .thealgorithms .maths ;
22
33import static org .junit .jupiter .api .Assertions .assertEquals ;
4+ import static org .junit .jupiter .api .Assertions .assertThrows ;
45
56import org .junit .jupiter .api .Test ;
67
78/**
89 * Test class for SumOfSquares
9- *
10- * @author BEASTSHRIRAM
1110 */
1211class SumOfSquaresTest {
1312
1413 @ Test
1514 void testPerfectSquares () {
1615 // Perfect squares should return 1
17- assertEquals (1 , SumOfSquares .minSquares (1 )); // 1^2
18- assertEquals (1 , SumOfSquares .minSquares (4 )); // 2^2
19- assertEquals (1 , SumOfSquares .minSquares (9 )); // 3^2
16+ assertEquals (1 , SumOfSquares .minSquares (1 )); // 1^2
17+ assertEquals (1 , SumOfSquares .minSquares (4 )); // 2^2
18+ assertEquals (1 , SumOfSquares .minSquares (9 )); // 3^2
2019 assertEquals (1 , SumOfSquares .minSquares (16 )); // 4^2
2120 assertEquals (1 , SumOfSquares .minSquares (25 )); // 5^2
2221 }
2322
2423 @ Test
2524 void testTwoSquares () {
2625 // Numbers that can be expressed as sum of two squares
27- assertEquals (2 , SumOfSquares .minSquares (2 )); // 1^2 + 1^2
28- assertEquals (2 , SumOfSquares .minSquares (5 )); // 1^2 + 2^2
29- assertEquals (2 , SumOfSquares .minSquares (8 )); // 2^2 + 2^2
26+ assertEquals (2 , SumOfSquares .minSquares (2 )); // 1^2 + 1^2
27+ assertEquals (2 , SumOfSquares .minSquares (5 )); // 1^2 + 2^2
28+ assertEquals (2 , SumOfSquares .minSquares (8 )); // 2^2 + 2^2
3029 assertEquals (2 , SumOfSquares .minSquares (10 )); // 1^2 + 3^2
3130 assertEquals (2 , SumOfSquares .minSquares (13 )); // 2^2 + 3^2
3231 }
3332
3433 @ Test
3534 void testThreeSquares () {
3635 // Numbers that require exactly three squares
37- assertEquals (3 , SumOfSquares .minSquares (3 )); // 1^2 + 1^2 + 1^2
38- assertEquals (3 , SumOfSquares .minSquares (6 )); // 1^2 + 1^2 + 2^2
36+ assertEquals (3 , SumOfSquares .minSquares (3 )); // 1^2 + 1^2 + 1^2
37+ assertEquals (3 , SumOfSquares .minSquares (6 )); // 1^2 + 1^2 + 2^2
3938 assertEquals (3 , SumOfSquares .minSquares (11 )); // 1^2 + 1^2 + 3^2
4039 assertEquals (3 , SumOfSquares .minSquares (12 )); // 2^2 + 2^2 + 2^2
4140 assertEquals (3 , SumOfSquares .minSquares (14 )); // 1^2 + 2^2 + 3^2
@@ -44,7 +43,7 @@ void testThreeSquares() {
4443 @ Test
4544 void testFourSquares () {
4645 // Numbers that require exactly four squares (form 4^a * (8b + 7))
47- assertEquals (4 , SumOfSquares .minSquares (7 )); // 1^2 + 1^2 + 1^2 + 2^2
46+ assertEquals (4 , SumOfSquares .minSquares (7 )); // 1^2 + 1^2 + 1^2 + 2^2
4847 assertEquals (4 , SumOfSquares .minSquares (15 )); // 1^2 + 1^2 + 2^2 + 3^2
4948 assertEquals (4 , SumOfSquares .minSquares (23 )); // 1^2 + 1^2 + 3^2 + 3^2
5049 assertEquals (4 , SumOfSquares .minSquares (28 )); // 4 * 7, so needs 4 squares
@@ -55,14 +54,22 @@ void testFourSquares() {
5554 void testLargerNumbers () {
5655 // Test some larger numbers
5756 assertEquals (1 , SumOfSquares .minSquares (100 )); // 10^2
58- assertEquals (2 , SumOfSquares .minSquares (65 )); // 1^2 + 8^2
59- assertEquals (3 , SumOfSquares .minSquares (19 )); // 1^2 + 3^2 + 3^2
60- assertEquals (4 , SumOfSquares .minSquares (60 )); // 4 * 15, and 15 = 8*1 + 7
57+ assertEquals (2 , SumOfSquares .minSquares (65 )); // 1^2 + 8^2
58+ assertEquals (3 , SumOfSquares .minSquares (19 )); // 1^2 + 3^2 + 3^2
59+ assertEquals (4 , SumOfSquares .minSquares (60 )); // 4 * 15, and 15 = 8*1 + 7
6160 }
6261
6362 @ Test
6463 void testEdgeCases () {
6564 // Test edge case
6665 assertEquals (1 , SumOfSquares .minSquares (0 )); // 0^2
6766 }
67+
68+ @ Test
69+ void testNegativeInput () {
70+ // Negative inputs should throw IllegalArgumentException
71+ assertThrows (IllegalArgumentException .class , () -> SumOfSquares .minSquares (-1 ));
72+ assertThrows (IllegalArgumentException .class , () -> SumOfSquares .minSquares (-10 ));
73+ }
6874}
75+
0 commit comments