Files
wehub-resource-sync a06f331eb8
CI / benchmark (push) Has been skipped
install-script / posix-syntax (push) Successful in 6m1s
CI / build-onnx (push) Failing after 6m43s
init-smoke / dry-run (push) Failing after 15m57s
security / govulncheck (push) Has been cancelled
security / trivy-fs (push) Has been cancelled
CI / test (1.26, ubuntu-latest) (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
CI / test (1.26, macos-latest) (push) Has been cancelled
CI / build-windows (push) Has been cancelled
CI / lint (push) Has been cancelled
install-script / powershell-syntax (push) Has been cancelled
install-script / install (macos-14) (push) Has been cancelled
install-script / install (ubuntu-latest) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:33:42 +08:00

95 lines
2.8 KiB
Go

package tokens
import (
"os"
"path/filepath"
"strings"
"testing"
)
func TestDiskCache_RoundTrip(t *testing.T) {
dir := t.TempDir()
content := strings.Repeat("func foo() int { return bar() }\n", 300)
want := Count(content)
c := NewDiskCache(dir)
if got := c.Count(content); got != want { // miss: compute + store
t.Fatalf("first Count = %d, want %d", got, want)
}
// A fresh cache over the same directory must read the persisted
// entry rather than recompute — the cache survives a restart.
c2 := NewDiskCache(dir)
if got := c2.Count(content); got != want {
t.Errorf("persisted Count = %d, want %d", got, want)
}
}
func TestDiskCache_HitReturnsStored(t *testing.T) {
// A hit returns the stored value verbatim: pre-seed a deliberately
// wrong count and confirm Count trusts the entry over recomputing.
dir := t.TempDir()
c := NewDiskCache(dir)
content := "content the cache will answer for"
c.write(c.key(content), 999999)
if got := c.Count(content); got != 999999 {
t.Errorf("Count = %d, want the stored 999999 (cache not consulted)", got)
}
}
func TestDiskCache_RevisionIsolation(t *testing.T) {
dir := t.TempDir()
content := "content shared across tokenizer revisions"
old := &DiskCache{dir: dir, revision: "0/old"}
old.write(old.key(content), 4242)
// A cache on a different revision must not see the old entry —
// counts from a different tokenizer are never trusted.
cur := &DiskCache{dir: dir, revision: "1/cl100k_base"}
if _, ok := cur.read(cur.key(content)); ok {
t.Error("revision change must make old entries unreachable")
}
// The same revision still hits.
if n, ok := old.read(old.key(content)); !ok || n != 4242 {
t.Errorf("same-revision read = (%d,%v), want (4242,true)", n, ok)
}
}
func TestCachedCount(t *testing.T) {
xdg := t.TempDir()
t.Setenv("XDG_CACHE_HOME", xdg)
small := strings.Repeat("x", minCacheBytes-1)
large := strings.Repeat("token stream ", 600)
// CachedCount is value-identical to Count regardless of size.
if got, want := CachedCount(small), Count(small); got != want {
t.Errorf("CachedCount(small) = %d, want %d", got, want)
}
if got, want := CachedCount(large), Count(large); got != want {
t.Errorf("CachedCount(large) = %d, want %d", got, want)
}
// Only the large input crossed the threshold and was persisted.
cacheRoot := filepath.Join(xdg, "gortex", "token-counts")
entries := countCacheEntries(t, cacheRoot)
if entries == 0 {
t.Error("a large input should have produced a cache entry")
}
}
// countCacheEntries counts regular files under root (zero when root is
// absent), used to assert the small-input fast path skips the disk.
func countCacheEntries(t *testing.T, root string) int {
t.Helper()
n := 0
_ = filepath.Walk(root, func(_ string, info os.FileInfo, err error) error {
if err == nil && info != nil && info.Mode().IsRegular() {
n++
}
return nil
})
return n
}