package org.roaringbitmap.runcontainer;

import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Mode;
import org.roaringbitmap.RoaringBitmap;
import org.roaringbitmap.RoaringOnlyBenchmarkState;
import org.roaringbitmap.buffer.ImmutableRoaringBitmap;
import org.roaringbitmap.realdata.state.RealDataRoaringOnlyBenchmarkState;

@BenchmarkMode(Mode.Throughput)
public class ArrayContainerAndNotRunContainerBenchmark {

  @Benchmark
  public RoaringBitmap pairwiseACAndNotRC(RealDataRoaringOnlyBenchmarkState bs) {
    RoaringBitmap last = null;
    for (int k = 0; k + 1 < bs.bitmaps.size(); ++k) {
      last = RoaringBitmap.andNot(bs.onlyArrayContainers.get(k), bs.onlyRunContainers.get(k + 1));
    }
    return last;
  }

  @Benchmark
  public ImmutableRoaringBitmap immutablePairwiseACAndNotRC(RealDataRoaringOnlyBenchmarkState bs) {
    ImmutableRoaringBitmap last = null;
    for (int k = 0; k + 1 < bs.immutableBitmaps.size(); ++k) {
      last = ImmutableRoaringBitmap.andNot(bs.immutableOnlyArrayContainers.get(k), bs.immutableOnlyRunContainers.get(k + 1));
    }
    return last;
  }
}