[Checkins] SVN: zope.index/trunk/src/zope/index/text/tests/test_setops.py Disentangle tests for zope.index.text.setops.

Tres Seaver tseaver at palladion.com
Thu Jun 11 01:29:49 EDT 2009


Log message for revision 100837:
  Disentangle tests for zope.index.text.setops.

Changed:
  U   zope.index/trunk/src/zope/index/text/tests/test_setops.py

-=-
Modified: zope.index/trunk/src/zope/index/text/tests/test_setops.py
===================================================================
--- zope.index/trunk/src/zope/index/text/tests/test_setops.py	2009-06-11 05:06:26 UTC (rev 100836)
+++ zope.index/trunk/src/zope/index/text/tests/test_setops.py	2009-06-11 05:29:48 UTC (rev 100837)
@@ -15,62 +15,75 @@
 
 $Id$
 """
-from unittest import TestCase, main, makeSuite
+import unittest
 
-import BTrees
+_marker = object()
 
-from BTrees.IFBTree import IFBTree, IFBucket
-from BTrees.LFBTree import LFBucket
+class Test_mass_weightedIntersection(unittest.TestCase):
 
-from zope.index.text.setops import mass_weightedIntersection
-from zope.index.text.setops import mass_weightedUnion
+    def _callFUT(self, L, family=_marker):
+        from zope.index.text.setops import mass_weightedIntersection
+        if family is _marker:
+            return mass_weightedIntersection(L)
+        return mass_weightedIntersection(L, family)
 
-class TestSetOps(TestCase):
-
-    def testEmptyLists(self):
-        self.assertEqual(len(mass_weightedIntersection([])), 0)
-        self.assertEqual(len(mass_weightedUnion([])), 0)
-
-    def testEmptyListsHonorFamily(self):
-        # family32
-        t = mass_weightedIntersection([], BTrees.family32)
+    def test_empty_list_no_family(self):
+        from BTrees.IFBTree import IFBucket
+        t = self._callFUT([])
         self.assertEqual(len(t), 0)
         self.assertEqual(t.__class__, IFBucket)
-        t = mass_weightedUnion([], BTrees.family32)
+
+    def test_empty_list_family32(self):
+        import BTrees
+        from BTrees.IFBTree import IFBucket
+        t = self._callFUT([], BTrees.family32)
         self.assertEqual(len(t), 0)
         self.assertEqual(t.__class__, IFBucket)
 
-        # family64
-        t = mass_weightedIntersection([], BTrees.family64)
+    def test_empty_list_family64(self):
+        import BTrees
+        from BTrees.LFBTree import LFBucket
+        t = self._callFUT([], BTrees.family64)
         self.assertEqual(len(t), 0)
         self.assertEqual(t.__class__, LFBucket)
-        t = mass_weightedUnion([], BTrees.family64)
-        self.assertEqual(len(t), 0)
-        self.assertEqual(t.__class__, LFBucket)
 
-    def testIdentity(self):
-        t = IFBTree([(1, 2)])
-        b = IFBucket([(1, 2)])
-        for x in t, b:
-            for func in mass_weightedUnion, mass_weightedIntersection:
-                result = func([(x, 1)])
-                self.assertEqual(len(result), 1)
-                self.assertEqual(list(result.items()), list(x.items()))
+    def test_identity_tree(self):
+        from BTrees.IFBTree import IFBTree
+        x = IFBTree([(1, 2)])
+        result = self._callFUT([(x, 1)])
+        self.assertEqual(len(result), 1)
+        self.assertEqual(list(result.items()), list(x.items()))
 
-    def testScalarMultiply(self):
-        t = IFBTree([(1, 2), (2, 3), (3, 4)])
-        allkeys = [1, 2, 3]
-        b = IFBucket(t)
-        for x in t, b:
-            self.assertEqual(list(x.keys()), allkeys)
-            for func in mass_weightedUnion, mass_weightedIntersection:
-                for factor in 0, 1, 5, 10:
-                    result = func([(x, factor)])
-                    self.assertEqual(allkeys, list(result.keys()))
-                    for key in x.keys():
-                        self.assertEqual(x[key] * factor, result[key])
+    def test_identity_bucket(self):
+        from BTrees.IFBTree import IFBucket
+        x = IFBucket([(1, 2)])
+        result = self._callFUT([(x, 1)])
+        self.assertEqual(len(result), 1)
+        self.assertEqual(list(result.items()), list(x.items()))
 
-    def testPairs(self):
+    def test_scalar_multiply_tree(self):
+        from BTrees.IFBTree import IFBTree
+        x = IFBTree([(1, 2), (2, 3), (3, 4)])
+        allkeys = list(x.keys())
+        for factor in 0, 1, 5, 10:
+            result = self._callFUT([(x, factor)])
+            self.assertEqual(allkeys, list(result.keys()))
+            for key in x.keys():
+                self.assertEqual(result[key], x[key]*factor)
+
+    def test_scalar_multiply_bucket(self):
+        from BTrees.IFBTree import IFBucket
+        x = IFBucket([(1, 2), (2, 3), (3, 4)])
+        allkeys = list(x.keys())
+        for factor in 0, 1, 5, 10:
+            result = self._callFUT([(x, factor)])
+            self.assertEqual(allkeys, list(result.keys()))
+            for key in x.keys():
+                self.assertEqual(result[key], x[key]*factor)
+
+    def test_pairs(self):
+        from BTrees.IFBTree import IFBTree
+        from BTrees.IFBTree import IFBucket
         t1 = IFBTree([(1, 10), (3, 30), (7, 70)])
         t2 = IFBTree([(3, 30), (5, 50), (7, 7), (9, 90)])
         allkeys = [1, 3, 5, 7, 9]
@@ -81,32 +94,20 @@
                 self.assertEqual(key in allkeys, 1)
             for y in t1, t2, b1, b2:
                 for w1, w2 in (0, 0), (1, 10), (10, 1), (2, 3):
-                    # Test the union.
                     expected = []
                     for key in allkeys:
-                        if x.has_key(key) or y.has_key(key):
-                            result = x.get(key, 0) * w1 + y.get(key, 0) * w2
-                            expected.append((key, result))
-                    expected.sort()
-                    got = mass_weightedUnion([(x, w1), (y, w2)])
-                    self.assertEqual(expected, list(got.items()))
-                    got = mass_weightedUnion([(y, w2), (x, w1)])
-                    self.assertEqual(expected, list(got.items()))
-
-                    # Test the intersection.
-                    expected = []
-                    for key in allkeys:
                         if x.has_key(key) and y.has_key(key):
                             result = x[key] * w1 + y[key] * w2
                             expected.append((key, result))
                     expected.sort()
-                    got = mass_weightedIntersection([(x, w1), (y, w2)])
+                    got = self._callFUT([(x, w1), (y, w2)])
                     self.assertEqual(expected, list(got.items()))
-                    got = mass_weightedIntersection([(y, w2), (x, w1)])
+                    got = self._callFUT([(y, w2), (x, w1)])
                     self.assertEqual(expected, list(got.items()))
 
     def testMany(self):
         import random
+        from BTrees.IFBTree import IFBTree
         N = 15  # number of IFBTrees to feed in
         L = []
         commonkey = N * 1000
@@ -123,36 +124,140 @@
         allkeys = allkeys.keys()
         allkeys.sort()
 
-        # Test the union.
+        # Test the intersection.
         expected = []
         for key in allkeys:
             sum = 0
             for t, w in L:
                 if t.has_key(key):
                     sum += t[key] * w
-            expected.append((key, sum))
-        # print 'union', expected
-        got = mass_weightedUnion(L)
+                else:
+                    break
+            else:
+                # We didn't break out of the loop so it's in the intersection.
+                expected.append((key, sum))
+        # print 'intersection', expected
+        got = self._callFUT(L)
         self.assertEqual(expected, list(got.items()))
 
-        # Test the intersection.
+class Test_mass_weightedUnion(unittest.TestCase):
+
+    def _callFUT(self, L, family=_marker):
+        from zope.index.text.setops import mass_weightedUnion
+        if family is _marker:
+            return mass_weightedUnion(L)
+        return mass_weightedUnion(L, family)
+
+    def test_empty_list_no_family(self):
+        from BTrees.IFBTree import IFBucket
+        t = self._callFUT([])
+        self.assertEqual(len(t), 0)
+        self.assertEqual(t.__class__, IFBucket)
+
+    def test_empty_list_family32(self):
+        import BTrees
+        from BTrees.IFBTree import IFBucket
+        t = self._callFUT([], BTrees.family32)
+        self.assertEqual(len(t), 0)
+        self.assertEqual(t.__class__, IFBucket)
+
+    def test_empty_list_family64(self):
+        import BTrees
+        from BTrees.LFBTree import LFBucket
+        t = self._callFUT([], BTrees.family64)
+        self.assertEqual(len(t), 0)
+        self.assertEqual(t.__class__, LFBucket)
+
+    def test_identity_tree(self):
+        from BTrees.IFBTree import IFBTree
+        x = IFBTree([(1, 2)])
+        result = self._callFUT([(x, 1)])
+        self.assertEqual(len(result), 1)
+        self.assertEqual(list(result.items()), list(x.items()))
+
+    def test_identity_bucket(self):
+        from BTrees.IFBTree import IFBucket
+        x = IFBucket([(1, 2)])
+        result = self._callFUT([(x, 1)])
+        self.assertEqual(len(result), 1)
+        self.assertEqual(list(result.items()), list(x.items()))
+
+    def test_scalar_multiply_tree(self):
+        from BTrees.IFBTree import IFBTree
+        x = IFBTree([(1, 2), (2, 3), (3, 4)])
+        allkeys = list(x.keys())
+        for factor in 0, 1, 5, 10:
+            result = self._callFUT([(x, factor)])
+            self.assertEqual(allkeys, list(result.keys()))
+            for key in x.keys():
+                self.assertEqual(result[key], x[key]*factor)
+
+    def test_scalar_multiply_bucket(self):
+        from BTrees.IFBTree import IFBucket
+        x = IFBucket([(1, 2), (2, 3), (3, 4)])
+        allkeys = list(x.keys())
+        for factor in 0, 1, 5, 10:
+            result = self._callFUT([(x, factor)])
+            self.assertEqual(allkeys, list(result.keys()))
+            for key in x.keys():
+                self.assertEqual(result[key], x[key]*factor)
+
+    def test_pairs(self):
+        from BTrees.IFBTree import IFBTree
+        from BTrees.IFBTree import IFBucket
+        t1 = IFBTree([(1, 10), (3, 30), (7, 70)])
+        t2 = IFBTree([(3, 30), (5, 50), (7, 7), (9, 90)])
+        allkeys = [1, 3, 5, 7, 9]
+        b1 = IFBucket(t1)
+        b2 = IFBucket(t2)
+        for x in t1, t2, b1, b2:
+            for key in x.keys():
+                self.assertEqual(key in allkeys, 1)
+            for y in t1, t2, b1, b2:
+                for w1, w2 in (0, 0), (1, 10), (10, 1), (2, 3):
+                    expected = []
+                    for key in allkeys:
+                        if x.has_key(key) or y.has_key(key):
+                            result = x.get(key, 0) * w1 + y.get(key, 0) * w2
+                            expected.append((key, result))
+                    expected.sort()
+                    got = self._callFUT([(x, w1), (y, w2)])
+                    self.assertEqual(expected, list(got.items()))
+                    got = self._callFUT([(y, w2), (x, w1)])
+                    self.assertEqual(expected, list(got.items()))
+
+    def test_many(self):
+        import random
+        from BTrees.IFBTree import IFBTree
+        N = 15  # number of IFBTrees to feed in
+        L = []
+        commonkey = N * 1000
+        allkeys = {commonkey: 1}
+        for i in range(N):
+            t = IFBTree()
+            t[commonkey] = i
+            for j in range(N-i):
+                key = i + j
+                allkeys[key] = 1
+                t[key] = N*i + j
+            L.append((t, i+1))
+        random.shuffle(L)
+        allkeys = allkeys.keys()
+        allkeys.sort()
+
         expected = []
         for key in allkeys:
             sum = 0
             for t, w in L:
                 if t.has_key(key):
                     sum += t[key] * w
-                else:
-                    break
-            else:
-                # We didn't break out of the loop so it's in the intersection.
-                expected.append((key, sum))
-        # print 'intersection', expected
-        got = mass_weightedIntersection(L)
+            expected.append((key, sum))
+        # print 'union', expected
+        got = self._callFUT(L)
         self.assertEqual(expected, list(got.items()))
 
 def test_suite():
-    return makeSuite(TestSetOps)
-
-if __name__=="__main__":
-    main(defaultTest='test_suite')
+    return unittest.TestSuite((
+        unittest.makeSuite(Test_mass_weightedIntersection),
+        unittest.makeSuite(Test_mass_weightedUnion),
+    ))



More information about the Checkins mailing list