def test_pickle(): import pickle alpha = SortedList(range(10000)) alpha._reset(500) beta = pickle.loads(pickle.dumps(alpha)) assert alpha == beta assert alpha._load == beta._load
def test_getitem_slice(): random.seed(0) slt = SortedList() slt._reset(17) lst = list() for rpt in range(100): val = random.random() slt.add(val) lst.append(val) lst.sort() assert all(slt[start:] == lst[start:] for start in [-75, -25, 0, 25, 75]) assert all(slt[:stop] == lst[:stop] for stop in [-75, -25, 0, 25, 75]) assert all(slt[::step] == lst[::step] for step in [-5, -1, 1, 5]) assert all(slt[start:stop] == lst[start:stop] for start in [-75, -25, 0, 25, 75] for stop in [-75, -25, 0, 25, 75]) assert all(slt[:stop:step] == lst[:stop:step] for stop in [-75, -25, 0, 25, 75] for step in [-5, -1, 1, 5]) assert all(slt[start::step] == lst[start::step] for start in [-75, -25, 0, 25, 75] for step in [-5, -1, 1, 5]) assert all(slt[start:stop:step] == lst[start:stop:step] for start in [-75, -25, 0, 25, 75] for stop in [-75, -25, 0, 25, 75] for step in [-5, -1, 1, 5])
def test_islice(): sl = SortedList() sl._reset(7) assert [] == list(sl.islice()) values = list(range(53)) 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_delitem_slice(): slt = SortedList(range(100)) slt._reset(17) del slt[10:40:1] del slt[10:40:-1] del slt[10:40:2] del slt[10:40:-2]
def test_copy(): alpha = SortedList(range(100)) alpha._reset(7) beta = alpha.copy() alpha.add(100) assert len(alpha) == 101 assert len(beta) == 100
def test_delitem_slice(): slt = SortedList(range(100)) slt._reset(17) del slt[10:40:1] del slt[10:40:-1] del slt[10:40:2] del slt[10:40:-2]
def test_copy(): alpha = SortedList(range(100)) alpha._reset(7) beta = alpha.copy() alpha.add(100) assert len(alpha) == 101 assert len(beta) == 100
def test_copy_copy(): import copy alpha = SortedList(range(100)) alpha._reset(7) beta = copy.copy(alpha) alpha.add(100) assert len(alpha) == 101 assert len(beta) == 100
def test_copy_copy(): import copy alpha = SortedList(range(100)) alpha._reset(7) beta = copy.copy(alpha) alpha.add(100) assert len(alpha) == 101 assert len(beta) == 100
def test_pickle(): import pickle alpha = SortedList(range(10000)) alpha._reset(500) beta = pickle.loads(pickle.dumps(alpha)) assert alpha == beta assert alpha._load == 500 assert beta._load == 1000
def test_setitem_extended_slice(): slt = SortedList(range(0, 1000, 10)) slt._reset(17) lst = list(range(0, 1000, 10)) lst[10:90:10] = range(105, 905, 100) slt[10:90:10] = range(105, 905, 100) assert slt == lst slt._check()
def test_bisect_right(): slt = SortedList() assert slt.bisect_right(10) == 0 slt = SortedList(range(100)) slt._reset(17) slt.update(range(100)) slt._check() assert slt.bisect_right(10) == 22 assert slt.bisect_right(200) == 200
def test_append(): slt = SortedList() slt._reset(17) slt.append(0) for val in range(1, 1000): slt.append(val) slt._check()
def test_bisect_left(): slt = SortedList() assert slt.bisect_left(0) == 0 slt = SortedList(range(100)) slt._reset(17) slt.update(range(100)) slt._check() assert slt.bisect_left(50) == 100 assert slt.bisect_left(200) == 200
def test_bisect_left(): slt = SortedList() assert slt.bisect_left(0) == 0 slt = SortedList(range(100)) slt._reset(17) slt.update(range(100)) slt._check() assert slt.bisect_left(50) == 100 assert slt.bisect_left(200) == 200
def test_bisect_right(): slt = SortedList() assert slt.bisect_right(10) == 0 slt = SortedList(range(100)) slt._reset(17) slt.update(range(100)) slt._check() assert slt.bisect_right(10) == 22 assert slt.bisect_right(200) == 200
def test_delete(): slt = SortedList(range(20)) slt._reset(4) slt._check() for val in range(20): slt.remove(val) slt._check() assert len(slt) == 0 assert slt._maxes == [] assert slt._lists == []
def test_op_add(): this = SortedList(range(10)) this._reset(4) assert (this + this + this) == (this * 3) that = SortedList(range(10)) that._reset(4) that += that that += that assert that == (this * 4)
def test_op_add(): this = SortedList(range(10)) this._reset(4) assert (this + this + this) == (this * 3) that = SortedList(range(10)) that._reset(4) that += that that += that assert that == (this * 4)
def test_delete(): slt = SortedList(range(20)) slt._reset(4) slt._check() for val in range(20): slt.remove(val) slt._check() assert len(slt) == 0 assert slt._maxes == [] assert slt._lists == []
def test_pop(): slt = SortedList(range(10)) slt._reset(4) slt._check() assert slt.pop() == 9 slt._check() assert slt.pop(0) == 0 slt._check() assert slt.pop(-2) == 7 slt._check() assert slt.pop(4) == 5 slt._check()
def test_pop(): slt = SortedList(range(10)) slt._reset(4) slt._check() assert slt.pop() == 9 slt._check() assert slt.pop(0) == 0 slt._check() assert slt.pop(-2) == 7 slt._check() assert slt.pop(4) == 5 slt._check()
def test_setitem(): random.seed(0) slt = SortedList(range(0, 100, 10)) slt._reset(4) values = list(enumerate(range(5, 105, 10))) random.shuffle(values) for pos, val in values: slt[pos] = val slt[-2] = 85 slt._check()
def test_remove(): slt = SortedList() assert slt.discard(0) == None assert len(slt) == 0 slt._check() slt = SortedList([1, 2, 2, 2, 3, 3, 5]) slt._reset(4) slt.remove(2) slt._check() assert all(tup[0] == tup[1] for tup in zip(slt, [1, 2, 2, 3, 3, 5]))
def test_insert(): slt = SortedList(range(10)) slt._reset(4) slt.insert(-1, 9) slt._check() slt.insert(-100, 0) slt._check() slt.insert(100, 10) slt._check() slt = SortedList() slt._reset(4) slt.insert(0, 5) slt._check() slt = SortedList(range(5, 15)) slt._reset(4) for rpt in range(8): slt.insert(0, 4) slt._check() slt = SortedList(range(10)) slt._reset(4) slt.insert(8, 8) slt._check()
def test_remove(): slt = SortedList() assert slt.discard(0) == None assert len(slt) == 0 slt._check() slt = SortedList([1, 2, 2, 2, 3, 3, 5]) slt._reset(4) slt.remove(2) slt._check() assert all(tup[0] == tup[1] for tup in zip(slt, [1, 2, 2, 3, 3, 5]))
def test_delitem(): random.seed(0) slt = SortedList(range(100)) slt._reset(17) while len(slt) > 0: pos = random.randrange(len(slt)) del slt[pos] slt._check() slt = SortedList(range(100)) slt._reset(17) del slt[:] assert len(slt) == 0 slt._check()
def test_count(): slt = SortedList() slt._reset(7) assert slt.count(0) == 0 for iii in range(100): for jjj in range(iii): slt.add(iii) slt._check() for iii in range(100): assert slt.count(iii) == iii assert slt.count(100) == 0
def test_count(): slt = SortedList() slt._reset(7) assert slt.count(0) == 0 for iii in range(100): for jjj in range(iii): slt.add(iii) slt._check() for iii in range(100): assert slt.count(iii) == iii assert slt.count(100) == 0
def test_delitem(): random.seed(0) slt = SortedList(range(100)) slt._reset(17) while len(slt) > 0: pos = random.randrange(len(slt)) del slt[pos] slt._check() slt = SortedList(range(100)) slt._reset(17) del slt[:] assert len(slt) == 0 slt._check()
def test_getitem(): random.seed(0) slt = SortedList() slt._reset(17) lst = list() for rpt in range(100): val = random.random() slt.add(val) lst.append(val) lst.sort() 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_getitem(): random.seed(0) slt = SortedList() slt._reset(17) lst = list() for rpt in range(100): val = random.random() slt.add(val) lst.append(val) lst.sort() 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_init(): slt = SortedList() assert slt.key is None slt._check() slt = SortedList() slt._reset(10000) assert slt._load == 10000 slt._check() slt = SortedList(range(10000)) assert all(tup[0] == tup[1] for tup in zip(slt, range(10000))) slt.clear() assert slt._len == 0 assert slt._maxes == [] assert slt._lists == [] slt._check()
def test_setitem_slice(): slt = SortedList(range(100)) slt._reset(17) slt[:10] = iter(range(10)) assert slt == list(range(100)) slt[:10:2] = iter(val * 2 for val in range(5)) assert slt == list(range(100)) slt[:50] = range(-50, 50) assert slt == list(range(-50, 100)) slt[:100] = range(50) assert slt == list(range(100)) slt[:] = range(100) assert slt == list(range(100)) slt[90:] = [] assert slt == list(range(90)) slt[:10] = [] assert slt == list(range(10, 90)) slt._check()
def test_init(): slt = SortedList() assert slt.key is None slt._check() slt = SortedList() slt._reset(10000) assert slt._load == 10000 slt._check() slt = SortedList(range(10000)) assert all(tup[0] == tup[1] for tup in zip(slt, range(10000))) slt.clear() assert slt._len == 0 assert slt._maxes == [] assert slt._lists == [] slt._check()
def test_stress(repeat=1000): slt = SortedList((random.random() for rpt in range(1000))) slt._reset(23) for rpt in range(repeat): action = random.choice(actions) action(slt) slt._check() fourth = int(len(slt) / 4) count = 0 if fourth == 0 else random.randrange(-fourth, fourth) while count > 0: slt.add(random.random()) count -= 1 while count < 0: pos = random.randrange(len(slt)) del slt[pos] count += 1 while len(slt) > 2000: # Shorten the sortedlist. This maintains the "jaggedness" # of the sublists which helps coverage. pos = random.randrange(len(slt._maxes)) del slt._maxes[pos] del slt._lists[pos] slt._len = sum(len(sublist) for sublist in slt._lists) slt._index = [] slt._check() slt._check() slt._check() stress_update(slt) while len(slt) > 0: pos = random.randrange(len(slt)) del slt[pos] slt._check()
def test_stress(repeat=1000): slt = SortedList((random.random() for rpt in range(1000))) slt._reset(23) for rpt in range(repeat): action = random.choice(actions) action(slt) slt._check() fourth = int(len(slt) / 4) count = 0 if fourth == 0 else random.randrange(-fourth, fourth) while count > 0: slt.add(random.random()) count -= 1 while count < 0: pos = random.randrange(len(slt)) del slt[pos] count += 1 while len(slt) > 2000: # Shorten the sortedlist. This maintains the "jaggedness" # of the sublists which helps coverage. pos = random.randrange(len(slt._maxes)) del slt._maxes[pos] del slt._lists[pos] slt._len = sum(len(sublist) for sublist in slt._lists) slt._index = [] slt._check() slt._check() slt._check() stress_update(slt) while len(slt) > 0: pos = random.randrange(len(slt)) del slt[pos] slt._check()
def test_index(): slt = SortedList(range(100)) slt._reset(17) for val in range(100): assert val == slt.index(val) assert slt.index(99, 0, 1000) == 99 slt = SortedList((0 for rpt in range(100))) slt._reset(17) for start in range(100): for stop in range(start, 100): assert slt.index(0, start, stop + 1) == start for start in range(100): assert slt.index(0, -(100 - start)) == start assert slt.index(0, -1000) == 0
def test_index(): slt = SortedList(range(100)) slt._reset(17) for val in range(100): assert val == slt.index(val) assert slt.index(99, 0, 1000) == 99 slt = SortedList((0 for rpt in range(100))) slt._reset(17) for start in range(100): for stop in range(start, 100): assert slt.index(0, start, stop + 1) == start for start in range(100): assert slt.index(0, -(100 - start)) == start assert slt.index(0, -1000) == 0
def test_extend(): slt = SortedList() slt._reset(17) slt.extend([]) slt._check() slt.extend(range(100)) slt._check() slt.extend([]) slt._check() slt.extend(list(range(100, 200))) slt._check() for val in range(200, 300): del slt._index[:] slt._build_index() slt.extend([val] * (val - 199)) slt._check()
def test_irange(): sl = SortedList() sl._reset(7) assert [] == list(sl.irange()) values = list(range(53)) sl.update(values) for start in range(53): for end in range(start, 53): assert list(sl.irange(start, end)) == values[start:(end + 1)] assert list(sl.irange( start, end, reverse=True)) == values[start:(end + 1)][::-1] for start in range(53): for end in range(start, 53): assert list(range(start, end)) == list( sl.irange(start, end, (True, False))) for start in range(53): for end in range(start, 53): assert list(range(start + 1, end + 1)) == list( sl.irange(start, end, (False, True))) for start in range(53): for end in range(start, 53): assert list(range(start + 1, end)) == list( sl.irange(start, end, (False, False))) for start in range(53): assert list(range(start, 53)) == list(sl.irange(start)) for end in range(53): assert list(range(0, end)) == list(sl.irange(None, end, (True, False))) assert values == list(sl.irange(inclusive=(False, False))) assert [] == list(sl.irange(53)) assert values == list(sl.irange(None, 53, (True, False)))
def test_getitem_slice(): random.seed(0) slt = SortedList() slt._reset(17) lst = list() for rpt in range(100): val = random.random() slt.add(val) lst.append(val) lst.sort() assert all(slt[start:] == lst[start:] for start in [-75, -25, 0, 25, 75]) assert all(slt[:stop] == lst[:stop] for stop in [-75, -25, 0, 25, 75]) assert all(slt[::step] == lst[::step] for step in [-5, -1, 1, 5]) assert all(slt[start:stop] == lst[start:stop] for start in [-75, -25, 0, 25, 75] for stop in [-75, -25, 0, 25, 75]) assert all(slt[:stop:step] == lst[:stop:step] for stop in [-75, -25, 0, 25, 75] for step in [-5, -1, 1, 5]) assert all(slt[start::step] == lst[start::step] for start in [-75, -25, 0, 25, 75] for step in [-5, -1, 1, 5]) assert all(slt[start:stop:step] == lst[start:stop:step] for start in [-75, -25, 0, 25, 75] for stop in [-75, -25, 0, 25, 75] for step in [-5, -1, 1, 5])
def test_irange(): sl = SortedList() sl._reset(7) assert [] == list(sl.irange()) values = list(range(53)) sl.update(values) for start in range(53): for end in range(start, 53): assert list(sl.irange(start, end)) == values[start:(end + 1)] assert list(sl.irange(start, end, reverse=True)) == values[start:(end + 1)][::-1] for start in range(53): for end in range(start, 53): assert list(range(start, end)) == list(sl.irange(start, end, (True, False))) for start in range(53): for end in range(start, 53): assert list(range(start + 1, end + 1)) == list(sl.irange(start, end, (False, True))) for start in range(53): for end in range(start, 53): assert list(range(start + 1, end)) == list(sl.irange(start, end, (False, False))) for start in range(53): assert list(range(start, 53)) == list(sl.irange(start)) for end in range(53): assert list(range(0, end)) == list(sl.irange(None, end, (True, False))) assert values == list(sl.irange(inclusive=(False, False))) assert [] == list(sl.irange(53)) assert values == list(sl.irange(None, 53, (True, False)))
def test_islice(): sl = SortedList() sl._reset(7) assert [] == list(sl.islice()) values = list(range(53)) 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_build_index(): slt = SortedList([0]) slt._reset(4) slt._build_index() slt._check()
def test_remove_valueerror2(): slt = SortedList(range(100)) slt._reset(10) with pytest.raises(ValueError): slt.remove(100)
def test_index_valueerror7(): slt = SortedList([0] * 10 + [2] * 10) slt._reset(4) with pytest.raises(ValueError): slt.index(1, 0, 10)
def test_index_valueerror6(): slt = SortedList(range(10)) slt._reset(4) with pytest.raises(ValueError): slt.index(3, 5)
def test_index_valueerror3(): slt = SortedList([0] * 10) slt._reset(4) with pytest.raises(ValueError): slt.index(0, 7, 3)
def test_index_valueerror6(): slt = SortedList(range(10)) slt._reset(4) with pytest.raises(ValueError): slt.index(3, 5)
def test_getitem_slicezero(): slt = SortedList(range(100)) slt._reset(17) with pytest.raises(ValueError): slt[::0]
def test_pop_indexerror2(): slt = SortedList(range(10)) slt._reset(4) with pytest.raises(IndexError): slt.pop(10)
def test_build_index(): slt = SortedList([0]) slt._reset(4) slt._build_index() slt._check()
def test_index_valueerror3(): slt = SortedList([0] * 10) slt._reset(4) with pytest.raises(ValueError): slt.index(0, 7, 3)
def test_check(): slt = SortedList(range(10)) slt._reset(4) slt._len = 5 with pytest.raises(AssertionError): slt._check()
def test_check(): slt = SortedList(range(10)) slt._reset(4) slt._len = 5 with pytest.raises(AssertionError): slt._check()
def test_index_valueerror7(): slt = SortedList([0] * 10 + [2] * 10) slt._reset(4) with pytest.raises(ValueError): slt.index(1, 0, 10)