def test_islice(): sl = SortedKeyList(key=modulo) sl._reset(7) assert [] == list(sl.islice()) values = sorted(range(100), key=modulo) sl.update(values) for start in range(53): for stop in range(53): assert list(sl.islice(start, stop)) == values[start:stop] for start in range(53): for stop in range(53): assert list(sl.islice(start, stop, reverse=True)) == values[start:stop][::-1] for start in range(53): assert list(sl.islice(start=start)) == values[start:] assert list(sl.islice(start=start, reverse=True)) == values[start:][::-1] for stop in range(53): assert list(sl.islice(stop=stop)) == values[:stop] assert list(sl.islice(stop=stop, reverse=True)) == values[:stop][::-1]
def test_bisect_right(): slt = SortedKeyList(key=modulo) assert slt.bisect_right(10) == 0 slt = SortedKeyList(range(100), key=modulo) slt._reset(17) slt.update(range(100)) slt._check() assert slt.bisect_right(10) == 20 assert slt.bisect_right(0) == 20
def test_update(): slt = SortedKeyList(key=modulo) slt.update(range(1000)) assert all(tup[0] == tup[1] for tup in zip(slt, sorted(range(1000), key=modulo))) assert len(slt) == 1000 slt._check() slt.update(range(10000)) assert len(slt) == 11000 slt._check()
def test_getitem(): random.seed(0) slt = SortedKeyList(key=modulo) slt._reset(17) slt.add(5) slt._build_index() slt._check() slt.clear() lst = list(random.random() for rpt in range(100)) slt.update(lst) lst.sort(key=modulo) assert all(slt[idx] == lst[idx] for idx in range(100)) assert all(slt[idx - 99] == lst[idx - 99] for idx in range(100))
def test_contains(): slt = SortedKeyList(key=modulo) slt._reset(7) assert 0 not in slt slt.update(range(100)) for val in range(100): assert val in slt assert 100 not in slt slt._check() slt = SortedKeyList(range(100), key=modulo) slt._reset(4) assert all(val not in slt for val in range(100, 200))