def test_select(self, single): for name, data in single: ref = sorted(set(data)) rb = ImmutableRoaringBitmap(data) lrb = list(rb) idx = [random.randint(0, len(ref) - 1) for _ in range(10)] for i in idx: assert lrb[i] == ref[i], name assert rb.select(i) in rb, name assert rb.select(i) == ref[i], name assert rb.rank(rb.select(i)) - 1 == i, name if rb.select(i) + 1 in rb: assert rb.rank(rb.select(i) + 1) - 1 == i + 1, name else: assert rb.rank(rb.select(i) + 1) - 1 == i, name
def test_select2(self): gap = 1 while gap <= 1024: rb = ImmutableRoaringBitmap(range(0, 100000, gap)) for k in range(0, 100000 // gap): assert rb.select(k) == k * gap gap *= 2