Delete the callerless portal-BFS research graph and spent renderer probe families while retaining the production RetailFrameWalk path, terrain diagnostics, membership invariant, and walk transcript. Mutation evidence (all restored): 1. Restored PortalVisibilityBuilder type -> AppAssembly_ContainsNoSupersededPortalGraphTypes first failed Assert.Empty with AcDream.App.Rendering.PortalVisibilityBuilder. 2. Restored ACDREAM_PROBE_FACILITY_STAIRS -> ProductionSource_ContainsNoDeletedRendererProbe_AndRetainsWalkTranscriptProof first failed Assert.Empty on RenderingDiagnostics.cs. 3. Added a second RetailFrameWalk field -> WalkFrameOwners_AreUnique first failed Assert.Single with _frameWalk and _mutatedSecondFrameWalk. 4. Added OrderBy to OrderedStream -> OrderedWalkStream_HasNoCrossStreamReorder first failed Assert.DoesNotContain on OrderBy(. 5. Added IDatReaderWriter parameter -> FrameTimeWalkOwners_HaveNoRawDatDependency first failed Assert.Empty on RetailFrameWalk.MutatedRawDatParameter.
45 lines
1.3 KiB
C#
45 lines
1.3 KiB
C#
using AcDream.App.Rendering;
|
|
|
|
namespace AcDream.App.Tests.Rendering;
|
|
|
|
public sealed class WorldRenderDiagnosticsTests
|
|
{
|
|
[Fact]
|
|
public void TerrainDiagnostics_RetryFailedPublicationWithoutLosingSamples()
|
|
{
|
|
var log = new ThrowOnceLog();
|
|
var diagnostics = new WorldRenderDiagnostics(log);
|
|
var facts = new TerrainRenderDiagnosticFacts(3, 3, 5, 8);
|
|
|
|
diagnostics.BeginTerrainDraw();
|
|
diagnostics.EndTerrainDraw();
|
|
Assert.Throws<InvalidOperationException>(() => diagnostics.PublishTerrainDiagnostics(facts));
|
|
|
|
diagnostics.BeginTerrainDraw();
|
|
diagnostics.EndTerrainDraw();
|
|
diagnostics.PublishTerrainDiagnostics(facts);
|
|
|
|
string message = Assert.Single(log.Messages);
|
|
Assert.Contains("draws=3/frame", message);
|
|
Assert.Contains("visible=3", message);
|
|
Assert.Contains("loaded=5", message);
|
|
Assert.Contains("capacity=8", message);
|
|
}
|
|
|
|
private sealed class ThrowOnceLog : IRenderFrameDiagnosticLog
|
|
{
|
|
private bool _throw = true;
|
|
public List<string> Messages { get; } = [];
|
|
|
|
public void WriteLine(string message)
|
|
{
|
|
if (_throw)
|
|
{
|
|
_throw = false;
|
|
throw new InvalidOperationException("diagnostic sink failed");
|
|
}
|
|
|
|
Messages.Add(message);
|
|
}
|
|
}
|
|
}
|