From 6810cedb21b2c3d0b9bb8f9af12ff2dc7a2f14df Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Tue, 26 Jul 2016 09:50:08 -0400 Subject: [PATCH] benchmark: add a comparison of 'archive/tar' Since this project has forked logic of upstream 'archive/tar', this does a brief comparison including the RawBytes usage. ```bash $ go test -run="XXX" -bench=. testing: warning: no tests to run BenchmarkUpstreamTar-4 2000 700809 ns/op BenchmarkOurTarNoAccounting-4 2000 692055 ns/op BenchmarkOurTarYesAccounting-4 2000 723184 ns/op PASS ok vb/tar-split 4.461s ``` From this, the difference is negligible. Signed-off-by: Vincent Batts --- tar_benchmark_test.go | 84 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 tar_benchmark_test.go 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() + } +}