diff --git a/tar_benchmark_test.go b/tar_benchmark_test.go new file mode 100644 index 0000000..d946f2a --- /dev/null +++ b/tar_benchmark_test.go @@ -0,0 +1,84 @@ +package tartest + +import ( + "io" + "io/ioutil" + "os" + "testing" + + upTar "archive/tar" + + ourTar "github.com/vbatts/tar-split/archive/tar" +) + +var testfile = "./archive/tar/testdata/sparse-formats.tar" + +func BenchmarkUpstreamTar(b *testing.B) { + for n := 0; n < b.N; n++ { + fh, err := os.Open(testfile) + if err != nil { + b.Fatal(err) + } + tr := upTar.NewReader(fh) + for { + _, err := tr.Next() + if err != nil { + if err == io.EOF { + break + } + fh.Close() + b.Fatal(err) + } + io.Copy(ioutil.Discard, tr) + } + fh.Close() + } +} + +func BenchmarkOurTarNoAccounting(b *testing.B) { + for n := 0; n < b.N; n++ { + fh, err := os.Open(testfile) + if err != nil { + b.Fatal(err) + } + tr := ourTar.NewReader(fh) + tr.RawAccounting = false // this is default, but explicit here + for { + _, err := tr.Next() + if err != nil { + if err == io.EOF { + break + } + fh.Close() + b.Fatal(err) + } + io.Copy(ioutil.Discard, tr) + } + fh.Close() + } +} +func BenchmarkOurTarYesAccounting(b *testing.B) { + for n := 0; n < b.N; n++ { + fh, err := os.Open(testfile) + if err != nil { + b.Fatal(err) + } + tr := ourTar.NewReader(fh) + tr.RawAccounting = true // This enables mechanics for collecting raw bytes + for { + _ = tr.RawBytes() + _, err := tr.Next() + _ = tr.RawBytes() + if err != nil { + if err == io.EOF { + break + } + fh.Close() + b.Fatal(err) + } + io.Copy(ioutil.Discard, tr) + _ = tr.RawBytes() + } + fh.Close() + } +}