Commit fdbe18c3 authored by Tres Seaver's avatar Tres Seaver

Test the pure-Python OOBTree implementation in parallel.

parent d8f09582
...@@ -12,13 +12,102 @@ ...@@ -12,13 +12,102 @@
# #
############################################################################## ##############################################################################
import zope.interface from zope.interface import moduleProvides
import BTrees.Interfaces
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 OOBucket
except ImportError:
OOBucket = Bucket = OOBucketPy
else:
Bucket = OOBucket
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: try:
from _OOBTree import * from _OOBTree import OOTreeSet
except ImportError: except ImportError:
import ___BTree OOTreeSet = TreeSet = OOTreeSetPy
___BTree._import(globals(), 'OO', 30, 250) 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
zope.interface.moduleProvides(BTrees.Interfaces.IObjectObjectBTreeModule) moduleProvides(IObjectObjectBTreeModule)
...@@ -342,6 +342,8 @@ class _MappingBase(_Base): ...@@ -342,6 +342,8 @@ class _MappingBase(_Base):
def __setitem__(self, key, value): def __setitem__(self, key, value):
# TODO: enforce test that key has non-default comparison? # 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)) self._set(self._to_key(key), self._to_value(value))
def __delitem__(self, key): def __delitem__(self, key):
......
...@@ -33,6 +33,7 @@ that doesn't exist in the actual BTree). ...@@ -33,6 +33,7 @@ that doesn't exist in the actual BTree).
""" """
from BTrees.OOBTree import OOBTree, OOBucket, OOSet, OOTreeSet 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.OIBTree import OIBTree, OIBucket, OISet, OITreeSet
from BTrees.IOBTree import IOBTree, IOBucket, IOSet, IOTreeSet from BTrees.IOBTree import IOBTree, IOBucket, IOSet, IOTreeSet
from BTrees.IIBTree import IIBTree, IIBucket, IISet, IITreeSet from BTrees.IIBTree import IIBTree, IIBucket, IISet, IITreeSet
...@@ -59,6 +60,9 @@ for kv in ('OO', ...@@ -59,6 +60,9 @@ for kv in ('OO',
('Set', (TYPE_BUCKET, False)), ('Set', (TYPE_BUCKET, False)),
): ):
_type2kind[globals()[kv+name]] = kind _type2kind[globals()[kv+name]] = kind
py = kv + name + 'Py'
if py in globals():
_type2kind[globals()[py]] = kind
# Return pair # Return pair
# #
...@@ -114,7 +118,14 @@ for kv in ('OO', ...@@ -114,7 +118,14 @@ for kv in ('OO',
'LL', 'LO', 'OL', 'LF', 'LL', 'LO', 'OL', 'LF',
): ):
_btree2bucket[globals()[kv+'BTree']] = globals()[kv+'Bucket'] _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'] _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): def crack_btree(t, is_mapping):
state = t.__getstate__() state = t.__getstate__()
......
...@@ -24,6 +24,12 @@ from BTrees.tests.common import NormalSetTests ...@@ -24,6 +24,12 @@ from BTrees.tests.common import NormalSetTests
class OOBTreeInternalKeyTest(InternalKeysMappingTest, unittest.TestCase): class OOBTreeInternalKeyTest(InternalKeysMappingTest, unittest.TestCase):
def _getTargetClass(self):
from BTrees.OOBTree import OOBTreePy
return OOBTreePy
class OOBTreePyInternalKeyTest(InternalKeysMappingTest, unittest.TestCase):
def _getTargetClass(self): def _getTargetClass(self):
from BTrees.OOBTree import OOBTree from BTrees.OOBTree import OOBTree
return OOBTree return OOBTree
...@@ -36,6 +42,13 @@ class OOTreeSetInternalKeyTest(InternalKeysSetTest, unittest.TestCase): ...@@ -36,6 +42,13 @@ class OOTreeSetInternalKeyTest(InternalKeysSetTest, unittest.TestCase):
return OOTreeSet return OOTreeSet
class OOTreeSetPyInternalKeyTest(InternalKeysSetTest, unittest.TestCase):
def _getTargetClass(self):
from BTrees.OOBTree import OOTreeSetPy
return OOTreeSetPy
class OOBucketTest(MappingBase, unittest.TestCase): class OOBucketTest(MappingBase, unittest.TestCase):
def _getTargetClass(self): def _getTargetClass(self):
...@@ -43,6 +56,13 @@ class OOBucketTest(MappingBase, unittest.TestCase): ...@@ -43,6 +56,13 @@ class OOBucketTest(MappingBase, unittest.TestCase):
return OOBucket return OOBucket
class OOBucketPyTest(MappingBase, unittest.TestCase):
def _getTargetClass(self):
from BTrees.OOBTree import OOBucketPy
return OOBucketPy
class OOTreeSetTest(NormalSetTests, unittest.TestCase): class OOTreeSetTest(NormalSetTests, unittest.TestCase):
def _getTargetClass(self): def _getTargetClass(self):
...@@ -50,6 +70,13 @@ class OOTreeSetTest(NormalSetTests, unittest.TestCase): ...@@ -50,6 +70,13 @@ class OOTreeSetTest(NormalSetTests, unittest.TestCase):
return OOTreeSet return OOTreeSet
class OOTreeSetPyTest(NormalSetTests, unittest.TestCase):
def _getTargetClass(self):
from BTrees.OOBTree import OOTreeSetPy
return OOTreeSetPy
class OOSetTest(ExtendedSetTests, unittest.TestCase): class OOSetTest(ExtendedSetTests, unittest.TestCase):
def _getTargetClass(self): def _getTargetClass(self):
...@@ -57,17 +84,12 @@ class OOSetTest(ExtendedSetTests, unittest.TestCase): ...@@ -57,17 +84,12 @@ class OOSetTest(ExtendedSetTests, unittest.TestCase):
return OOSet 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): class OOBTreeTest(BTreeTests, unittest.TestCase):
...@@ -110,13 +132,45 @@ class OOBTreeTest(BTreeTests, unittest.TestCase): ...@@ -110,13 +132,45 @@ class OOBTreeTest(BTreeTests, unittest.TestCase):
t.clear() 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(): def test_suite():
return unittest.TestSuite(( return unittest.TestSuite((
unittest.makeSuite(OOBTreeInternalKeyTest), unittest.makeSuite(OOBTreeInternalKeyTest),
unittest.makeSuite(OOBTreePyInternalKeyTest),
unittest.makeSuite(OOTreeSetInternalKeyTest), unittest.makeSuite(OOTreeSetInternalKeyTest),
unittest.makeSuite(OOTreeSetPyInternalKeyTest),
unittest.makeSuite(OOBucketTest), unittest.makeSuite(OOBucketTest),
unittest.makeSuite(OOBucketPyTest),
unittest.makeSuite(OOTreeSetTest), unittest.makeSuite(OOTreeSetTest),
unittest.makeSuite(OOTreeSetPyTest),
unittest.makeSuite(OOSetTest), unittest.makeSuite(OOSetTest),
unittest.makeSuite(OOSetPyTest),
unittest.makeSuite(OOModuleTest), unittest.makeSuite(OOModuleTest),
unittest.makeSuite(OOBTreeTest), unittest.makeSuite(OOBTreeTest),
unittest.makeSuite(OOBTreePyTest),
unittest.makeSuite(OOModuleTest),
)) ))
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment