[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