using AcDream.App.Streaming; using Xunit; namespace AcDream.Core.Tests.Streaming; public class StreamingRegionTwoTierTests { [Fact] public void Constructor_TwoRadii_ExposesNearAndFarRadii() { var region = new StreamingRegion(centerX: 100, centerY: 100, nearRadius: 4, farRadius: 12); Assert.Equal(4, region.NearRadius); Assert.Equal(12, region.FarRadius); Assert.Equal(100, region.CenterX); Assert.Equal(100, region.CenterY); // Radius (used by existing single-radius hysteresis math) must alias to // FarRadius — the outer ring drives "everything currently loaded" bookkeeping. // If a future change mistakenly aliases Radius to NearRadius, hysteresis // becomes (NearRadius+2) for the far-tier unload, which is wrong. Assert.Equal(region.FarRadius, region.Radius); } [Fact] public void RecenterTo_FirstTick_SplitsLoadIntoNearAndFar() { // near=1, far=3 → near window is 3×3=9, far window is 7×7-3×3=40 LBs. var region = new StreamingRegion(centerX: 100, centerY: 100, nearRadius: 1, farRadius: 3); var diff = region.ComputeFirstTickDiff(); Assert.Equal(9, diff.ToLoadNear.Count); Assert.Equal(40, diff.ToLoadFar.Count); Assert.Empty(diff.ToPromote); Assert.Empty(diff.ToDemote); Assert.Empty(diff.ToUnload); } }