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  `