From 4df847bf60bfceee856336560b3808758082f35a Mon Sep 17 00:00:00 2001 From: Eduard Urbach Date: Fri, 14 Feb 2025 20:35:44 +0100 Subject: [PATCH] Fixed fs package tests on Windows --- src/fs/Walk_windows.go | 30 ++++++++++++++++------------ src/fs/bench_test.go | 45 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 13 deletions(-) create mode 100644 src/fs/bench_test.go diff --git a/src/fs/Walk_windows.go b/src/fs/Walk_windows.go index ab0b771..28cae1a 100644 --- a/src/fs/Walk_windows.go +++ b/src/fs/Walk_windows.go @@ -2,23 +2,27 @@ package fs -import ( - "io/fs" - "path/filepath" - "strings" -) +import "os" // Walk calls your callback function for every file name inside the directory. // It doesn't distinguish between files and directories. func Walk(directory string, callBack func(string)) error { - return filepath.WalkDir(directory, func(path string, d fs.DirEntry, err error) error { - fileName := d.Name() + f, err := os.Open(directory) - if strings.HasPrefix(fileName, ".") { - return filepath.SkipDir - } + if err != nil { + return err + } - callBack(fileName) - return nil - }) + files, err := f.Readdirnames(0) + f.Close() + + if err != nil { + return err + } + + for _, file := range files { + callBack(file) + } + + return nil } diff --git a/src/fs/bench_test.go b/src/fs/bench_test.go new file mode 100644 index 0000000..3462acd --- /dev/null +++ b/src/fs/bench_test.go @@ -0,0 +1,45 @@ +package fs_test + +import ( + "os" + "testing" + + "git.akyoto.dev/cli/q/src/fs" + "git.akyoto.dev/go/assert" +) + +func BenchmarkReadDir(b *testing.B) { + for b.Loop() { + files, err := os.ReadDir(".") + assert.Nil(b, err) + + for _, file := range files { + func(string) {}(file.Name()) + } + } +} + +func BenchmarkReaddirnames(b *testing.B) { + for b.Loop() { + f, err := os.Open(".") + assert.Nil(b, err) + files, err := f.Readdirnames(0) + assert.Nil(b, err) + + for _, file := range files { + func(string) {}(file) + } + + f.Close() + } +} + +func BenchmarkWalk(b *testing.B) { + for b.Loop() { + err := fs.Walk(".", func(file string) { + func(string) {}(file) + }) + + assert.Nil(b, err) + } +}