Skip to content

Commit

Permalink
Make pure-Python impl. of 'OOBTree.byValue' match semantics of C impl.
Browse files Browse the repository at this point in the history
Items must be in reversed-sorted order.
  • Loading branch information
tseaver committed May 25, 2013
1 parent 2472f6b commit 912b0a2
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 6 deletions.
3 changes: 2 additions & 1 deletion BTrees/_base.py
Expand Up @@ -1171,7 +1171,8 @@ def iteritems(self, min=_marker, max=_marker,
return iter(self.items(min, max, excludemin, excludemax))

def byValue(self, min):
return sorted((v, k) for (k, v) in self.iteritems() if v >= min)
return reversed(
sorted((v, k) for (k, v) in self.iteritems() if v >= min))

def insert(self, key, value):
return bool(self._set(key, value, True)[0])
Expand Down
14 changes: 10 additions & 4 deletions BTrees/tests/test_OOBTree.py
Expand Up @@ -99,9 +99,15 @@ def _getTargetClass(self):

class OOBTreeTest(BTreeTests, unittest.TestCase):

def _makeOne(self):
def _makeOne(self, *args):
from BTrees.OOBTree import OOBTree
return OOBTree()
return OOBTree(*args)

def test_byValue(self):
ITEMS = [(y, x) for x, y in enumerate('abcdefghijklmnopqrstuvwxyz')]
tree = self._makeOne(ITEMS)
self.assertEqual(list(tree.byValue(22)),
[(y, x) for x, y in reversed(ITEMS[22:])])

def testRejectDefaultComparison(self):
# Check that passing int keys w default comparison fails.
Expand Down Expand Up @@ -146,9 +152,9 @@ class OOBTreePyTest(OOBTreeTest):
# default 'object' comparison semantics.
#class OOBTreePyTest(BTreeTests, unittest.TestCase):

def _makeOne(self):
def _makeOne(self, *args):
from BTrees.OOBTree import OOBTreePy
return OOBTreePy()
return OOBTreePy(*args)



Expand Down
2 changes: 1 addition & 1 deletion BTrees/tests/test__base.py
Expand Up @@ -2334,7 +2334,7 @@ def test_byValue(self):
ITEMS = [(y, x) for x, y in enumerate('abcdefghijklmnopqrstuvwxyz')]
tree = self._makeOne(ITEMS)
self.assertEqual(list(tree.byValue(min=22)),
[(y, x) for x, y in ITEMS[22:]])
[(y, x) for x, y in reversed(ITEMS[22:])])

def test_insert_new_key(self):
tree = self._makeOne()
Expand Down
6 changes: 6 additions & 0 deletions CHANGES.rst
@@ -1,6 +1,12 @@
``BTrees`` Changelog
====================

Unreleased
----------

- Ensure that pure-Python implementation of ``OOBTree.byValue`` matches
semantics (reversed-sort) of C implementation.

4.0.7 (2013-05-22)
------------------

Expand Down

0 comments on commit 912b0a2

Please sign in to comment.