Files
core/io/fs/mem_test.go
2023-08-03 09:38:36 +03:00

87 lines
1.6 KiB
Go

package fs
import (
"fmt"
gorand "math/rand"
"strconv"
"testing"
"github.com/datarhei/core/v16/math/rand"
"github.com/stretchr/testify/require"
)
func TestMemFromDir(t *testing.T) {
mem, err := NewMemFilesystemFromDir("./fixtures", MemConfig{})
require.NoError(t, err)
names := []string{}
for _, f := range mem.List("/", ListOptions{Pattern: "/*.txt"}) {
names = append(names, f.Name())
}
require.ElementsMatch(t, []string{
"/a.txt",
"/b.txt",
}, names)
}
func BenchmarkMemList(b *testing.B) {
mem, err := NewMemFilesystem(MemConfig{})
require.NoError(b, err)
for i := 0; i < 1000; i++ {
id := rand.StringAlphanumeric(8)
path := fmt.Sprintf("/%d/%s.dat", i, id)
mem.WriteFile(path, []byte("foobar"))
}
b.ResetTimer()
for i := 0; i < b.N; i++ {
mem.List("/", ListOptions{
Pattern: "/5/**",
})
}
}
func BenchmarkMemRemoveList(b *testing.B) {
mem, err := NewMemFilesystem(MemConfig{})
require.NoError(b, err)
for i := 0; i < 1000; i++ {
id := rand.StringAlphanumeric(8)
path := fmt.Sprintf("/%d/%s.dat", i, id)
mem.WriteFile(path, []byte("foobar"))
}
b.ResetTimer()
for i := 0; i < b.N; i++ {
mem.RemoveList("/", ListOptions{
Pattern: "/5/**",
})
}
}
func BenchmarkMemReadFile(b *testing.B) {
mem, err := NewMemFilesystem(MemConfig{})
require.NoError(b, err)
nFiles := 1000
for i := 0; i < 1000; i++ {
path := fmt.Sprintf("/%d.dat", i)
mem.WriteFile(path, []byte(rand.StringAlphanumeric(2*1024)))
}
r := gorand.New(gorand.NewSource(42))
b.ResetTimer()
for i := 0; i < b.N; i++ {
num := r.Intn(nFiles)
f := mem.Open("/" + strconv.Itoa(num) + ".dat")
f.Close()
}
}