A1: harden HoverSheenAllocStep with real dictionary-footprint assertion

This commit is contained in:
2026-06-16 12:22:29 +02:00
parent 7ead120213
commit c1765ce8ca
2 changed files with 17 additions and 1 deletions
+12 -1
View File
@@ -39,10 +39,21 @@ internal sealed class HoverSheenAllocStep : ISelfTestStep
foreach (var key in keys)
dl.DrawHoverSheen(min, max, accent, key, hovered: true);
// Un-hover sweep to verify the cleanup path drops the entries.
// Hovered loop must have registered exactly the three constant keys
// (no per-frame growth/duplication) — assert via observable state,
// not an unconditional pass (K7 false-green fix).
foreach (var key in keys)
if (!DrawListExtensions.IsSheenTracked(key))
return SelfTestStepResult.Fail;
// Un-hover sweep must drop every entry through the cleanup branch.
foreach (var key in keys)
dl.DrawHoverSheen(min, max, accent, key, hovered: false);
foreach (var key in keys)
if (DrawListExtensions.IsSheenTracked(key))
return SelfTestStepResult.Fail;
return SelfTestStepResult.Pass;
}
@@ -24,6 +24,11 @@ internal static class DrawListExtensions
private static readonly Dictionary<string, DateTime> SheenStarts = new();
// Test-observability hook for HoverSheenAllocStep: lets the self-test
// assert the hover/un-hover dictionary contract via real state instead
// of an unconditional pass (K7 false-green fix). Not a runtime path.
internal static bool IsSheenTracked(string elementId) => SheenStarts.ContainsKey(elementId);
public static void DrawHoverSheen(
this ImDrawListPtr dl,
Vector2 min,