From 263e215f41646f0437079a360ebf6111f12392e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20M=C3=BCller?= Date: Wed, 27 Aug 2025 19:38:43 +0200 Subject: [PATCH] Add some basic unit tests --- QuadtreeTests/QuadtreeTests.csproj | 3 +- QuadtreeTests/Tests.cs | 61 ++++++++++++++++++++++++++++-- 2 files changed, 60 insertions(+), 4 deletions(-) diff --git a/QuadtreeTests/QuadtreeTests.csproj b/QuadtreeTests/QuadtreeTests.csproj index 9946371..3be69ed 100644 --- a/QuadtreeTests/QuadtreeTests.csproj +++ b/QuadtreeTests/QuadtreeTests.csproj @@ -1,4 +1,4 @@ - + net8.0 @@ -12,6 +12,7 @@ + diff --git a/QuadtreeTests/Tests.cs b/QuadtreeTests/Tests.cs index c0657f6..49b3734 100644 --- a/QuadtreeTests/Tests.cs +++ b/QuadtreeTests/Tests.cs @@ -1,19 +1,74 @@ +using NSubstitute; using SpatialCollections; +using System.Numerics; namespace QuadtreeTests { public class Tests { + private class TestWorldObject(Vector2 position) : IWorldObject + { + public Vector2 Position { get; } = position; + + public float BoundingRadius { get; } = 1.0f; + + public BoundingBox2 BoundingBox { get; } = new BoundingBox2(position - Vector2.One, position + Vector2.One); + } + + private List _positions; + + private List _objects; + + 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)]; + _objects = new(); + _quadtree = new(20, 4); + + for (int i = 0; i < _positions.Count; i++) + { + var obj = new TestWorldObject(_positions[i]); + _objects.Add(obj); + } } [Test] - public void Test1() + public void TestAdd() { - Quadtree quadtree = new(20, 4); - Assert.Pass(); + AddObjectsAndAssertCount(); + } + + [Test] + public void TestAddRemove() + { + AddObjectsAndAssertCount(); + + for (int i = 0; i < _objects.Count; i++) + { + _quadtree.Remove(_objects[i]); + Assert.That(_quadtree.Count, Is.EqualTo(_objects.Count - i - 1)); + } + } + + [Test] + public void TestQuery() + { + AddObjectsAndAssertCount(); + List result = new(); + _quadtree.Query(new BoundingBox2(new Vector2(3.5f, 3.5f), new Vector2(10.0f, 10.0f)), result); + Assert.That(result.Count, Is.EqualTo(2)); + } + + private void AddObjectsAndAssertCount() + { + for (int i = 0; i < _objects.Count; i++) + { + _quadtree.Add(_objects[i]); + Assert.That(_quadtree.Count, Is.EqualTo(i + 1)); + } } } } \ No newline at end of file