示例#1
0
    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
            expected.append((key, sum))
        # print 'union', expected
        got = self._callFUT(L)
        self.assertEqual(expected, list(got.items()))
示例#2
0
 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)
示例#3
0
 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)
示例#4
0
 def _all(self):
     # XXX may not work well/be efficient with extentcatalog
     # XXX not very efficient in general, better to use internal
     # IntIds datastructure but that would break abstraction..
     intids = getUtility(IIntIds)
     result = IFBTree()
     for uid in intids:
         result.insert(uid, 0)
     return result
示例#5
0
    def search(self, object=None, **kw):  # , contexts=()

        ids = getUtility(IIntIds)

        query = dict(kw)

        # records for object
        if object is not None:
            if type(object) is not type({}):
                oid = ids.queryId(removeAllProxies(object))
                if oid is None:
                    return ResultSet(IFBTree(), getUtility(IAcknowledgements))

                query['object'] = {'any_of': (oid, )}
            else:
                query['object'] = object

        # context
        # if not contexts:
        #     contexts = (getSite(),)

        # c = []
        # for context in contexts:
        #     id = ids.queryId(removeAllProxies(context))
        #     if id is not None:
        #         c.append(id)

        # query['contexts'] = {'any_of': c}

        return ResultSet(self.apply(query), getUtility(IAcknowledgements))
示例#6
0
    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 = sorted(allkeys.keys())

        expected = []
        for key in allkeys:
            sum = 0
            for t, w in L:
                if key in t:
                    sum += t[key] * w
            expected.append((key, sum))
        # print 'union', expected
        got = self._callFUT(L)
        self.assertEqual(expected, list(got.items()))
示例#7
0
    def testMany(self):
        import random
        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()

        # Test the union.
        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)
        self.assertEqual(expected, list(got.items()))

        # Test the intersection.
        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)
        self.assertEqual(expected, list(got.items()))
示例#8
0
 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 key in x and key in y:
                         result = x[key] * w1 + y[key] * 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()))
示例#9
0
 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()))
示例#10
0
 def _makeOne(self):
     from BTrees.IFBTree import IFBTree
     return IFBTree()
示例#11
0
 def setUp(self):
     self.t = IFBTree()
示例#12
0
 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()))