66 lines
1.8 KiB
C#
66 lines
1.8 KiB
C#
using OpenTK.Mathematics;
|
|
using VoxelEngine.World.Persistence;
|
|
using Xunit;
|
|
|
|
namespace VoxelEngine.Tests.Persistence;
|
|
|
|
public class InMemoryChunkModificationStoreTests
|
|
{
|
|
[Fact]
|
|
public void NewStore_HasNoDiffs()
|
|
{
|
|
var s = new InMemoryChunkModificationStore();
|
|
Assert.False(s.HasDiff(new Vector3i(0, 0, 0)));
|
|
Assert.False(s.TryGetDiff(new Vector3i(0, 0, 0), out _));
|
|
}
|
|
|
|
[Fact]
|
|
public void RecordEdit_StoresAndIsRetrievable()
|
|
{
|
|
var s = new InMemoryChunkModificationStore();
|
|
Vector3i pos = new(1, 2, 3);
|
|
s.RecordEdit(pos, 42, 7);
|
|
|
|
Assert.True(s.HasDiff(pos));
|
|
Assert.True(s.TryGetDiff(pos, out var diff));
|
|
Assert.Single(diff!);
|
|
Assert.Equal((ushort)7, diff![42]);
|
|
}
|
|
|
|
[Fact]
|
|
public void RecordEdit_OverwritesSameLocalIndex()
|
|
{
|
|
var s = new InMemoryChunkModificationStore();
|
|
Vector3i pos = new(0, 0, 0);
|
|
s.RecordEdit(pos, 10, 1);
|
|
s.RecordEdit(pos, 10, 2);
|
|
|
|
Assert.True(s.TryGetDiff(pos, out var diff));
|
|
Assert.Single(diff!);
|
|
Assert.Equal((ushort)2, diff![10]);
|
|
}
|
|
|
|
[Fact]
|
|
public void RecordEdit_MultipleChunks_AreIndependent()
|
|
{
|
|
var s = new InMemoryChunkModificationStore();
|
|
s.RecordEdit(new Vector3i(0, 0, 0), 0, 1);
|
|
s.RecordEdit(new Vector3i(1, 0, 0), 0, 2);
|
|
|
|
Assert.True(s.TryGetDiff(new Vector3i(0, 0, 0), out var a));
|
|
Assert.True(s.TryGetDiff(new Vector3i(1, 0, 0), out var b));
|
|
Assert.Equal((ushort)1, a![0]);
|
|
Assert.Equal((ushort)2, b![0]);
|
|
}
|
|
|
|
[Fact]
|
|
public void ClearDiff_RemovesChunk()
|
|
{
|
|
var s = new InMemoryChunkModificationStore();
|
|
Vector3i pos = new(5, 5, 5);
|
|
s.RecordEdit(pos, 0, 1);
|
|
s.ClearDiff(pos);
|
|
Assert.False(s.HasDiff(pos));
|
|
}
|
|
}
|