[Checkins] SVN: BTrees/branches/pure_python/ Test the pure-Python OOBTree implementation in parallel.
Tres Seaver
cvs-admin at zope.org
Tue Nov 6 17:58:18 UTC 2012
Log message for revision 128183:
Test the pure-Python OOBTree implementation in parallel.
Changed:
_U BTrees/branches/pure_python/
U BTrees/branches/pure_python/BTrees/OOBTree.py
U BTrees/branches/pure_python/BTrees/___BTree.py
U BTrees/branches/pure_python/BTrees/check.py
U BTrees/branches/pure_python/BTrees/tests/test_OOBTree.py
-=-
Modified: BTrees/branches/pure_python/BTrees/OOBTree.py
===================================================================
--- BTrees/branches/pure_python/BTrees/OOBTree.py 2012-11-06 17:58:15 UTC (rev 128182)
+++ BTrees/branches/pure_python/BTrees/OOBTree.py 2012-11-06 17:58:17 UTC (rev 128183)
@@ -12,13 +12,102 @@
#
##############################################################################
-import zope.interface
-import BTrees.Interfaces
+from zope.interface import moduleProvides
+from BTrees.Interfaces import IObjectObjectBTreeModule
+from BTrees.___BTree import Bucket
+from BTrees.___BTree import Set
+from BTrees.___BTree import Tree as BTree
+from BTrees.___BTree import TreeSet
+from BTrees.___BTree import difference as _difference
+from BTrees.___BTree import intersection as _intersection
+from BTrees.___BTree import setop as _setop
+from BTrees.___BTree import union as _union
+from BTrees.___BTree import to_ob as _to_key
+from BTrees.___BTree import to_ob as _to_value
+
+_BUCKET_SIZE = 30
+_TREE_SIZE = 250
+using64bits = False
+
+class OOBucketPy(Bucket):
+ MAX_SIZE = _BUCKET_SIZE
+ _to_key = _to_key
+ _to_value = _to_value
try:
- from _OOBTree import *
+ from _OOBTree import OOBucket
except ImportError:
- import ___BTree
- ___BTree._import(globals(), 'OO', 30, 250)
+ OOBucket = Bucket = OOBucketPy
+else:
+ Bucket = OOBucket
-zope.interface.moduleProvides(BTrees.Interfaces.IObjectObjectBTreeModule)
+
+class OOSetPy(Set):
+ MAX_SIZE = _BUCKET_SIZE
+ _to_key = _to_key
+try:
+ from _OOBTree import OOSet
+except ImportError:
+ OOSet = Set = OOSetPy
+else:
+ Set = OOSet
+
+
+class OOBTreePy(BTree):
+ MAX_SIZE = _TREE_SIZE
+ _to_key = _to_key
+ _to_value = _to_value
+try:
+ from _OOBTree import OOBTree
+except ImportError:
+ OOBTree = BTree = OOBTreePy
+else:
+ BTree = OOBTree
+
+
+class OOTreeSetPy(TreeSet):
+ MAX_SIZE = _TREE_SIZE
+ _to_key = _to_key
+try:
+ from _OOBTree import OOTreeSet
+except ImportError:
+ OOTreeSet = TreeSet = OOTreeSetPy
+else:
+ TreeSet = OOTreeSet
+
+
+# Can't declare forward refs, so fix up afterwards:
+
+OOBucketPy._mapping_type = OOBucketPy._bucket_type = OOBucketPy
+OOBucketPy._set_type = OOSetPy
+
+OOSetPy._mapping_type = OOSetPy
+OOSetPy._set_type = OOSetPy._bucket_type = OOSetPy
+
+OOBTreePy._mapping_type = OOBTreePy._bucket_type = OOBucketPy
+OOBTreePy._set_type = OOSetPy
+
+OOTreeSetPy._mapping_type = OOSetPy
+OOTreeSetPy._set_type = OOTreeSetPy._bucket_type = OOSetPy
+
+
+differencePy = _setop(_difference, OOSetPy)
+try:
+ from _OOBTree import difference
+except ImportError:
+ difference = differencePy
+
+unionPy = _setop(_union, OOSetPy)
+try:
+ from _OOBTree import union
+except ImportError:
+ union = unionPy
+
+intersectionPy = _setop(_intersection, OOSetPy)
+try:
+ from _OOBTree import intersection
+except ImportError:
+ intersection = intersectionPy
+
+
+moduleProvides(IObjectObjectBTreeModule)
Modified: BTrees/branches/pure_python/BTrees/___BTree.py
===================================================================
--- BTrees/branches/pure_python/BTrees/___BTree.py 2012-11-06 17:58:15 UTC (rev 128182)
+++ BTrees/branches/pure_python/BTrees/___BTree.py 2012-11-06 17:58:17 UTC (rev 128183)
@@ -342,6 +342,8 @@
def __setitem__(self, key, value):
# TODO: enforce test that key has non-default comparison?
+ #if getattr(key, '__cmp__', None) is object.__cmp__:
+ # raise TypeError("Can't use default __cmp__")
self._set(self._to_key(key), self._to_value(value))
def __delitem__(self, key):
Modified: BTrees/branches/pure_python/BTrees/check.py
===================================================================
--- BTrees/branches/pure_python/BTrees/check.py 2012-11-06 17:58:15 UTC (rev 128182)
+++ BTrees/branches/pure_python/BTrees/check.py 2012-11-06 17:58:17 UTC (rev 128183)
@@ -33,6 +33,7 @@
"""
from BTrees.OOBTree import OOBTree, OOBucket, OOSet, OOTreeSet
+from BTrees.OOBTree import OOBTreePy, OOBucketPy, OOSetPy, OOTreeSetPy
from BTrees.OIBTree import OIBTree, OIBucket, OISet, OITreeSet
from BTrees.IOBTree import IOBTree, IOBucket, IOSet, IOTreeSet
from BTrees.IIBTree import IIBTree, IIBucket, IISet, IITreeSet
@@ -59,6 +60,9 @@
('Set', (TYPE_BUCKET, False)),
):
_type2kind[globals()[kv+name]] = kind
+ py = kv + name + 'Py'
+ if py in globals():
+ _type2kind[globals()[py]] = kind
# Return pair
#
@@ -114,8 +118,15 @@
'LL', 'LO', 'OL', 'LF',
):
_btree2bucket[globals()[kv+'BTree']] = globals()[kv+'Bucket']
+ py = kv + 'BTreePy'
+ if py in globals():
+ _btree2bucket[globals()[py]] = globals()[kv+'BucketPy']
_btree2bucket[globals()[kv+'TreeSet']] = globals()[kv+'Set']
+ py = kv + 'TreeSetPy'
+ if py in globals():
+ _btree2bucket[globals()[kv+'TreeSetPy']] = globals()[kv+'SetPy']
+
def crack_btree(t, is_mapping):
state = t.__getstate__()
if state is None:
Modified: BTrees/branches/pure_python/BTrees/tests/test_OOBTree.py
===================================================================
--- BTrees/branches/pure_python/BTrees/tests/test_OOBTree.py 2012-11-06 17:58:15 UTC (rev 128182)
+++ BTrees/branches/pure_python/BTrees/tests/test_OOBTree.py 2012-11-06 17:58:17 UTC (rev 128183)
@@ -25,6 +25,12 @@
class OOBTreeInternalKeyTest(InternalKeysMappingTest, unittest.TestCase):
def _getTargetClass(self):
+ from BTrees.OOBTree import OOBTreePy
+ return OOBTreePy
+
+class OOBTreePyInternalKeyTest(InternalKeysMappingTest, unittest.TestCase):
+
+ def _getTargetClass(self):
from BTrees.OOBTree import OOBTree
return OOBTree
@@ -36,6 +42,13 @@
return OOTreeSet
+class OOTreeSetPyInternalKeyTest(InternalKeysSetTest, unittest.TestCase):
+
+ def _getTargetClass(self):
+ from BTrees.OOBTree import OOTreeSetPy
+ return OOTreeSetPy
+
+
class OOBucketTest(MappingBase, unittest.TestCase):
def _getTargetClass(self):
@@ -43,6 +56,13 @@
return OOBucket
+class OOBucketPyTest(MappingBase, unittest.TestCase):
+
+ def _getTargetClass(self):
+ from BTrees.OOBTree import OOBucketPy
+ return OOBucketPy
+
+
class OOTreeSetTest(NormalSetTests, unittest.TestCase):
def _getTargetClass(self):
@@ -50,6 +70,13 @@
return OOTreeSet
+class OOTreeSetPyTest(NormalSetTests, unittest.TestCase):
+
+ def _getTargetClass(self):
+ from BTrees.OOBTree import OOTreeSetPy
+ return OOTreeSetPy
+
+
class OOSetTest(ExtendedSetTests, unittest.TestCase):
def _getTargetClass(self):
@@ -57,19 +84,14 @@
return OOSet
-class OOModuleTest(ModuleTest, unittest.TestCase):
+class OOSetPyTest(ExtendedSetTests, unittest.TestCase):
- prefix = 'OO'
+ def _getTargetClass(self):
+ from BTrees.OOBTree import OOSetPy
+ return OOSetPy
- def _getModule(self):
- import BTrees
- return BTrees.OOBTree
- def _getInterface(self):
- import BTrees.Interfaces
- return BTrees.Interfaces.IObjectObjectBTreeModule
-
class OOBTreeTest(BTreeTests, unittest.TestCase):
def _makeOne(self):
@@ -110,13 +132,45 @@
t.clear()
+
+#class OOBTreePyTest(OOBTreeTest):
+#
+# Right now, we can't match the C extension's test / prohibition of the
+# default 'object' comparison semantics.
+class OOBTreePyTest(BTreeTests, unittest.TestCase):
+
+ def _makeOne(self):
+ from BTrees.OOBTree import OOBTreePy
+ return OOBTreePy()
+
+
+class OOModuleTest(ModuleTest, unittest.TestCase):
+
+ prefix = 'OO'
+
+ def _getModule(self):
+ import BTrees
+ return BTrees.OOBTree
+
+ def _getInterface(self):
+ import BTrees.Interfaces
+ return BTrees.Interfaces.IObjectObjectBTreeModule
+
+
def test_suite():
return unittest.TestSuite((
unittest.makeSuite(OOBTreeInternalKeyTest),
+ unittest.makeSuite(OOBTreePyInternalKeyTest),
unittest.makeSuite(OOTreeSetInternalKeyTest),
+ unittest.makeSuite(OOTreeSetPyInternalKeyTest),
unittest.makeSuite(OOBucketTest),
+ unittest.makeSuite(OOBucketPyTest),
unittest.makeSuite(OOTreeSetTest),
+ unittest.makeSuite(OOTreeSetPyTest),
unittest.makeSuite(OOSetTest),
+ unittest.makeSuite(OOSetPyTest),
unittest.makeSuite(OOModuleTest),
unittest.makeSuite(OOBTreeTest),
+ unittest.makeSuite(OOBTreePyTest),
+ unittest.makeSuite(OOModuleTest),
))
More information about the checkins
mailing list