Files
mrgameeng/tests/MrGameEng.Graphics.Tests/SpriteBatcherTests.cs
T

55 lines
1.5 KiB
C#

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);
}
}