220222.4 · 2e6a1b8a1ce88e578279e6e631b2129f7144ec87
Add Makefile and benchmark script
reading declarations
@@ -0,0 +1,57 @@+.PHONY: test_build_darwin_arm64+test_build_darwin_arm64:+ GOOS=darwin GOARCH=arm64 go test -c -o /dev/null++.PHONY: test_build_darwin_amd64+test_build_darwin_amd64:+ GOOS=darwin GOARCH=amd64 go test -c -o /dev/null++.PHONY: test_build_linux_arm64+test_build_linux_arm64:+ GOOS=linux GOARCH=arm64 go test -c -o /dev/null++.PHONY: test_build_linux_amd64+test_build_linux_amd64:+ GOOS=linux GOARCH=amd64 go test -c -o /dev/null++.PHONY: test_build_windows_amd64+test_build_windows_amd64:+ GOOS=windows GOARCH=amd64 go test -c -o /dev/null++.PHONY: test_build_freebsd_amd64+test_build_freebsd_amd64:+ GOOS=freebsd GOARCH=amd64 go test -c -o /dev/null++.PHONY: test_build_openbsd_amd64+test_build_openbsd_amd64:+ GOOS=openbsd GOARCH=amd64 go test -c -o /dev/null++.PHONY: test_build_netbsd_amd64+test_build_netbsd_amd64:+ GOOS=netbsd GOARCH=amd64 go test -c -o /dev/null++# Test that we can build fastwalk on multiple platforms+.PHONY: test_build+test_build: test_build_darwin_arm64 test_build_darwin_amd64 \+ test_build_linux_arm64 test_build_linux_amd64 \+ test_build_windows_amd64 test_build_freebsd_amd64 \+ test_build_openbsd_amd64 test_build_netbsd_amd64++.PHONY: test+test: # runs all tests against the package with race detection and coverage percentage+ @go test -race -cover ./...++.PHONY: quick+quick: # runs all tests without coverage or the race detector+ @go test ./...++.PHONY: bench+bench:+ @go test -run '^$' -bench . -benchmem ./...++.PHONY: bench_comp+bench_comp: scripts/bench_comp+ @go run ./scripts/bench_comp.go++.PHONY: all+all: test test_build
@@ -0,0 +1,2 @@+/bench_comp+*.exe
@@ -0,0 +1,101 @@+package main++import (+ "flag"+ "fmt"+ "io"+ "io/ioutil"+ "log"+ "os"+ "os/exec"+ "path/filepath"+ "strconv"+)++func init() {+ log.SetOutput(os.Stderr)+ log.SetFlags(log.LstdFlags | log.Lshortfile)+}++var Tests = []string{+ "filepath",+ "godirwalk",+ "fastwalk",+}++func main() {+ count := flag.Int("count", 5, "Run each test and benchmark n times")+ compCmd := flag.String("comp", "benchstat", "Benchmark comparison command")+ flag.Parse()++ if _, err := exec.LookPath(*compCmd); err != nil {+ log.Fatalf("error: %v: %q\n", err, *compCmd)+ }++ tmpdir, err := ioutil.TempDir("", "fastwalk-bench.*")+ if err != nil {+ log.Fatal(err)+ }++ runTest := func(name string) error {+ fmt.Println("##", name)++ filename := filepath.Join(tmpdir, name+".txt")+ f, err := os.Create(filename)+ if err != nil {+ log.Fatal(err)+ }+ defer f.Close()++ args := []string{+ "test",+ "-run", `^$`,+ "-bench", `^BenchmarkWalkComparison$`,+ "-benchmem",+ "-count", strconv.Itoa(*count),+ "github.com/charlievieth/fastwalk",+ "-walkfunc", name,+ }++ cmd := exec.Command("go", args...)+ cmd.Stderr = os.Stderr+ cmd.Stdout = io.MultiWriter(os.Stdout, f)++ if err := cmd.Run(); err != nil {+ log.Fatalf("error running command: %q: %v\n", cmd.Args, err)+ }++ if err := f.Close(); err != nil {+ log.Fatal(err)+ }++ fmt.Print("\n")+ return nil+ }++ for _, name := range Tests {+ runTest(name)+ }++ benchStat := func(from, to string) {+ fmt.Printf("## %s vs. %s\n", from, to)+ cmd := exec.Command(*compCmd,+ filepath.Join(tmpdir, from+".txt"),+ filepath.Join(tmpdir, to+".txt"),+ )+ cmd.Stderr = os.Stderr+ cmd.Stdout = os.Stdout+ if err := cmd.Run(); err != nil {+ log.Fatalf("error running command: %q: %v\n", cmd.Args, err)+ }+ fmt.Print("\n")+ }++ fmt.Println("## Comparisons")+ fmt.Println("########################################################")+ fmt.Print("\n")+ benchStat("filepath", "fastwalk")+ benchStat("godirwalk", "fastwalk")++ fmt.Printf("Temp: %s\n", tmpdir)+}