2025-10-15 10:12:44 +03:00

66 lines
1.6 KiB
Go

package vfs_test
import (
"testing"
"testing/fstest"
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/repo"
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/tspath"
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/vfs"
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/vfs/osvfs"
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/vfs/vfstest"
"gotest.tools/v3/assert"
)
func BenchmarkReadFile(b *testing.B) {
type bench struct {
name string
fs vfs.FS
path string
}
osFS := osvfs.FS()
const smallData = "hello, world"
tmpdir := tspath.NormalizeSlashes(b.TempDir())
osSmallDataPath := tspath.CombinePaths(tmpdir, "foo.ts")
err := osFS.WriteFile(osSmallDataPath, smallData, false)
assert.NilError(b, err)
tests := []bench{
{"MapFS small", vfstest.FromMap(fstest.MapFS{
"/foo.ts": &fstest.MapFile{
Data: []byte(smallData),
},
}, true), "/foo.ts"},
{"OS small", osFS, osSmallDataPath},
}
if repo.TypeScriptSubmoduleExists() {
checkerPath := tspath.CombinePaths(tspath.NormalizeSlashes(repo.TypeScriptSubmodulePath), "src", "compiler", "checker.ts")
checkerContents, ok := osFS.ReadFile(checkerPath)
assert.Assert(b, ok)
tests = append(tests, bench{
"MapFS checker.ts",
vfstest.FromMap(fstest.MapFS{
"/checker.ts": &fstest.MapFile{
Data: []byte(checkerContents),
},
}, true),
"/checker.ts",
})
tests = append(tests, bench{"OS checker.ts", osFS, checkerPath})
}
for _, tt := range tests {
b.Run(tt.name, func(b *testing.B) {
b.ReportAllocs()
for range b.N {
_, _ = tt.fs.ReadFile(tt.path)
}
})
}
}