forked from TheAlgorithms/Java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSumOfSquaresTest.java
More file actions
68 lines (59 loc) · 2.48 KB
/
SumOfSquaresTest.java
File metadata and controls
68 lines (59 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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
}
}