github.com/willabides/benchdiff@v0.9.1/cmd/benchdiff/internal/benchdiff_test.go (about) 1 package internal 2 3 import ( 4 "os" 5 "path/filepath" 6 "testing" 7 8 "github.com/stretchr/testify/require" 9 "github.com/willabides/benchdiff/pkg/benchstatter" 10 ) 11 12 func setupTestRepo(t *testing.T, path string) { 13 t.Helper() 14 mustGo(t, path, "mod", "init", "bindiff.test") 15 ex1 := filepath.Join(path, "ex1.go") 16 ex1test := filepath.Join(path, "ex1_test.go") 17 err := os.WriteFile(ex1, []byte(ex1Rev1), 0o600) 18 require.NoError(t, err) 19 err = os.WriteFile(ex1test, []byte(ex1Bench), 0o600) 20 require.NoError(t, err) 21 err = os.WriteFile(filepath.Join(path, ".gitignore"), []byte("tmp/\n"), 0o600) 22 require.NoError(t, err) 23 mustGit(t, path, "init") 24 err = os.MkdirAll(filepath.Join(path, "tmp"), 0o700) 25 require.NoError(t, err) 26 mustGit(t, path, "add", ".") 27 mustGit(t, path, "commit", "-m", "initial commit") 28 err = os.WriteFile(ex1, []byte(ex1Rev2), 0o600) 29 require.NoError(t, err) 30 } 31 32 func testInDir(t *testing.T, dir string) { 33 t.Helper() 34 pwd, err := os.Getwd() 35 require.NoError(t, err) 36 require.NoError(t, os.Chdir(dir)) 37 t.Cleanup(func() { 38 t.Helper() 39 require.NoError(t, os.Chdir(pwd)) 40 }) 41 } 42 43 func TestBenchdiff_Run(t *testing.T) { 44 dir := t.TempDir() 45 setupTestRepo(t, dir) 46 testInDir(t, dir) 47 differ := Benchdiff{ 48 GitCmd: "git", 49 BenchCmd: "go", 50 BenchArgs: "test -bench . -benchmem -count 10 -benchtime 10x .", 51 ResultsDir: "./tmp", 52 BaseRef: "HEAD", 53 Path: ".", 54 Benchstat: &benchstatter.Benchstat{}, 55 } 56 _, err := differ.Run() 57 require.NoError(t, err) 58 } 59 60 var ex1Rev1 = ` 61 package ex1 62 63 import ( 64 "time" 65 ) 66 67 var globalBytes []byte 68 69 func doNothing() { 70 time.Sleep(10 * time.Millisecond) 71 newBytes := []byte("0") 72 globalBytes = append(globalBytes, newBytes...) 73 } 74 ` 75 76 var ex1Rev2 = ` 77 package ex1 78 79 import ( 80 "time" 81 ) 82 83 var globalBytes []byte 84 85 func doNothing() { 86 time.Sleep(1 * time.Millisecond) 87 newBytes := []byte("1123456789") 88 globalBytes = append(globalBytes, newBytes...) 89 } 90 ` 91 92 var ex1Bench = ` 93 package ex1 94 95 import ( 96 "testing" 97 ) 98 99 func BenchmarkDoNothing(b *testing.B) { 100 globalBytes = []byte{} 101 for i := 0; i < b.N; i++ { 102 doNothing() 103 } 104 } 105 `