From 528dec6072c9fd70f00f7568d78f509032d47ead Mon Sep 17 00:00:00 2001 From: Erik Date: Sat, 25 Jul 2026 02:59:41 +0200 Subject: [PATCH] test(rendering): name transient parity differences When counts diverge, preserve ordered comparison and report the first concrete extra or differing payload. Include retained-classification state in downstream mismatch logs so reveal-edge lifecycle failures can be attributed without weakening the referee. --- .../Scene/RenderScenePViewFrameProduct.cs | 72 +++++++++++++++++-- 1 file changed, 66 insertions(+), 6 deletions(-) diff --git a/src/AcDream.App/Rendering/Scene/RenderScenePViewFrameProduct.cs b/src/AcDream.App/Rendering/Scene/RenderScenePViewFrameProduct.cs index d210fab9..e573bc09 100644 --- a/src/AcDream.App/Rendering/Scene/RenderScenePViewFrameProduct.cs +++ b/src/AcDream.App/Rendering/Scene/RenderScenePViewFrameProduct.cs @@ -420,7 +420,8 @@ internal sealed class RenderScenePViewFrameProductController : _classifiedOutputFirstMismatch = mismatch; _log?.Invoke( "[render-classified-output] first mismatch: " - + mismatch); + + mismatch + + $" classification={_packedClassification}"); } } @@ -458,7 +459,8 @@ internal sealed class RenderScenePViewFrameProductController : _selectionOutputFirstMismatch = selectionMismatch; _log?.Invoke( "[render-selection-output] first mismatch: " - + selectionMismatch); + + selectionMismatch + + $" classification={_packedClassification}"); } } @@ -480,8 +482,22 @@ internal sealed class RenderScenePViewFrameProductController : { if (expected.Count != actual.Count) { + int shared = Math.Min(expected.Count, actual.Count); + for (int index = 0; index < shared; index++) + { + if (expected[index] != actual[index]) + { + return $"field=draw index={index} " + + $"expected={expected[index]} " + + $"actual={actual[index]}"; + } + } + + string extra = expected.Count > actual.Count + ? $"firstExtraExpected={expected[shared]}" + : $"firstExtraActual={actual[shared]}"; return $"field=drawCount expected={expected.Count} " - + $"actual={actual.Count}"; + + $"actual={actual.Count} {extra}"; } for (int index = 0; index < expected.Count; index++) @@ -503,8 +519,22 @@ internal sealed class RenderScenePViewFrameProductController : { if (expected.Count != actual.Count) { + int shared = Math.Min(expected.Count, actual.Count); + for (int index = 0; index < shared; index++) + { + if (expected[index] != actual[index]) + { + return $"field=part index={index} " + + $"expected={expected[index]} " + + $"actual={actual[index]}"; + } + } + + string extra = expected.Count > actual.Count + ? $"firstExtraExpected={expected[shared]}" + : $"firstExtraActual={actual[shared]}"; return $"field=partCount expected={expected.Count} " - + $"actual={actual.Count}"; + + $"actual={actual.Count} {extra}"; } for (int index = 0; index < expected.Count; index++) @@ -728,8 +758,24 @@ internal sealed class RenderScenePViewFrameProductController : } if (_packedExpected.Count != _packedActual.Count) { + int shared = Math.Min( + _packedExpected.Count, + _packedActual.Count); + for (int index = 0; index < shared; index++) + { + if (_packedExpected[index] != _packedActual[index]) + { + return $"field=meshPart index={index} " + + $"expected={_packedExpected[index]} " + + $"actual={_packedActual[index]}"; + } + } + + string extra = _packedExpected.Count > _packedActual.Count + ? $"firstExtraExpected={_packedExpected[shared]}" + : $"firstExtraActual={_packedActual[shared]}"; return $"field=count expected={_packedExpected.Count} " - + $"actual={_packedActual.Count}"; + + $"actual={_packedActual.Count} {extra}"; } for (int index = 0; index < _packedExpected.Count; index++) @@ -759,8 +805,22 @@ internal sealed class RenderScenePViewFrameProductController : { if (_expected.Count != _actual.Count) { + int shared = Math.Min(_expected.Count, _actual.Count); + for (int index = 0; index < shared; index++) + { + if (_expected[index] != _actual[index]) + { + return $"field=candidate index={index} " + + $"expected={_expected[index]} " + + $"actual={_actual[index]}"; + } + } + + string extra = _expected.Count > _actual.Count + ? $"firstExtraExpected={_expected[shared]}" + : $"firstExtraActual={_actual[shared]}"; return $"field=count expected={_expected.Count} " - + $"actual={_actual.Count}"; + + $"actual={_actual.Count} {extra}"; } for (int i = 0; i < _expected.Count; i++)