using SpatialCollections; using System.Numerics; namespace QuadtreeTests { public class Tests { private class TestEntity(Vector2 position) { public Vector2 Position { get; } = position; } private List _positions; private List _entities; private Quadtree _quadtree; [SetUp] public void Setup() { _positions = [new Vector2(1.0f, 1.0f), new Vector2(3.0f, 3.0f), new Vector2(5.0f, 8.0f)]; _entities = new(); _quadtree = new(20, 4, e => e.Position); for (int i = 0; i < _positions.Count; i++) { var obj = new TestEntity(_positions[i]); _entities.Add(obj); } } [Test] public void TestAdd() { AddObjectsAndAssertCount(); } [Test] public void TestAddRemove() { AddObjectsAndAssertCount(); for (int i = 0; i < _entities.Count; i++) { _quadtree.Remove(_entities[i]); Assert.That(_quadtree.Count, Is.EqualTo(_entities.Count - i - 1)); } } [Test] public void TestQuery() { AddObjectsAndAssertCount(); List result = new(); _quadtree.Query(new Rectangle(new Vector2(2.5f, 2.5f), new Vector2(10.0f, 10.0f)), result); Assert.That(result.Count, Is.EqualTo(2)); } private void AddObjectsAndAssertCount() { for (int i = 0; i < _entities.Count; i++) { _quadtree.Add(_entities[i]); Assert.That(_quadtree.Count, Is.EqualTo(i + 1)); } } } }