diff --git a/BTrees/Interfaces.py b/BTrees/Interfaces.py index 37b78d0..4650291 100644 --- a/BTrees/Interfaces.py +++ b/BTrees/Interfaces.py @@ -513,6 +513,12 @@ class IUnsignedUnsignedBTreeModule(_IMergeBTreeModule, IMergeIntegerKey): """ +class IUnsignedIntegerBTreeModule(_IMergeBTreeModule, IMergeIntegerKey): + """ + As for `IIntegerIntegerBTreeModule` with unsigned integers for keys only. + """ + + class IObjectObjectBTreeModule(IBTreeModule, IMerge): """keys, or set values, are objects; values are also objects. diff --git a/BTrees/UIBTree.py b/BTrees/UIBTree.py index c8f8cb6..a701ee8 100644 --- a/BTrees/UIBTree.py +++ b/BTrees/UIBTree.py @@ -20,7 +20,7 @@ from zope.interface import moduleProvides -from .Interfaces import IIntegerIntegerBTreeModule +from .Interfaces import IUnsignedIntegerBTreeModule from ._base import Bucket from ._base import MERGE from ._base import MERGE_WEIGHT_numeric @@ -110,4 +110,4 @@ class UITreeIteratorPy(_TreeIterator): _fix_pickle(globals(), __name__) -moduleProvides(IIntegerIntegerBTreeModule) +moduleProvides(IUnsignedIntegerBTreeModule) diff --git a/BTrees/tests/test_UIBTree.py b/BTrees/tests/test_UIBTree.py index fe776b8..bc452b2 100644 --- a/BTrees/tests/test_UIBTree.py +++ b/BTrees/tests/test_UIBTree.py @@ -13,99 +13,103 @@ ############################################################################## import unittest -from .common import BTreeTests -from .common import ExtendedSetTests +from .common import UnsignedKeysBTreeTests as BTreeTests +from .common import UnsignedExtendedSetTests as ExtendedSetTests from .common import I_SetsBase from .common import InternalKeysMappingTest from .common import InternalKeysSetTest -from .common import MappingBase -from .common import MappingConflictTestBase +from .common import UnsignedKeysMappingBase as MappingBase +from .common import UnsignedKeysMappingConflictTestBase as MappingConflictTestBase from .common import ModuleTest from .common import MultiUnion -from .common import NormalSetTests -from .common import SetConflictTestBase +from .common import UnsignedNormalSetTests as NormalSetTests +from .common import UnsignedSetConflictTestBase as SetConflictTestBase from .common import SetResult from .common import TestLongIntKeys from .common import TestLongIntValues from .common import Weighted from .common import itemsToSet from .common import makeBuilder -from BTrees.IIBTree import using64bits #XXX Ugly, but unavoidable +from .common import UnsignedKeysMixin +from .common import UnsignedError +from BTrees.UIBTree import using64bits #XXX Ugly, but unavoidable - -class IIBTreeInternalKeyTest(InternalKeysMappingTest, unittest.TestCase): + +# pylint:disable=no-name-in-module,arguments-differ + +class UIBTreeInternalKeyTest(InternalKeysMappingTest, unittest.TestCase): def _getTargetClass(self): - from BTrees.IIBTree import IIBTree - return IIBTree + from BTrees.UIBTree import UIBTree + return UIBTree + - -class IIBTreePyInternalKeyTest(InternalKeysMappingTest, unittest.TestCase): +class UIBTreePyInternalKeyTest(InternalKeysMappingTest, unittest.TestCase): def _getTargetClass(self): - from BTrees.IIBTree import IIBTreePy - return IIBTreePy + from BTrees.UIBTree import UIBTreePy + return UIBTreePy -class IITreeSetInternalKeyTest(InternalKeysSetTest, unittest.TestCase): +class UITreeSetInternalKeyTest(InternalKeysSetTest, unittest.TestCase): def _getTargetClass(self): - from BTrees.IIBTree import IITreeSet - return IITreeSet + from BTrees.UIBTree import UITreeSet + return UITreeSet -class IITreeSetPyInternalKeyTest(InternalKeysSetTest, unittest.TestCase): +class UITreeSetPyInternalKeyTest(InternalKeysSetTest, unittest.TestCase): def _getTargetClass(self): - from BTrees.IIBTree import IITreeSetPy - return IITreeSetPy + from BTrees.UIBTree import UITreeSetPy + return UITreeSetPy -class IIBucketTest(MappingBase, unittest.TestCase): +class UIBucketTest(MappingBase, unittest.TestCase): def _getTargetClass(self): - from BTrees.IIBTree import IIBucket - return IIBucket + from BTrees.UIBTree import UIBucket + return UIBucket -class IIBucketPyTest(MappingBase, unittest.TestCase): +class UIBucketPyTest(MappingBase, unittest.TestCase): def _getTargetClass(self): - from BTrees.IIBTree import IIBucketPy - return IIBucketPy + from BTrees.UIBTree import UIBucketPy + return UIBucketPy -class IITreeSetTest(NormalSetTests, unittest.TestCase): +class UITreeSetTest(NormalSetTests, unittest.TestCase): def _getTargetClass(self): - from BTrees.IIBTree import IITreeSet - return IITreeSet + from BTrees.UIBTree import UITreeSet + return UITreeSet -class IITreeSetPyTest(NormalSetTests, unittest.TestCase): +class UITreeSetPyTest(NormalSetTests, unittest.TestCase): def _getTargetClass(self): - from BTrees.IIBTree import IITreeSetPy - return IITreeSetPy + from BTrees.UIBTree import UITreeSetPy + return UITreeSetPy -class IISetTest(ExtendedSetTests, unittest.TestCase): +class UISetTest(ExtendedSetTests, unittest.TestCase): def _getTargetClass(self): - from BTrees.IIBTree import IISet - return IISet + from BTrees.UIBTree import UISet + return UISet -class IISetPyTest(ExtendedSetTests, unittest.TestCase): +class UISetPyTest(ExtendedSetTests, unittest.TestCase): def _getTargetClass(self): - from BTrees.IIBTree import IISetPy - return IISetPy + from BTrees.UIBTree import UISetPy + return UISetPy -class _IIBTreeTestBase(BTreeTests): +class _UIBTreeTestBase(BTreeTests): - def testIIBTreeOverflow(self): + def testUIBTreeOverflow(self): good = set() b = self._makeOne() @@ -113,14 +117,19 @@ def trial(i): i = int(i) try: b[i] = 0 - except OverflowError: - self.assertRaises(OverflowError, b.__setitem__, 0, i) - except TypeError: - self.assertRaises(TypeError, b.__setitem__, 0, i) + except (UnsignedError): + __traceback_info__ = i + if i > 2 ** 31: + with self.assertRaises(UnsignedError): + b[0] = i else: good.add(i) - b[0] = i - self.assertEqual(b[0], i) + if i < 2 ** 31: + b[0] = i + self.assertEqual(b[0], i) + else: + with self.assertRaises(UnsignedError): + b[0] = i for i in range((1<<31) - 3, (1<<31) + 3): trial(i) @@ -130,44 +139,44 @@ def trial(i): self.assertEqual(sorted(good), sorted(b)) -class IIBTreeTest(_IIBTreeTestBase, unittest.TestCase): +class UIBTreeTest(_UIBTreeTestBase, unittest.TestCase): def _makeOne(self): - from BTrees.IIBTree import IIBTree - return IIBTree() + from BTrees.UIBTree import UIBTree + return UIBTree() -class IIBTreeTestPy(_IIBTreeTestBase, unittest.TestCase): +class UIBTreeTestPy(_UIBTreeTestBase, unittest.TestCase): def _makeOne(self): - from BTrees.IIBTree import IIBTreePy - return IIBTreePy() + from BTrees.UIBTree import UIBTreePy + return UIBTreePy() if using64bits: - class IIBTreeTest(BTreeTests, TestLongIntKeys, TestLongIntValues, + class UIBTreeTest(BTreeTests, TestLongIntKeys, TestLongIntValues, unittest.TestCase): def _makeOne(self): - from BTrees.IIBTree import IIBTree - return IIBTree() + from BTrees.UIBTree import UIBTree + return UIBTree() def getTwoValues(self): return 1, 2 - class IIBTreeTest(BTreeTests, TestLongIntKeys, TestLongIntValues, + class UIBTreeTest(BTreeTests, TestLongIntKeys, TestLongIntValues, unittest.TestCase): def _makeOne(self): - from BTrees.IIBTree import IIBTreePy - return IIBTreePy() + from BTrees.UIBTree import UIBTreePy + return UIBTreePy() def getTwoValues(self): return 1, 2 -class _TestIIBTreesBase(object): +class _TestUIBTreesBase(object): def testNonIntegerKeyRaises(self): self.assertRaises(TypeError, self._stringraiseskey) @@ -198,310 +207,310 @@ def _noneraisesvalue(self): self._makeOne()[1] = None -class TestIIBTrees(_TestIIBTreesBase, unittest.TestCase): +class TestUIBTrees(_TestUIBTreesBase, unittest.TestCase): def _makeOne(self): - from BTrees.IIBTree import IIBTree - return IIBTree() + from BTrees.UIBTree import UIBTree + return UIBTree() -class TestIIBTreesPy(_TestIIBTreesBase, unittest.TestCase): +class TestUIBTreesPy(_TestUIBTreesBase, unittest.TestCase): def _makeOne(self): - from BTrees.IIBTree import IIBTreePy - return IIBTreePy() + from BTrees.UIBTree import UIBTreePy + return UIBTreePy() -class TestIISets(I_SetsBase, unittest.TestCase): +class TestUISets(I_SetsBase, unittest.TestCase): def _makeOne(self): - from BTrees.IIBTree import IISet - return IISet() + from BTrees.UIBTree import UISet + return UISet() -class TestIISetsPy(I_SetsBase, unittest.TestCase): +class TestUISetsPy(I_SetsBase, unittest.TestCase): def _makeOne(self): - from BTrees.IIBTree import IISetPy - return IISetPy() + from BTrees.UIBTree import UISetPy + return UISetPy() -class TestIITreeSets(I_SetsBase, unittest.TestCase): +class TestUITreeSets(I_SetsBase, unittest.TestCase): def _makeOne(self): - from BTrees.IIBTree import IITreeSet - return IITreeSet() + from BTrees.UIBTree import UITreeSet + return UITreeSet() -class TestIITreeSetsPy(I_SetsBase, unittest.TestCase): +class TestUITreeSetsPy(I_SetsBase, unittest.TestCase): def _makeOne(self): - from BTrees.IIBTree import IITreeSetPy - return IITreeSetPy() + from BTrees.UIBTree import UITreeSetPy + return UITreeSetPy() -class PureII(SetResult, unittest.TestCase): +class PureUI(SetResult, unittest.TestCase): def union(self, *args): - from BTrees.IIBTree import union + from BTrees.UIBTree import union return union(*args) def intersection(self, *args): - from BTrees.IIBTree import intersection + from BTrees.UIBTree import intersection return intersection(*args) def difference(self, *args): - from BTrees.IIBTree import difference + from BTrees.UIBTree import difference return difference(*args) def builders(self): - from BTrees.IIBTree import IIBTree - from BTrees.IIBTree import IIBucket - from BTrees.IIBTree import IITreeSet - from BTrees.IIBTree import IISet - return IISet, IITreeSet, makeBuilder(IIBTree), makeBuilder(IIBucket) + from BTrees.UIBTree import UIBTree + from BTrees.UIBTree import UIBucket + from BTrees.UIBTree import UITreeSet + from BTrees.UIBTree import UISet + return UISet, UITreeSet, makeBuilder(UIBTree), makeBuilder(UIBucket) -class PureIIPy(SetResult, unittest.TestCase): +class PureUIPy(SetResult, unittest.TestCase): def union(self, *args): - from BTrees.IIBTree import unionPy + from BTrees.UIBTree import unionPy return unionPy(*args) def intersection(self, *args): - from BTrees.IIBTree import intersectionPy + from BTrees.UIBTree import intersectionPy return intersectionPy(*args) def difference(self, *args): - from BTrees.IIBTree import differencePy + from BTrees.UIBTree import differencePy return differencePy(*args) def builders(self): - from BTrees.IIBTree import IIBTreePy - from BTrees.IIBTree import IIBucketPy - from BTrees.IIBTree import IITreeSetPy - from BTrees.IIBTree import IISetPy - return (IISetPy, IITreeSetPy, - makeBuilder(IIBTreePy), makeBuilder(IIBucketPy)) + from BTrees.UIBTree import UIBTreePy + from BTrees.UIBTree import UIBucketPy + from BTrees.UIBTree import UITreeSetPy + from BTrees.UIBTree import UISetPy + return (UISetPy, UITreeSetPy, + makeBuilder(UIBTreePy), makeBuilder(UIBucketPy)) -class TestIIMultiUnion(MultiUnion, unittest.TestCase): +class TestUIMultiUnion(UnsignedKeysMixin, MultiUnion, unittest.TestCase): def multiunion(self, *args): - from BTrees.IIBTree import multiunion + from BTrees.UIBTree import multiunion return multiunion(*args) def union(self, *args): - from BTrees.IIBTree import union + from BTrees.UIBTree import union return union(*args) def mkset(self, *args): - from BTrees.IIBTree import IISet as mkset + from BTrees.UIBTree import UISet as mkset return mkset(*args) def mktreeset(self, *args): - from BTrees.IIBTree import IITreeSet as mktreeset + from BTrees.UIBTree import UITreeSet as mktreeset return mktreeset(*args) def mkbucket(self, *args): - from BTrees.IIBTree import IIBucket as mkbucket + from BTrees.UIBTree import UIBucket as mkbucket return mkbucket(*args) def mkbtree(self, *args): - from BTrees.IIBTree import IIBTree as mkbtree + from BTrees.UIBTree import UIBTree as mkbtree return mkbtree(*args) -class TestIIMultiUnionPy(MultiUnion, unittest.TestCase): +class TestUIMultiUnionPy(UnsignedKeysMixin, MultiUnion, unittest.TestCase): def multiunion(self, *args): - from BTrees.IIBTree import multiunionPy + from BTrees.UIBTree import multiunionPy return multiunionPy(*args) def union(self, *args): - from BTrees.IIBTree import unionPy + from BTrees.UIBTree import unionPy return unionPy(*args) def mkset(self, *args): - from BTrees.IIBTree import IISetPy as mkset + from BTrees.UIBTree import UISetPy as mkset return mkset(*args) def mktreeset(self, *args): - from BTrees.IIBTree import IITreeSetPy as mktreeset + from BTrees.UIBTree import UITreeSetPy as mktreeset return mktreeset(*args) def mkbucket(self, *args): - from BTrees.IIBTree import IIBucketPy as mkbucket + from BTrees.UIBTree import UIBucketPy as mkbucket return mkbucket(*args) def mkbtree(self, *args): - from BTrees.IIBTree import IIBTreePy as mkbtree + from BTrees.UIBTree import UIBTreePy as mkbtree return mkbtree(*args) -class TestWeightedII(Weighted, unittest.TestCase): +class TestWeightedUI(UnsignedKeysMixin, Weighted, unittest.TestCase): def weightedUnion(self): - from BTrees.IIBTree import weightedUnion + from BTrees.UIBTree import weightedUnion return weightedUnion def weightedIntersection(self): - from BTrees.IIBTree import weightedIntersection + from BTrees.UIBTree import weightedIntersection return weightedIntersection def union(self): - from BTrees.IIBTree import union + from BTrees.UIBTree import union return union def intersection(self): - from BTrees.IIBTree import intersection + from BTrees.UIBTree import intersection return intersection def mkbucket(self, *args): - from BTrees.IIBTree import IIBucket as mkbucket + from BTrees.UIBTree import UIBucket as mkbucket return mkbucket(*args) def builders(self): - from BTrees.IIBTree import IIBTree - from BTrees.IIBTree import IIBucket - from BTrees.IIBTree import IITreeSet - from BTrees.IIBTree import IISet - return IIBucket, IIBTree, itemsToSet(IISet), itemsToSet(IITreeSet) + from BTrees.UIBTree import UIBTree + from BTrees.UIBTree import UIBucket + from BTrees.UIBTree import UITreeSet + from BTrees.UIBTree import UISet + return UIBucket, UIBTree, itemsToSet(UISet), itemsToSet(UITreeSet) -class TestWeightedIIPy(Weighted, unittest.TestCase): +class TestWeightedUIPy(Weighted, unittest.TestCase): def weightedUnion(self): - from BTrees.IIBTree import weightedUnionPy + from BTrees.UIBTree import weightedUnionPy return weightedUnionPy def weightedIntersection(self): - from BTrees.IIBTree import weightedIntersectionPy + from BTrees.UIBTree import weightedIntersectionPy return weightedIntersectionPy def union(self): - from BTrees.IIBTree import unionPy + from BTrees.UIBTree import unionPy return unionPy def intersection(self): - from BTrees.IIBTree import intersectionPy + from BTrees.UIBTree import intersectionPy return intersectionPy def mkbucket(self, *args): - from BTrees.IIBTree import IIBucketPy as mkbucket + from BTrees.UIBTree import UIBucketPy as mkbucket return mkbucket(*args) def builders(self): - from BTrees.IIBTree import IIBTreePy - from BTrees.IIBTree import IIBucketPy - from BTrees.IIBTree import IITreeSetPy - from BTrees.IIBTree import IISetPy - return (IIBucketPy, IIBTreePy, - itemsToSet(IISetPy), itemsToSet(IITreeSetPy)) + from BTrees.UIBTree import UIBTreePy + from BTrees.UIBTree import UIBucketPy + from BTrees.UIBTree import UITreeSetPy + from BTrees.UIBTree import UISetPy + return (UIBucketPy, UIBTreePy, + itemsToSet(UISetPy), itemsToSet(UITreeSetPy)) -class IIBTreeConflictTests(MappingConflictTestBase, unittest.TestCase): +class UIBTreeConflictTests(MappingConflictTestBase, unittest.TestCase): def _getTargetClass(self): - from BTrees.IIBTree import IIBTree - return IIBTree + from BTrees.UIBTree import UIBTree + return UIBTree -class IIBTreeConflictTestsPy(MappingConflictTestBase, unittest.TestCase): +class UIBTreeConflictTestsPy(MappingConflictTestBase, unittest.TestCase): def _getTargetClass(self): - from BTrees.IIBTree import IIBTreePy - return IIBTreePy + from BTrees.UIBTree import UIBTreePy + return UIBTreePy -class IIBucketConflictTests(MappingConflictTestBase, unittest.TestCase): +class UIBucketConflictTests(MappingConflictTestBase, unittest.TestCase): def _getTargetClass(self): - from BTrees.IIBTree import IIBucket - return IIBucket + from BTrees.UIBTree import UIBucket + return UIBucket -class IIBucketConflictTestsPy(MappingConflictTestBase, unittest.TestCase): +class UIBucketConflictTestsPy(MappingConflictTestBase, unittest.TestCase): def _getTargetClass(self): - from BTrees.IIBTree import IIBucketPy - return IIBucketPy + from BTrees.UIBTree import UIBucketPy + return UIBucketPy -class IITreeSetConflictTests(SetConflictTestBase, unittest.TestCase): +class UITreeSetConflictTests(SetConflictTestBase, unittest.TestCase): def _getTargetClass(self): - from BTrees.IIBTree import IITreeSet - return IITreeSet + from BTrees.UIBTree import UITreeSet + return UITreeSet -class IITreeSetConflictTestsPy(SetConflictTestBase, unittest.TestCase): +class UITreeSetConflictTestsPy(SetConflictTestBase, unittest.TestCase): def _getTargetClass(self): - from BTrees.IIBTree import IITreeSetPy - return IITreeSetPy + from BTrees.UIBTree import UITreeSetPy + return UITreeSetPy -class IISetConflictTests(SetConflictTestBase, unittest.TestCase): +class UISetConflictTests(SetConflictTestBase, unittest.TestCase): def _getTargetClass(self): - from BTrees.IIBTree import IISet - return IISet + from BTrees.UIBTree import UISet + return UISet -class IISetConflictTestsPy(SetConflictTestBase, unittest.TestCase): +class UISetConflictTestsPy(SetConflictTestBase, unittest.TestCase): def _getTargetClass(self): - from BTrees.IIBTree import IISetPy - return IISetPy + from BTrees.UIBTree import UISetPy + return UISetPy -class IIModuleTest(ModuleTest, unittest.TestCase): +class UIModuleTest(ModuleTest, unittest.TestCase): - prefix = 'II' + prefix = 'UI' def _getModule(self): import BTrees - return BTrees.IIBTree + return BTrees.UIBTree def _getInterface(self): import BTrees.Interfaces - return BTrees.Interfaces.IIntegerIntegerBTreeModule + return BTrees.Interfaces.IUnsignedIntegerBTreeModule def test_suite(): return unittest.TestSuite(( - unittest.makeSuite(IIBTreeInternalKeyTest), - unittest.makeSuite(IIBTreePyInternalKeyTest), - unittest.makeSuite(IITreeSetInternalKeyTest), - unittest.makeSuite(IITreeSetPyInternalKeyTest), - unittest.makeSuite(IIBucketTest), - unittest.makeSuite(IIBucketPyTest), - unittest.makeSuite(IITreeSetTest), - unittest.makeSuite(IITreeSetPyTest), - unittest.makeSuite(IISetTest), - unittest.makeSuite(IISetPyTest), - unittest.makeSuite(IIBTreeTest), - unittest.makeSuite(IIBTreeTestPy), - unittest.makeSuite(TestIIBTrees), - unittest.makeSuite(TestIIBTreesPy), - unittest.makeSuite(TestIISets), - unittest.makeSuite(TestIISetsPy), - unittest.makeSuite(TestIITreeSets), - unittest.makeSuite(TestIITreeSetsPy), - unittest.makeSuite(TestIIMultiUnion), - unittest.makeSuite(TestIIMultiUnionPy), - unittest.makeSuite(PureII), - unittest.makeSuite(PureIIPy), - unittest.makeSuite(TestWeightedII), - unittest.makeSuite(TestWeightedIIPy), - unittest.makeSuite(IIBTreeConflictTests), - unittest.makeSuite(IIBTreeConflictTestsPy), - unittest.makeSuite(IIBucketConflictTests), - unittest.makeSuite(IIBucketConflictTestsPy), - unittest.makeSuite(IITreeSetConflictTests), - unittest.makeSuite(IITreeSetConflictTestsPy), - unittest.makeSuite(IISetConflictTests), - unittest.makeSuite(IISetConflictTestsPy), - unittest.makeSuite(IIModuleTest), + unittest.makeSuite(UIBTreeInternalKeyTest), + unittest.makeSuite(UIBTreePyInternalKeyTest), + unittest.makeSuite(UITreeSetInternalKeyTest), + unittest.makeSuite(UITreeSetPyInternalKeyTest), + unittest.makeSuite(UIBucketTest), + unittest.makeSuite(UIBucketPyTest), + unittest.makeSuite(UITreeSetTest), + unittest.makeSuite(UITreeSetPyTest), + unittest.makeSuite(UISetTest), + unittest.makeSuite(UISetPyTest), + unittest.makeSuite(UIBTreeTest), + unittest.makeSuite(UIBTreeTestPy), + unittest.makeSuite(TestUIBTrees), + unittest.makeSuite(TestUIBTreesPy), + unittest.makeSuite(TestUISets), + unittest.makeSuite(TestUISetsPy), + unittest.makeSuite(TestUITreeSets), + unittest.makeSuite(TestUITreeSetsPy), + unittest.makeSuite(TestUIMultiUnion), + unittest.makeSuite(TestUIMultiUnionPy), + unittest.makeSuite(PureUI), + unittest.makeSuite(PureUIPy), + unittest.makeSuite(TestWeightedUI), + unittest.makeSuite(TestWeightedUIPy), + unittest.makeSuite(UIBTreeConflictTests), + unittest.makeSuite(UIBTreeConflictTestsPy), + unittest.makeSuite(UIBucketConflictTests), + unittest.makeSuite(UIBucketConflictTestsPy), + unittest.makeSuite(UITreeSetConflictTests), + unittest.makeSuite(UITreeSetConflictTestsPy), + unittest.makeSuite(UISetConflictTests), + unittest.makeSuite(UISetConflictTestsPy), + unittest.makeSuite(UIModuleTest), ))