namespace AcDream.App.Tests.Rendering.Walk;
///
/// S3 chunk 1 (§11.2 B2/B3): proves the parts/alpha-depth readers actually
/// parse the five committed OH captures — "imported and parsed", not just
/// compiled. No content is pinned (§11.2 B3: "pinned only where a later
/// chunk/S4 names a consumer — no speculative assertions"); this is the
/// same non-empty/complete-frame shape
/// WalkOracleTraceTests.Fixture_parses_with_complete_frames already
/// applies to the walk logs.
///
public sealed class WalkOraclePartsTraceTests
{
private const string OhRoot = "docs/research/2026-09-01-overhaul/oh-capture";
public static readonly TheoryData AllPoses = new()
{
"holtburg-doorway-still",
"terrace-edge",
"cathedral-arrival",
"foundry-deep",
"cathedral-leak",
};
[Theory]
[MemberData(nameof(AllPoses))]
public void Parts_log_parses_with_nonempty_draws(string pose)
{
IReadOnlyList frames = WalkOraclePartsTrace.Load(OhRoot, pose);
Assert.NotEmpty(frames);
Assert.Equal(1, frames[0].Number);
Assert.Equal(frames.Count, frames[^1].Number);
Assert.Contains(frames, f => f.PartDraws.Count > 0);
Assert.Contains(frames, f => f.MeshDraws.Count > 0);
}
/// S3 chunk 1 fix round 1 (G4): besides Flushes (FL) and
/// DrawCellsSamples (PC), also assert MeshAdds (AM) and PortalPolyDraws
/// (PM) are non-empty — §6b lists real counts for every committed
/// capture (e.g. terrace-edge: AM=6880, PM=10), so a regex that
/// silently stopped matching either kind must fail this test, not pass
/// it silently.
[Theory]
[MemberData(nameof(AllPoses))]
public void Alpha_depth_log_parses_with_nonempty_samples(string pose)
{
IReadOnlyList frames =
WalkOracleAlphaDepthTrace.Load(OhRoot, pose);
Assert.NotEmpty(frames);
Assert.Equal(1, frames[0].Number);
Assert.Equal(frames.Count, frames[^1].Number);
Assert.Contains(frames, f => f.MeshAdds.Count > 0);
Assert.Contains(frames, f => f.Flushes.Count > 0);
Assert.Contains(frames, f => f.PortalPolyDraws.Count > 0);
Assert.Contains(frames, f => f.DrawCellsSamples.Count > 0);
}
}