Skip to content

Commit 6c28e45

Browse files
committed
Add runtime assertion (IndexOutOfRangeException) for Entities.this[] indexer
1 parent 6409518 commit 6c28e45

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

src/ECS/Collections/Entities.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,16 @@ internal Entities(EntityStore store, int id) {
5050
count = 1;
5151
}
5252

53+
private const string IndexError = "Index was out of range. Must be >= 0 and < Entities.Count";
54+
5355
public Entity this[int index] {
5456
get {
5557
if (ids != null) {
58+
if (index < 0 || index >= count) throw new IndexOutOfRangeException(IndexError);
5659
return new Entity(store, ids[start + index]);
5760
}
5861
// case: count == 1
59-
if (index != 0) throw new IndexOutOfRangeException();
62+
if (index != 0) throw new IndexOutOfRangeException(IndexError);
6063
return new Entity(store, start);
6164
}
6265
}

src/Tests/ECS/Index/Test_Index.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,42 @@ public static void Test_Index_ValueStructIndex()
194194
AreEqual(0, result.Count);
195195
}
196196

197+
[Test]
198+
public static void Test_Index_Entities_indexer()
199+
{
200+
var store = new EntityStore();
201+
var index = store.ComponentIndex<IndexedInt, int>();
202+
var entity1 = store.CreateEntity(1);
203+
var entity2 = store.CreateEntity(2);
204+
var error = "Index was out of range. Must be >= 0 and < Entities.Count";
205+
206+
// --- result: Entities.Count = 0
207+
var entities = index[37];
208+
IndexOutOfRangeException e;
209+
{
210+
AreEqual(0, entities.Count);
211+
e = Throws<IndexOutOfRangeException>(() => { _ = entities[0]; }); AreEqual(error, e.Message);
212+
e = Throws<IndexOutOfRangeException>(() => { _ = entities[-1]; }); AreEqual(error, e.Message);
213+
}
214+
215+
// --- result: Entities.Count = 1
216+
{
217+
entity1.AddComponent(new IndexedInt { value = 37 });
218+
entities = index[37];
219+
AreEqual(1, entities.Count);
220+
_ = entities[0]; // OK
221+
e = Throws<IndexOutOfRangeException>(() => { _ = entities[1]; }); AreEqual(error, e.Message);
222+
} {
223+
// --- result: Entities.Count = 2
224+
entity2.AddComponent(new IndexedInt { value = 37 });
225+
entities = index[37];
226+
AreEqual(2, entities.Count);
227+
_ = entities[0]; // OK
228+
_ = entities[1]; // OK
229+
e = Throws<IndexOutOfRangeException>(() => { _ = entities[2]; }); AreEqual(error, e.Message);
230+
}
231+
}
232+
197233
[Test]
198234
public static void Test_Index_exceptions()
199235
{

0 commit comments

Comments
 (0)