test(kbblock): cover fade RenderFaded/Tick/Refresh/seed paths
Phase 4b shipped Seed + RenderFaded + Tick + Refresh against the sdkfade primitives but the test file still only covered the original no-fade behavior. These add: - Add() populates Seed - RenderFaded == Render when d <= N (safe period) - RenderFaded masks underscores once d crosses the safe period - Tick drops entries past the M% threshold + leaves fresh ones - Refresh resets LastRefreshAtTurn + regenerates Seed
This commit is contained in:
@@ -5,6 +5,8 @@ import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
sdkfade "git.hangman-lab.top/hzhang/Plexum-sdk-go/fade"
|
||||
)
|
||||
|
||||
func TestSessionDir(t *testing.T) {
|
||||
@@ -126,6 +128,73 @@ func TestRenderEmpty(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestAddPopulatesSeed(t *testing.T) {
|
||||
b, _ := Open(t.TempDir(), "a", "s")
|
||||
e := b.Add(1, "K", "t", "x", 0)
|
||||
if e == nil || e.Seed == 0 {
|
||||
t.Errorf("Seed should be non-zero, got %d", e.Seed)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRenderFadedDistanceZeroIsIdentity(t *testing.T) {
|
||||
b, _ := Open(t.TempDir(), "a", "s")
|
||||
b.Add(1, "K", "t", "hello world", 5)
|
||||
plain := b.Render()
|
||||
faded := b.RenderFaded(5, sdkfade.DefaultFadeParams())
|
||||
if plain != faded {
|
||||
t.Errorf("d=0 should be no-op:\nplain=%q\nfaded=%q", plain, faded)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRenderFadedAppliesMaskOverTime(t *testing.T) {
|
||||
b, _ := Open(t.TempDir(), "a", "s")
|
||||
b.Add(1, "K", "t", "the quick brown fox jumps over the lazy dog", 0)
|
||||
plain := b.Render()
|
||||
faded := b.RenderFaded(20, sdkfade.DefaultFadeParams())
|
||||
if plain == faded {
|
||||
t.Errorf("d=20 should mask, but identical: %q", plain)
|
||||
}
|
||||
if !strings.Contains(faded, "_") {
|
||||
t.Errorf("expected underscore masking in faded output: %q", faded)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTickDropsHighlyFaded(t *testing.T) {
|
||||
b, _ := Open(t.TempDir(), "a", "s")
|
||||
b.Add(1, "K", "t", "short", 0)
|
||||
b.Add(2, "K", "t", "this entry stays freshish", 100)
|
||||
res := b.Tick(105, sdkfade.DefaultFadeParams())
|
||||
hasID1Dropped := false
|
||||
for _, id := range res.FadedOut {
|
||||
if id == 1 {
|
||||
hasID1Dropped = true
|
||||
}
|
||||
}
|
||||
if !hasID1Dropped {
|
||||
t.Errorf("entry 1 (d=105) should have crossed drop threshold: faded=%v", res.FadedOut)
|
||||
}
|
||||
if !b.Has(2) {
|
||||
t.Error("entry 2 (d=5) should still be present")
|
||||
}
|
||||
}
|
||||
|
||||
func TestRefreshResetsClock(t *testing.T) {
|
||||
b, _ := Open(t.TempDir(), "a", "s")
|
||||
b.Add(1, "K", "t", "content", 0)
|
||||
oldSeed := b.Lookup(1).Seed
|
||||
got := b.Refresh([]int{1, 99}, 50)
|
||||
if len(got) != 1 || got[0] != 1 {
|
||||
t.Errorf("Refresh returned %v, want [1]", got)
|
||||
}
|
||||
e := b.Lookup(1)
|
||||
if e.LastRefreshAtTurn != 50 {
|
||||
t.Errorf("LastRefreshAtTurn = %d, want 50", e.LastRefreshAtTurn)
|
||||
}
|
||||
if e.Seed == oldSeed {
|
||||
t.Error("Refresh should regenerate Seed")
|
||||
}
|
||||
}
|
||||
|
||||
func TestSaveEmptyNoFile(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
b, _ := Open(dir, "a", "s")
|
||||
|
||||
Reference in New Issue
Block a user