Skip to content

Commit 4e3cbf5

Browse files
committed
test: add comprehensive unit tests for 2D segment tree
1 parent a42663f commit 4e3cbf5

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package com.thealgorithms.datastructures.trees;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import org.junit.jupiter.api.Test;
5+
6+
public class SegmentTree2DTest {
7+
8+
@Test
9+
void testInitialEmptyQueries() {
10+
SegmentTree2D segmentTree = new SegmentTree2D(4, 4);
11+
12+
// Initial tree should return 0 for any query
13+
assertEquals(0, segmentTree.query(0, 4, 0, 4));
14+
assertEquals(0, segmentTree.query(1, 3, 1, 3));
15+
}
16+
17+
@Test
18+
void testUpdateAndPointQuery() {
19+
SegmentTree2D segmentTree = new SegmentTree2D(5, 5);
20+
21+
segmentTree.update(2, 3, 10);
22+
segmentTree.update(0, 0, 5);
23+
24+
// Querying single points [row, row+1) x [col, col+1)
25+
assertEquals(10, segmentTree.query(2, 3, 3, 4));
26+
assertEquals(5, segmentTree.query(0, 1, 0, 1));
27+
28+
// Empty point should be 0
29+
assertEquals(0, segmentTree.query(1, 2, 1, 2));
30+
}
31+
32+
@Test
33+
void testSubmatrixQuery() {
34+
SegmentTree2D segmentTree = new SegmentTree2D(4, 4);
35+
36+
// Matrix simulation:
37+
// [1, 2, 0, 0]
38+
// [3, 4, 0, 0]
39+
// [0, 0, 0, 0]
40+
// [0, 0, 0, 0]
41+
segmentTree.update(0, 0, 1);
42+
segmentTree.update(0, 1, 2);
43+
segmentTree.update(1, 0, 3);
44+
segmentTree.update(1, 1, 4);
45+
46+
// Top-left 2x2 sum: 1+2+3+4 = 10
47+
assertEquals(10, segmentTree.query(0, 2, 0, 2));
48+
49+
// First row sum: 1+2 = 3
50+
assertEquals(3, segmentTree.query(0, 1, 0, 4));
51+
52+
// Second column sum: 2+4 = 6
53+
assertEquals(6, segmentTree.query(0, 4, 1, 2));
54+
}
55+
56+
@Test
57+
void testUpdateOverwriting() {
58+
SegmentTree2D segmentTree = new SegmentTree2D(3, 3);
59+
60+
segmentTree.update(1, 1, 5);
61+
assertEquals(5, segmentTree.query(1, 2, 1, 2));
62+
63+
// Overwrite the same point
64+
segmentTree.update(1, 1, 20);
65+
assertEquals(20, segmentTree.query(1, 2, 1, 2));
66+
67+
// Full matrix sum should just be this point
68+
assertEquals(20, segmentTree.query(0, 3, 0, 3));
69+
}
70+
}

0 commit comments

Comments
 (0)