package org.roaringbitmap.aggregation.and.identical; import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Mode; import org.openjdk.jmh.annotations.OutputTimeUnit; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; import org.roaringbitmap.RoaringBitmap; @State(Scope.Benchmark) public class RoaringBitmapBenchmark { private RoaringBitmap bitmap1; private RoaringBitmap bitmap2; @Setup public void setup() { bitmap1 = new RoaringBitmap(); bitmap2 = new RoaringBitmap(); int k = 1 << 16; for (int i = 0; i < 10000; ++i) { bitmap1.add(i * k); bitmap2.add(i * k); } } @Benchmark @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MICROSECONDS) public RoaringBitmap and() { return RoaringBitmap.and(bitmap1, bitmap2); } @Benchmark @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MICROSECONDS) public RoaringBitmap inplace_and() { RoaringBitmap b1 = bitmap1.clone(); b1.and(bitmap2); return b1; } @Benchmark @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MICROSECONDS) public RoaringBitmap justclone() { return bitmap1.clone(); } }