acdream/tests/AcDream.Core.Tests/Physics/CellArrayTests.cs

59 lines
1.7 KiB
C#

using System.Collections.Generic;
using System.Linq;
using AcDream.Core.Physics;
using Xunit;
namespace AcDream.Core.Tests.Physics;
public class CellArrayTests
{
[Fact]
public void Add_PreservesInsertionOrder()
{
var a = new CellArray();
a.Add(0xA9B40170u);
a.Add(0xA9B40031u);
a.Add(0xA9B40171u);
Assert.Equal(new[] { 0xA9B40170u, 0xA9B40031u, 0xA9B40171u }, a.OrderedIds.ToArray());
}
[Fact]
public void Add_DedupsById_KeepingFirstPosition()
{
var a = new CellArray();
a.Add(0xA9B40170u);
a.Add(0xA9B40171u);
a.Add(0xA9B40170u); // duplicate of index 0 — no-op (retail add_cell)
Assert.Equal(2, a.Count);
Assert.Equal(new[] { 0xA9B40170u, 0xA9B40171u }, a.OrderedIds.ToArray());
}
[Fact]
public void Contains_TracksMembership()
{
var a = new CellArray();
a.Add(0xA9B40170u);
Assert.Contains(0xA9B40170u, a);
Assert.DoesNotContain(0xA9B40171u, a);
}
[Fact]
public void EnumeratesInInsertionOrder_AsICollection()
{
var a = new CellArray();
a.Add(3u); a.Add(1u); a.Add(2u);
ICollection<uint> c = a; // helper-facing interface
Assert.Equal(new[] { 3u, 1u, 2u }, c.ToArray());
}
[Fact]
public void IsReadOnlyCollection_ForConsumers()
{
var a = new CellArray();
a.Add(7u); a.Add(7u);
IReadOnlyCollection<uint> ro = a; // consumer-facing interface (FindCellSet out)
int count = ro.Count; // local avoids xUnit2013 (still exercises .Count)
Assert.Equal(1, count);
Assert.Equal(new[] { 7u }, ro.ToArray());
}
}