-
Notifications
You must be signed in to change notification settings - Fork 4
Description
The following test case crashes:
@Test
public void shouldDetectRayIntersection() {
// Given
AABBTree<TestEntity> tree = givenTree();
Rayf ray = new Rayf(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f);
TestEntity entity1 = new TestEntity(1, 2.0f, 0.0f, 3.0f, 3.0f);
TestEntity entity2 = new TestEntity(2, -5.0f, 0.0f, 3.0f, 2.0f);
tree.add(entity1);
tree.add(entity2);
// When
List<TestEntity> intersecting = new ArrayList<>();
tree.detectRayIntersection(ray, intersecting);
tree.update(entity1);
tree.update(entity2);
tree.update(entity2);
tree.update(entity2);
// Then
assertEquals(1, intersecting.size());
assertEquals(1L, intersecting.get(0).getID());
}
Stacktrace:
java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 3
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
at java.base/java.util.Objects.checkIndex(Objects.java:372)
at java.base/java.util.ArrayList.get(ArrayList.java:458)
at pl.pateman.dynamicaabbtree.AABBTree.getNodeAt(AABBTree.java:102)
at pl.pateman.dynamicaabbtree.AABBTree.balanceLeft(AABBTree.java:146)
at pl.pateman.dynamicaabbtree.AABBTree.balanceNode(AABBTree.java:199)
at pl.pateman.dynamicaabbtree.AABBTree.syncUpHierarchy(AABBTree.java:207)
at pl.pateman.dynamicaabbtree.AABBTree.insertNode(AABBTree.java:246)
at pl.pateman.dynamicaabbtree.AABBTree.add(AABBTree.java:292)
at pl.pateman.dynamicaabbtree.AABBTree.update(AABBTree.java:312)
at pl.pateman.dynamicaabbtree.AABBTreeTest.shouldDetectRayIntersection(AABBTreeTest.java:367)