package predictive import ( "testing" ) func TestAccessPredictor_Basic(t *testing.T) { t.Parallel() p := NewAccessPredictor() p.RecordSequence("a/b/c1", "a/b/c2") next := p.PredictNext("a/b/c1") if len(next) == 0 { t.Log("no predictions (cold start ok)") } _ = p.IsPredictedAccess("a/b/c2") } func TestCacheWarmer_Basic(t *testing.T) { t.Parallel() cw := NewCacheWarmer() cw.RecordAccess("k1", 100) cw.RecordAccess("k1", 100) pop := cw.GetPopularContent(5) _ = len(pop) _ = NewWarmingStats() _ = NewActiveWarmer("k", 1, "test") } // TestPredictiveCacheManager_ConstructAndStop exercises New + RecordAccess under load + worker + Stop (no leak/panic; issue11). func TestPredictiveCacheManager_ConstructAndStop(t *testing.T) { t.Parallel() pm := NewPredictiveCacheManager() for i := 0; i < 20; i++ { k := "k" + string(rune('0'+i%5)) pm.RecordAccess(k, "", 100) // use actual API (RecordAccess); exercises warmer+predictor paths } // Stop exercises wg + cancel for workers pm.Stop() // double stop safe pm.Stop() }