test: separate diagnostic apparatus from release gates

This commit is contained in:
Erik 2026-08-18 11:06:08 +02:00
parent 8f490240d4
commit c1a905004a
33 changed files with 527 additions and 24 deletions

View file

@ -127,7 +127,8 @@ public sealed class EnvCellSoundEmitterInventoryTests
}
[Fact]
public void PortalDat_SetupsWithAmbientSlotSoundTables()
[Trait("Purpose", "Diagnostic")]
public void Diagnostic_PortalDat_SetupsWithAmbientSlotSoundTables()
{
string? datDir = ConformanceDats.ResolveDatDir();
if (datDir is null)
@ -184,7 +185,8 @@ public sealed class EnvCellSoundEmitterInventoryTests
}
[Fact]
public void SoundTables_WithAmbientSlots_ExistForWireBinding()
[Trait("Purpose", "Diagnostic")]
public void Diagnostic_SoundTables_WithAmbientSlots_ExistForWireBinding()
{
string? datDir = ConformanceDats.ResolveDatDir();
if (datDir is null)

View file

@ -21,6 +21,7 @@ public class CottageDoorwayCharacterizationTests
public CottageDoorwayCharacterizationTests(ITestOutputHelper output) => _out = output;
[Fact]
[Trait("Purpose", "Diagnostic")]
public void Characterize_CottageNeighborhood_PrintStructure()
{
var datDir = ConformanceDats.ResolveDatDir();
@ -65,6 +66,7 @@ public class CottageDoorwayCharacterizationTests
public const uint OutdoorLandcell0031 = 0xA9B40031u;
[Fact]
[Trait("Purpose", "Diagnostic")]
public void Characterize_Doorway_FindInteriorPoints()
{
var datDir = ConformanceDats.ResolveDatDir();

View file

@ -16,6 +16,7 @@ namespace AcDream.Core.Tests.Conformance;
/// landblock have a LandBlock (0xXXYYFFFF) terrain record at all, or only
/// LandBlockInfo + EnvCells? Output-only — no assertions.
/// </summary>
[Trait("Purpose", "Diagnostic")]
public sealed class DungeonLandblockDatProbeTests
{
private readonly ITestOutputHelper _out;

View file

@ -20,6 +20,7 @@ namespace AcDream.Core.Tests.Conformance;
/// these falloffs ARE what retail reads (modulo any load-time transform, settled
/// separately in the decomp). Output-only — no assertions; read the log.
/// </summary>
[Trait("Purpose", "Diagnostic")]
public sealed class HoltburgTorchFalloffProbeTests
{
private readonly ITestOutputHelper _out;

View file

@ -70,6 +70,7 @@ public sealed class Issue113DoorVanishDiagnosticTests
/// vertical door-sized quads.
/// </summary>
[Fact]
[Trait("Purpose", "Diagnostic")]
public void DumpHoltburgBuildings_OrphanGeometry()
{
var datDir = ConformanceDats.ResolveDatDir();
@ -191,7 +192,8 @@ public sealed class Issue113DoorVanishDiagnosticTests
/// must move.
/// </summary>
[Fact]
public void ReplicateProductionEmission_OnPortalFills()
[Trait("Purpose", "Diagnostic")]
public void Diagnostic_ReplicateProductionEmission_OnPortalFills()
{
var datDir = ConformanceDats.ResolveDatDir();
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
@ -237,6 +239,7 @@ public sealed class Issue113DoorVanishDiagnosticTests
/// which is exactly why retail shows doors but not the ramp.
/// </summary>
[Fact]
[Trait("Purpose", "Diagnostic")]
public void DumpPortalFillSurfaceTypes()
{
var datDir = ConformanceDats.ResolveDatDir();
@ -282,6 +285,7 @@ public sealed class Issue113DoorVanishDiagnosticTests
/// the phantom geometry, for type-model comparison against the door.
/// </summary>
[Fact]
[Trait("Purpose", "Diagnostic")]
public void DumpControls_HallAndCottage()
{
var datDir = ConformanceDats.ResolveDatDir();

View file

@ -287,6 +287,7 @@ public sealed class Issue113PhantomStairsDumpTests
/// sphere STRADDLES this plane (|dist| &lt; radius + 0.0002, pc:310090-310120).
/// </summary>
[Fact]
[Trait("Purpose", "Diagnostic")]
public void Dump_Cell104_ExteriorPortalPlane_Vs_GapPoint()
{
var datDir = ConformanceDats.ResolveDatDir();
@ -559,6 +560,7 @@ public sealed class Issue113PhantomStairsDumpTests
/// printed top→bottom DESCENDING (north up).
/// </summary>
[Fact]
[Trait("Purpose", "Diagnostic")]
public void DumpAAB3_Watchtower_TopDownMap()
{
var datDir = ConformanceDats.ResolveDatDir();
@ -679,6 +681,7 @@ public sealed class Issue113PhantomStairsDumpTests
/// retail skips and our building-mesh extraction mishandles?
/// </summary>
[Fact]
[Trait("Purpose", "Diagnostic")]
public void DumpHallModel_PolyFlagHistogram()
{
var datDir = ConformanceDats.ResolveDatDir();

View file

@ -13,6 +13,7 @@ namespace AcDream.Core.Tests.Conformance;
/// FindCellList result — so the P0→P1 divergence is precisely characterized
/// (real pick-criterion divergence vs a test/sphere artifact).
/// </summary>
[Trait("Purpose", "Diagnostic")]
public class ThresholdDivergenceDiagnosticTests
{
private readonly ITestOutputHelper _out;

View file

@ -129,6 +129,7 @@ public class CameraCornerSealReplayTests
/// shadow-query path is the half that failed).
/// </summary>
[Fact]
[Trait("Purpose", "Diagnostic")]
public void Diagnostic_DispatchTrace_LeakPath_vs_Controls()
{
var datDir = ConformanceDats.ResolveDatDir();

View file

@ -237,6 +237,7 @@ public class DoorSetupGfxObjInspectionTests
// computes a different outdoor cell than 0xA9B40029
// Findings drive the fix direction.
[Fact]
[Trait("Purpose", "Diagnostic")]
public void HoltburgCottage_CellPortals_DatInspection()
{
var datDir = Env.GetEnvironmentVariable("ACDREAM_DAT_DIR")
@ -271,6 +272,7 @@ public class DoorSetupGfxObjInspectionTests
/// building wall sub-piece) lives at that XY.
/// </summary>
[Fact]
[Trait("Purpose", "Diagnostic")]
public void HoltburgLandblockStatics_DatInspection()
{
var datDir = Env.GetEnvironmentVariable("ACDREAM_DAT_DIR")

View file

@ -280,6 +280,7 @@ public class Issue137CorridorSeamInspectionTests
/// hit point + normal.
/// </summary>
[Fact]
[Trait("Purpose", "Diagnostic")]
public void CorridorSeam_FindPolygonMatchingLiveHit()
{
var datDir = Env.GetEnvironmentVariable("ACDREAM_DAT_DIR")

View file

@ -33,6 +33,7 @@ public class Issue186ConnectorCellGeometryInspectionTests
}
[Fact]
[Trait("Purpose", "Diagnostic")]
public void Dump_ConnectorCells_ShellAndCollision()
{
var datDir = DatDir();

View file

@ -25,6 +25,7 @@ namespace AcDream.Core.Tests.Physics;
/// wired). Kept as a reusable decoder for any future "why doesn't this
/// animate" question — swap the MotionTableId.
/// </summary>
[Trait("Purpose", "Diagnostic")]
public class Issue188FadingDoorMotionTableInspectionTests
{
private readonly ITestOutputHelper _out;

View file

@ -244,7 +244,8 @@ public class Issue176177DungeonSeamInspectionTests
/// light exposed it.
/// </summary>
[Fact]
public void CorridorNeighborhood_CoplanarOverlappingDrawnPolyPairs()
[Trait("Purpose", "Diagnostic")]
public void Diagnostic_CorridorNeighborhood_CoplanarOverlappingDrawnPolyPairs()
{
var datDir = ResolveDatDir();
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
@ -470,7 +471,8 @@ public class Issue176177DungeonSeamInspectionTests
[InlineData(0x8A02016Eu)] // corridor cells — the striped-floor screenshot area
[InlineData(0x8A02017Au)]
[InlineData(0x8A020165u)]
public void UnderHall_DrawnPolys_SurfaceColors(uint cellId)
[Trait("Purpose", "Diagnostic")]
public void Diagnostic_UnderHall_DrawnPolys_SurfaceColors(uint cellId)
{
var datDir = ResolveDatDir();
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
@ -635,6 +637,7 @@ public class Issue176177DungeonSeamInspectionTests
[Theory]
[InlineData(0x8A02015Eu)] // #176 repro corridor
[InlineData(0x8A02016Eu)] // corridor with floor-portals
[Trait("Purpose", "Diagnostic")]
public void CellVertexNormals_SmoothOrFaceted_Dump(uint cellId)
{
var datDir = ResolveDatDir();

View file

@ -50,6 +50,7 @@ public class Issue93TownNetworkFountainRoomLightInspectionTests
[InlineData(0x00070146u)]
[InlineData(0x00070155u)]
[InlineData(0x00070157u)]
[Trait("Purpose", "Diagnostic")]
public void StaticObjects_SetupLightsCount_Dump(uint cellId)
{
var datDir = ResolveDatDir();