From 831195e7d2e41420c91a841fc8bb1609fe99470a Mon Sep 17 00:00:00 2001 From: Matt Jaffee Date: Tue, 5 Mar 2019 15:46:13 -0600 Subject: [PATCH] update roaring container benchmarks to do both slice and btree --- roaring/roaring_test.go | 93 +++++++++++++++++++++++++---------------- 1 file changed, 58 insertions(+), 35 deletions(-) diff --git a/roaring/roaring_test.go b/roaring/roaring_test.go index a4333d0fc..ba5510475 100644 --- a/roaring/roaring_test.go +++ b/roaring/roaring_test.go @@ -1457,64 +1457,87 @@ const ( MaxContainerVal = 0xffff ) -func BenchmarkContainerLinear(b *testing.B) { +var bmFuncs = []func(a ...uint64) *roaring.Bitmap{roaring.NewBitmap, roaring.NewBTreeBitmap} +var bmFuncNames = []string{"slice", "btree"} - for n := 0; n < b.N; n++ { - bm := roaring.NewFileBitmap() - for row := uint64(1); row < NumRows; row++ { - for col := uint64(1); col < NumColums; col++ { - bm.Add(row*pilosa.ShardWidth + (col * MaxContainerVal)) +func BenchmarkContainerLinear(b *testing.B) { + for i, bmMaker := range bmFuncs { + b.Run(fmt.Sprintf("%v", bmFuncNames[i]), func(b *testing.B) { + for n := 0; n < b.N; n++ { + bm := bmMaker() + for row := uint64(1); row < NumRows; row++ { + for col := uint64(1); col < NumColums; col++ { + bm.Add(row*pilosa.ShardWidth + (col * MaxContainerVal)) + } + } } - } + + }) } } func BenchmarkContainerReverse(b *testing.B) { - for n := 0; n < b.N; n++ { - bm := roaring.NewFileBitmap() - for row := NumRows - 1; row >= 1; row-- { - for col := NumColums - 1; col >= 1; col-- { - bm.Add(row*pilosa.ShardWidth + (col * MaxContainerVal)) + for i, bmMaker := range bmFuncs { + b.Run(fmt.Sprintf("%v", bmFuncNames[i]), func(b *testing.B) { + for n := 0; n < b.N; n++ { + bm := bmMaker() + for row := NumRows - 1; row >= 1; row-- { + for col := NumColums - 1; col >= 1; col-- { + bm.Add(row*pilosa.ShardWidth + (col * MaxContainerVal)) + } + } } - } + }) } } func BenchmarkContainerColumn(b *testing.B) { - for n := 0; n < b.N; n++ { - bm := roaring.NewFileBitmap() - for col := uint64(1); col < NumColums; col++ { - for row := uint64(1); row < NumRows; row++ { - bm.Add(row*pilosa.ShardWidth + (col * MaxContainerVal)) + for i, bmMaker := range bmFuncs { + b.Run(fmt.Sprintf("%v", bmFuncNames[i]), func(b *testing.B) { + for n := 0; n < b.N; n++ { + bm := bmMaker() + for col := uint64(1); col < NumColums; col++ { + for row := uint64(1); row < NumRows; row++ { + bm.Add(row*pilosa.ShardWidth + (col * MaxContainerVal)) + } + } } - } + }) } } func BenchmarkContainerOutsideIn(b *testing.B) { - middle := NumRows / uint64(2) - for n := 0; n < b.N; n++ { - bm := roaring.NewFileBitmap() - - for col := uint64(1); col < NumColums; col++ { - for row := uint64(1); row < middle; row++ { - bm.Add(row*pilosa.ShardWidth + (col * MaxContainerVal)) - bm.Add((NumRows-row)*pilosa.ShardWidth + (col * MaxContainerVal)) + for i, bmMaker := range bmFuncs { + b.Run(fmt.Sprintf("%v", bmFuncNames[i]), func(b *testing.B) { + middle := NumRows / uint64(2) + for n := 0; n < b.N; n++ { + bm := bmMaker() + for col := uint64(1); col < NumColums; col++ { + for row := uint64(1); row < middle; row++ { + bm.Add(row*pilosa.ShardWidth + (col * MaxContainerVal)) + bm.Add((NumRows-row)*pilosa.ShardWidth + (col * MaxContainerVal)) + } + } } - } + }) } } func BenchmarkContainerInsideOut(b *testing.B) { + reflect.TypeOf(bmFuncs[0]).Name() middle := NumRows / uint64(2) - for n := 0; n < b.N; n++ { - bm := roaring.NewFileBitmap() - for col := uint64(1); col < NumColums; col++ { - for row := uint64(1); row <= middle; row++ { - bm.Add((middle+row)*pilosa.ShardWidth + (col * MaxContainerVal)) - bm.Add((middle-row)*pilosa.ShardWidth + (col * MaxContainerVal)) + for i, bmMaker := range bmFuncs { + b.Run(fmt.Sprintf("%v", bmFuncNames[i]), func(b *testing.B) { + for n := 0; n < b.N; n++ { + bm := bmMaker() + for col := uint64(1); col < NumColums; col++ { + for row := uint64(1); row <= middle; row++ { + bm.Add((middle+row)*pilosa.ShardWidth + (col * MaxContainerVal)) + bm.Add((middle-row)*pilosa.ShardWidth + (col * MaxContainerVal)) + } + } } - } + }) } }