From 7fd9c829549f104b7885652557133e86b88572bf Mon Sep 17 00:00:00 2001 From: Erik Date: Sat, 9 May 2026 22:27:50 +0200 Subject: [PATCH] test(A.5 T3): StreamingRegion two-radius constructor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add NearRadius/FarRadius properties and a four-arg constructor (centerX, centerY, nearRadius, farRadius). Radius is set to farRadius so existing hysteresis math (unload threshold = Radius+2) uses the outer ring as the bookkeeping boundary. Old three-arg constructor becomes a thin wrapper: this(cx, cy, radius, radius) — no behaviour change, 25 pre-existing streaming tests still pass. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/AcDream.App/Streaming/StreamingRegion.cs | 18 ++++++++++++------ .../Streaming/StreamingRegionTwoTierTests.cs | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 tests/AcDream.Core.Tests/Streaming/StreamingRegionTwoTierTests.cs diff --git a/src/AcDream.App/Streaming/StreamingRegion.cs b/src/AcDream.App/Streaming/StreamingRegion.cs index b28b547..bcebe44 100644 --- a/src/AcDream.App/Streaming/StreamingRegion.cs +++ b/src/AcDream.App/Streaming/StreamingRegion.cs @@ -10,9 +10,11 @@ namespace AcDream.App.Streaming; /// public sealed class StreamingRegion { - public int CenterX { get; private set; } - public int CenterY { get; private set; } - public int Radius { get; } + public int CenterX { get; private set; } + public int CenterY { get; private set; } + public int Radius { get; } + public int NearRadius { get; } + public int FarRadius { get; } // Strictly the (2r+1)×(2r+1) window (clamped to world bounds). private readonly HashSet _visible = new(); @@ -43,12 +45,16 @@ public sealed class StreamingRegion /// public IReadOnlyCollection Resident => _resident; - public StreamingRegion(int cx, int cy, int radius) + public StreamingRegion(int centerX, int centerY, int nearRadius, int farRadius) { - Radius = radius; - Recenter(cx, cy); + NearRadius = nearRadius; + FarRadius = farRadius; + Radius = farRadius; // outer ring drives Resident bookkeeping + Recenter(centerX, centerY); } + public StreamingRegion(int cx, int cy, int radius) : this(cx, cy, radius, radius) { } + private void Recenter(int cx, int cy) { CenterX = cx; diff --git a/tests/AcDream.Core.Tests/Streaming/StreamingRegionTwoTierTests.cs b/tests/AcDream.Core.Tests/Streaming/StreamingRegionTwoTierTests.cs new file mode 100644 index 0000000..ccf8f13 --- /dev/null +++ b/tests/AcDream.Core.Tests/Streaming/StreamingRegionTwoTierTests.cs @@ -0,0 +1,18 @@ +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); + } +}