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.
This commit is contained in:
Erik 2026-07-25 02:59:41 +02:00
parent 54d17eb446
commit 528dec6072

View file

@ -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++)