marijnz / NativeQuadtree

A Quadtree Native Collection for Unity DOTS
MIT License
358 stars 30 forks source link

Simple Unit Test Failing #8

Closed freezy closed 3 years ago

freezy commented 3 years ago

Hi, awesome project!

I'm on your experiment_rects branch and testing a simple overlap on the x-axis:

[Test]
public void ShouldOverlapWithX()
{
    var elements = new NativeArray<QuadElement<int>>(1, Allocator.TempJob) {
        [0] = new QuadElement<int> {
            bounds = new AABB2D(new float2(100, 200), new float2(10, 20)),
            element = 42
        }
    };

    var quadTree = new NativeQuadTree<int>(new AABB2D(0, 230));
    quadTree.ClearAndBulkInsert(elements);

    var results = new NativeList<QuadElement<int>>(1, Allocator.TempJob);
    quadTree.RangeQuery(new AABB2D(new float2(0, 0), new float2(95, 175)), results);

    UnityEngine.Assertions.Assert.AreEqual(results.Length, 1);
    UnityEngine.Assertions.Assert.AreEqual(results[0].element, 42);
}

So my element spans from 90 to 110 on the x-axis, and I'm testing against an AABB that goes from 0 to 95. However, I'm getting no results back (fails at first assertion with 0 != 1).

Any idea?

freezy commented 3 years ago

Never mind, screwed up the y-axis, resulting in actually no overlap. This works:

[Test]
public void ShouldOverlapWithX()
{
    var elements = new NativeArray<QuadElement<int>>(1, Allocator.TempJob) {
        [0] = new QuadElement<int> {
            bounds = new AABB2D(new float2(100, 200), new float2(10, 20)),
            element = 42
        }
    };

    var quadTree = new NativeQuadTree<int>(new AABB2D(0, 230));
    quadTree.ClearAndBulkInsert(elements);

    var results = new NativeList<QuadElement<int>>(1, Allocator.TempJob);
    quadTree.RangeQuery(new AABB2D(new float2(0, 0), new float2(95, 185)), results);

    UnityEngine.Assertions.Assert.AreEqual(results.Length, 1);
    UnityEngine.Assertions.Assert.AreEqual(results[0].element, 42);
}

This is great. Do you plan on merging the rectangle support back to mainline at some point?