From 1b5f02e2931555e0f2697a7df52131d43b82acf7 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sat, 18 Jan 2020 13:39:50 +0200 Subject: [PATCH] lib/uint64set: add benchmarks for Set.Union --- lib/uint64set/uint64set_timing_test.go | 46 ++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/lib/uint64set/uint64set_timing_test.go b/lib/uint64set/uint64set_timing_test.go index 864b4d34f..1b0d6955c 100644 --- a/lib/uint64set/uint64set_timing_test.go +++ b/lib/uint64set/uint64set_timing_test.go @@ -8,6 +8,52 @@ import ( "github.com/valyala/fastrand" ) +func BenchmarkUnionNoOverlap(b *testing.B) { + for _, itemsCount := range []int{1e3, 1e4, 1e5, 1e6, 1e7} { + start := uint64(time.Now().UnixNano()) + sa := createRangeSet(start, itemsCount) + sb := createRangeSet(start+uint64(itemsCount), itemsCount) + b.Run(fmt.Sprintf("items_%d", itemsCount), func(b *testing.B) { + benchmarkUnion(b, sa, sb) + }) + } +} + +func BenchmarkUnionPartialOverlap(b *testing.B) { + for _, itemsCount := range []int{1e3, 1e4, 1e5, 1e6, 1e7} { + start := uint64(time.Now().UnixNano()) + sa := createRangeSet(start, itemsCount) + sb := createRangeSet(start+uint64(itemsCount/2), itemsCount) + b.Run(fmt.Sprintf("items_%d", itemsCount), func(b *testing.B) { + benchmarkUnion(b, sa, sb) + }) + } +} + +func BenchmarkUnionFullOverlap(b *testing.B) { + for _, itemsCount := range []int{1e3, 1e4, 1e5, 1e6, 1e7} { + start := uint64(time.Now().UnixNano()) + sa := createRangeSet(start, itemsCount) + sb := createRangeSet(start, itemsCount) + b.Run(fmt.Sprintf("items_%d", itemsCount), func(b *testing.B) { + benchmarkUnion(b, sa, sb) + }) + } +} + +func benchmarkUnion(b *testing.B, sa, sb *Set) { + b.ReportAllocs() + b.SetBytes(int64(sa.Len() + sb.Len())) + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + saCopy := sa.Clone() + sbCopy := sb.Clone() + saCopy.Union(sb) + sbCopy.Union(sa) + } + }) +} + func BenchmarkIntersectNoOverlap(b *testing.B) { for _, itemsCount := range []int{1e3, 1e4, 1e5, 1e6, 1e7} { start := uint64(time.Now().UnixNano())