Commit fdbe18c3 authored by Tres Seaver's avatar Tres Seaver

Test the pure-Python OOBTree implementation in parallel.

parent d8f09582
......@@ -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 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:
from _OOBTree import *
from _OOBTree import OOTreeSet
except ImportError:
import ___BTree
___BTree._import(globals(), 'OO', 30, 250)
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
zope.interface.moduleProvides(BTrees.Interfaces.IObjectObjectBTreeModule)
moduleProvides(IObjectObjectBTreeModule)
......@@ -342,6 +342,8 @@ class _MappingBase(_Base):
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):
......
......@@ -33,6 +33,7 @@ that doesn't exist in the actual BTree).
"""
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 @@ for kv in ('OO',
('Set', (TYPE_BUCKET, False)),
):
_type2kind[globals()[kv+name]] = kind
py = kv + name + 'Py'
if py in globals():
_type2kind[globals()[py]] = kind
# Return pair
#
......@@ -114,7 +118,14 @@ for kv in ('OO',
'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__()
......
......@@ -24,6 +24,12 @@ from BTrees.tests.common import NormalSetTests
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 @@ class OOTreeSetInternalKeyTest(InternalKeysSetTest, unittest.TestCase):
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 @@ class OOBucketTest(MappingBase, unittest.TestCase):
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 @@ class OOTreeSetTest(NormalSetTests, unittest.TestCase):
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,17 +84,12 @@ class OOSetTest(ExtendedSetTests, unittest.TestCase):
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):
......@@ -110,13 +132,45 @@ class OOBTreeTest(BTreeTests, unittest.TestCase):
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),
))
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