Fix handling of small/big fuzzyval's in NeighborList.
This fixes an exception when having a really big or small zoom (e.g. 0) and then using +/-. Fixes #361.
This commit is contained in:
parent
410d78cfa2
commit
29ce0a5157
@ -355,6 +355,30 @@ class SnapInTests(unittest.TestCase):
|
|||||||
self.assertEqual(self.nl.previtem(), 1)
|
self.assertEqual(self.nl.previtem(), 1)
|
||||||
self.assertEqual(self.nl._idx, 2)
|
self.assertEqual(self.nl._idx, 2)
|
||||||
|
|
||||||
|
def test_too_big_next(self):
|
||||||
|
"""Test fuzzyval/next with a value bigger than any in the list."""
|
||||||
|
self.nl.fuzzyval = 30
|
||||||
|
self.assertEqual(self.nl.nextitem(), 20)
|
||||||
|
self.assertEqual(self.nl._idx, 0)
|
||||||
|
|
||||||
|
def test_too_big_prev(self):
|
||||||
|
"""Test fuzzyval/prev with a value bigger than any in the list."""
|
||||||
|
self.nl.fuzzyval = 30
|
||||||
|
self.assertEqual(self.nl.previtem(), 20)
|
||||||
|
self.assertEqual(self.nl._idx, 0)
|
||||||
|
|
||||||
|
def test_too_small_next(self):
|
||||||
|
"""Test fuzzyval/next with a value smaller than any in the list."""
|
||||||
|
self.nl.fuzzyval = 0
|
||||||
|
self.assertEqual(self.nl.nextitem(), 1)
|
||||||
|
self.assertEqual(self.nl._idx, 2)
|
||||||
|
|
||||||
|
def test_too_small_prev(self):
|
||||||
|
"""Test fuzzyval/prev with a value smaller than any in the list."""
|
||||||
|
self.nl.fuzzyval = 0
|
||||||
|
self.assertEqual(self.nl.previtem(), 1)
|
||||||
|
self.assertEqual(self.nl._idx, 2)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
@ -116,8 +116,14 @@ class NeighborList(collections.abc.Sequence):
|
|||||||
op = operator.le if offset < 0 else operator.ge
|
op = operator.le if offset < 0 else operator.ge
|
||||||
items = [(idx, e) for (idx, e) in enumerate(self._items)
|
items = [(idx, e) for (idx, e) in enumerate(self._items)
|
||||||
if op(e, self.fuzzyval)]
|
if op(e, self.fuzzyval)]
|
||||||
close_item = min(items, key=lambda tpl: abs(self.fuzzyval - tpl[1]))
|
if items:
|
||||||
self._idx = close_item[0]
|
item = min(items, key=lambda tpl: abs(self.fuzzyval - tpl[1]))
|
||||||
|
else:
|
||||||
|
sorted_items = sorted([(idx, e) for (idx, e) in
|
||||||
|
enumerate(self.items)])
|
||||||
|
idx = 0 if offset < 0 else -1
|
||||||
|
item = sorted_items[idx]
|
||||||
|
self._idx = item[0]
|
||||||
return self.fuzzyval not in self._items
|
return self.fuzzyval not in self._items
|
||||||
|
|
||||||
def _get_new_item(self, offset):
|
def _get_new_item(self, offset):
|
||||||
|
Loading…
Reference in New Issue
Block a user