From 1b4a4c318d7085cc4d6ea7c3ec701f78a122fb72 Mon Sep 17 00:00:00 2001 From: Ullrich Praetz Date: Thu, 20 Jun 2024 15:00:18 +0200 Subject: [PATCH] Engine - Index: full coverage --- Engine/src/ECS/Lab/Indexes/ValueInRangeIndex.cs | 1 + Engine/src/ECS/Lab/Utils/DictionaryUtils.cs | 2 +- Engine/src/ECS/Lab/Utils/SortedListUtils.cs | 2 +- Engine/src/Tests-internal/ECS/Test_Index_Range.cs | 15 ++++++++++++++- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Engine/src/ECS/Lab/Indexes/ValueInRangeIndex.cs b/Engine/src/ECS/Lab/Indexes/ValueInRangeIndex.cs index 14afb4b5a..0e980fb09 100644 --- a/Engine/src/ECS/Lab/Indexes/ValueInRangeIndex.cs +++ b/Engine/src/ECS/Lab/Indexes/ValueInRangeIndex.cs @@ -8,6 +8,7 @@ namespace Friflo.Engine.ECS.Index; internal sealed class ValueInRangeIndex : ComponentIndex { + internal int Count => map.Count; private readonly SortedList map = new(); private readonly IdArrayHeap arrayHeap = new(); diff --git a/Engine/src/ECS/Lab/Utils/DictionaryUtils.cs b/Engine/src/ECS/Lab/Utils/DictionaryUtils.cs index 9e5b05873..97fc4c775 100644 --- a/Engine/src/ECS/Lab/Utils/DictionaryUtils.cs +++ b/Engine/src/ECS/Lab/Utils/DictionaryUtils.cs @@ -38,7 +38,7 @@ internal static void AddComponentValue(int id, in TValue value, Dictiona #endif var idSpan = ids.GetIdSpan(arrayHeap); if (idSpan.IndexOf(id) != -1) { - return; + return; // unexpected. Better safe than sorry. Used belts with suspenders :) } ids.AddId(id, arrayHeap); MapUtils.Set(map, value, ids); diff --git a/Engine/src/ECS/Lab/Utils/SortedListUtils.cs b/Engine/src/ECS/Lab/Utils/SortedListUtils.cs index 604adaecc..db54b1c98 100644 --- a/Engine/src/ECS/Lab/Utils/SortedListUtils.cs +++ b/Engine/src/ECS/Lab/Utils/SortedListUtils.cs @@ -30,7 +30,7 @@ internal static void AddComponentValue(int id, in TValue value, SortedLi map.TryGetValue(value, out var ids); var idSpan = ids.GetIdSpan(arrayHeap); if (idSpan.IndexOf(id) != -1) { - return; + return; // unexpected. Better safe than sorry. Used belts with suspenders :) } ids.AddId(id, arrayHeap); map[value] = ids; diff --git a/Engine/src/Tests-internal/ECS/Test_Index_Range.cs b/Engine/src/Tests-internal/ECS/Test_Index_Range.cs index 3965ddcd5..55102dbf3 100644 --- a/Engine/src/Tests-internal/ECS/Test_Index_Range.cs +++ b/Engine/src/Tests-internal/ECS/Test_Index_Range.cs @@ -110,7 +110,7 @@ public static void Test_Index_Range_Update_Remove() entity2.AddComponent(new IndexedIntRange { value = 200 }); entity3.AddComponent(new IndexedIntRange { value = 200 }); entity4.AddComponent(new IndexedIntRange { value = 300 }); - entity4.AddComponent(new IndexedIntRange { value = 300 }); // cover add same component again + entity4.AddComponent(new IndexedIntRange { value = 300 }); // cover add same component value again var query1 = store.Query().ValueInRange(100, 300); var query2 = store.Query().ValueInRange(200, 400); @@ -132,6 +132,19 @@ public static void Test_Index_Range_coverage() { _ = new ComponentIndexAttribute(null); } + [Test] + public static void Test_Index_Range_already_added() + { + var world = new EntityStore(); + var entity = world.CreateEntity(1); + + entity.AddComponent(new IndexedIntRange { value = 456 }); + + var index = (ValueInRangeIndex)world.extension.componentIndexes[StructInfo.Index]; + index.Add(1, new IndexedIntRange { value = 456 }); + AreEqual(1, index.Count); + } + [Test] public static void Test_Index_Range_already_removed() {