Skip to content

Commit bb5192c

Browse files
committed
Add regression tests for dirty region and setData edge cases
1 parent f89964c commit bb5192c

1 file changed

Lines changed: 91 additions & 0 deletions

File tree

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package com.jme3.shader.bufferobject;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertFalse;
5+
import static org.junit.jupiter.api.Assertions.assertNotNull;
6+
import static org.junit.jupiter.api.Assertions.assertTrue;
7+
8+
import java.nio.ByteBuffer;
9+
import java.util.Arrays;
10+
11+
import org.junit.jupiter.api.Test;
12+
13+
public class DirtyRegionsIteratorTest {
14+
15+
@Test
16+
public void testNoRegionsFullUpdateRangeAndSliceLength() {
17+
BufferObject bo = new BufferObject();
18+
bo.initializeEmpty(8);
19+
bo.setUpdateNeeded(false);
20+
21+
BufferRegion region = bo.getDirtyRegions().next();
22+
assertNotNull(region);
23+
assertTrue(region.isFullBufferRegion());
24+
assertEquals(0, region.getStart());
25+
assertEquals(7, region.getEnd());
26+
assertEquals(8, region.getData().remaining());
27+
28+
region.clearDirty();
29+
bo.clearUpdateNeeded();
30+
assertFalse(bo.isUpdateNeeded());
31+
}
32+
33+
@Test
34+
public void testMergedDirtyRegionSliceUsesInclusiveEnd() {
35+
BufferObject bo = new BufferObject();
36+
bo.setRegions(Arrays.asList(
37+
new BufferRegion(0, 3),
38+
new BufferRegion(4, 7),
39+
new BufferRegion(8, 11)));
40+
41+
bo.getRegion(0).markDirty();
42+
bo.getRegion(1).markDirty();
43+
bo.getRegion(2).clearDirty();
44+
45+
bo.setUpdateNeeded(false);
46+
47+
BufferRegion region = bo.getDirtyRegions().next();
48+
assertNotNull(region);
49+
assertFalse(region.isFullBufferRegion());
50+
assertEquals(0, region.getStart());
51+
assertEquals(7, region.getEnd());
52+
assertEquals(8, region.getData().remaining());
53+
}
54+
55+
@Test
56+
public void testNoRegionsHasNextContract() {
57+
BufferObject bo = new BufferObject();
58+
bo.initializeEmpty(4);
59+
bo.setUpdateNeeded(false);
60+
61+
DirtyRegionsIterator iterator = bo.getDirtyRegions();
62+
assertTrue(iterator.hasNext());
63+
64+
BufferRegion region = iterator.next();
65+
assertNotNull(region);
66+
assertFalse(iterator.hasNext());
67+
assertEquals(4, region.getData().remaining());
68+
}
69+
70+
@Test
71+
public void testSetDataHandlesSelfAlias() {
72+
BufferObject bo = new BufferObject();
73+
ByteBuffer source = ByteBuffer.allocateDirect(4);
74+
source.put((byte) 0x11);
75+
source.put((byte) 0x22);
76+
source.put((byte) 0x33);
77+
source.put((byte) 0x44);
78+
source.flip();
79+
bo.setData(source);
80+
81+
ByteBuffer sameBuffer = bo.getData();
82+
bo.setData(sameBuffer);
83+
84+
ByteBuffer result = bo.getData();
85+
assertEquals(4, result.remaining());
86+
assertEquals((byte) 0x11, result.get());
87+
assertEquals((byte) 0x22, result.get());
88+
assertEquals((byte) 0x33, result.get());
89+
assertEquals((byte) 0x44, result.get());
90+
}
91+
}

0 commit comments

Comments
 (0)