using MrGameEng.Graphics; using Xunit; namespace MrGameEng.Graphics.Tests; public class SpriteBatcherTests { private static SpriteInstance Instance(byte layer) => new() { Layer = layer }; [Fact] public void Sort_OrdersByKey_ReturningOriginalIndices() { var batcher = new SpriteBatcher(initialCapacity: 2); batcher.Submit(Instance(2), SpriteSortKey.Make(2, 0f, 0)); batcher.Submit(Instance(0), SpriteSortKey.Make(0, 0f, 0)); batcher.Submit(Instance(1), SpriteSortKey.Make(1, 0f, 0)); var order = batcher.Sort(); Assert.Equal(3, order.Length); Assert.Equal(0, batcher[order[0]].Layer); Assert.Equal(1, batcher[order[1]].Layer); Assert.Equal(2, batcher[order[2]].Layer); } [Fact] public void Submit_GrowsBeyondInitialCapacity() { var batcher = new SpriteBatcher(initialCapacity: 1); for (var i = 0; i < 100; i++) { batcher.Submit(Instance(0), (ulong)(100 - i)); } Assert.Equal(100, batcher.Count); var order = batcher.Sort(); Assert.Equal(99, order[0]); // последний сабмит имеет наименьший ключ } [Fact] public void Clear_ResetsCount_KeepsWorking() { var batcher = new SpriteBatcher(); batcher.Submit(Instance(0), 5); batcher.Clear(); Assert.Equal(0, batcher.Count); batcher.Submit(Instance(1), 1); Assert.Equal(1, batcher.Count); Assert.Equal(1, batcher[batcher.Sort()[0]].Layer); } }