1+ package com .thealgorithms .maths ;
2+
3+ import static org .junit .jupiter .api .Assertions .assertEquals ;
4+ import org .junit .jupiter .api .Test ;
5+
6+ /**
7+ * Test class for SumOfSquares
8+ * @author BEASTSHRIRAM
9+ */
10+ class SumOfSquaresTest {
11+
12+ @ Test
13+ void testPerfectSquares () {
14+ // Perfect squares should return 1
15+ assertEquals (1 , SumOfSquares .minSquares (1 )); // 1^2
16+ assertEquals (1 , SumOfSquares .minSquares (4 )); // 2^2
17+ assertEquals (1 , SumOfSquares .minSquares (9 )); // 3^2
18+ assertEquals (1 , SumOfSquares .minSquares (16 )); // 4^2
19+ assertEquals (1 , SumOfSquares .minSquares (25 )); // 5^2
20+ }
21+
22+ @ Test
23+ void testTwoSquares () {
24+ // Numbers that can be expressed as sum of two squares
25+ assertEquals (2 , SumOfSquares .minSquares (2 )); // 1^2 + 1^2
26+ assertEquals (2 , SumOfSquares .minSquares (5 )); // 1^2 + 2^2
27+ assertEquals (2 , SumOfSquares .minSquares (8 )); // 2^2 + 2^2
28+ assertEquals (2 , SumOfSquares .minSquares (10 )); // 1^2 + 3^2
29+ assertEquals (2 , SumOfSquares .minSquares (13 )); // 2^2 + 3^2
30+ }
31+
32+ @ Test
33+ void testThreeSquares () {
34+ // Numbers that require exactly three squares
35+ assertEquals (3 , SumOfSquares .minSquares (3 )); // 1^2 + 1^2 + 1^2
36+ assertEquals (3 , SumOfSquares .minSquares (6 )); // 1^2 + 1^2 + 2^2
37+ assertEquals (3 , SumOfSquares .minSquares (11 )); // 1^2 + 1^2 + 3^2
38+ assertEquals (3 , SumOfSquares .minSquares (12 )); // 2^2 + 2^2 + 2^2
39+ assertEquals (3 , SumOfSquares .minSquares (14 )); // 1^2 + 2^2 + 3^2
40+ }
41+
42+ @ Test
43+ void testFourSquares () {
44+ // Numbers that require exactly four squares (form 4^a * (8b + 7))
45+ assertEquals (4 , SumOfSquares .minSquares (7 )); // 1^2 + 1^2 + 1^2 + 2^2
46+ assertEquals (4 , SumOfSquares .minSquares (15 )); // 1^2 + 1^2 + 2^2 + 3^2
47+ assertEquals (4 , SumOfSquares .minSquares (23 )); // 1^2 + 1^2 + 3^2 + 3^2
48+ assertEquals (4 , SumOfSquares .minSquares (28 )); // 4 * 7, so needs 4 squares
49+ assertEquals (4 , SumOfSquares .minSquares (31 )); // 1^2 + 2^2 + 3^2 + 3^2
50+ }
51+
52+ @ Test
53+ void testLargerNumbers () {
54+ // Test some larger numbers
55+ assertEquals (1 , SumOfSquares .minSquares (100 )); // 10^2
56+ assertEquals (2 , SumOfSquares .minSquares (65 )); // 1^2 + 8^2
57+ assertEquals (3 , SumOfSquares .minSquares (19 )); // 1^2 + 3^2 + 3^2
58+ assertEquals (4 , SumOfSquares .minSquares (60 )); // 4 * 15, and 15 = 8*1 + 7
59+ }
60+
61+ @ Test
62+ void testEdgeCases () {
63+ // Test edge case
64+ assertEquals (1 , SumOfSquares .minSquares (0 )); // 0^2
65+ }
66+ }
0 commit comments