Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion sortedcollections/recipes.py
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ def index(self, value):
"Return index of value."
# pylint: disable=arguments-differ
try:
return self._keys[value]
return self._nums.index(self._keys[value])
except KeyError:
raise ValueError(f'{value!r} is not in {type(self).__name__}')

Expand Down
31 changes: 31 additions & 0 deletions tests/test_orderedset.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,37 @@ def test_index():
assert values.index(value) == os.index(value)


@pytest.mark.parametrize('removed', ['a', 'c', 'ace'])
def test_index_after_discard(removed):
os = OrderedSet('abcde')
for value in removed:
os.discard(value)
expected = [value for value in 'abcde' if value not in removed]
for index, value in enumerate(expected):
assert os.index(value) == index
assert os[os.index(value)] == value
for value in removed:
with pytest.raises(ValueError):
os.index(value)


def test_index_after_clear():
os = OrderedSet('abc')
os.clear()
os.add('d')
assert os.index('d') == 0
assert os[os.index('d')] == 'd'


def test_index_after_reinsert():
os = OrderedSet('abc')
os.discard('b')
os.add('b')
for index, value in enumerate('acb'):
assert os.index(value) == index
assert os[os.index(value)] == value


def test_index_error():
os = OrderedSet(range(10))
with pytest.raises(ValueError):
Expand Down