示例#1
0
    def testDifference(self):
        ks = KeyedSet(firstLetter, ["apple", "avocado", "banana"])
        ks2 = KeyedSet(firstLetter, ["apple", "acacia"])
        more = ["banana", "cheese"]
        result = ks.difference(ks2, more)
        self.assertEqual(result, set(["avocado"]))

        # No side-effects
        self.assertEqual(ks, set(["apple", "avocado", "banana"]))
        self.assertEqual(ks2, set(["apple", "acacia"]))
        self.assertEqual(more, ["banana", "cheese"])

        # Proper key sets
        self.assertEqual(result.keys(), ['a'])
        self.assertEqual(result.subset_by_key("a"), set(["avocado"]))
        self.assertEqual(result.subset_by_key("b"), set())
        self.assertEqual(result.subset_by_key("c"), set())

        # _update
        copy = ks.copy()
        copy.difference_update(ks2, more)

        # No unintended side-effects
        self.assertEqual(ks2, set(["apple", "acacia"]))
        self.assertEqual(more, ["banana", "cheese"])

        self.assertEqual(result, copy)
        self.assertEqual(sorted(result.keys()), sorted(copy.keys()))
        for key in result.keys():
            self.assertEqual(result.subset_by_key(key),
                             copy.subset_by_key(key))
示例#2
0
    def testXor(self):
        ks = KeyedSet(firstLetter, ["apple", "avocado", "banana", "cheese"])
        ks2 = KeyedSet(firstLetter, ["apple", "acacia", "banana", "durian"])
        result = ks ^ ks2
        self.assertEqual(result, set(["acacia", "avocado", "cheese",
                                      "durian"]))

        # No side-effects
        self.assertEqual(ks, set(["apple", "avocado", "banana", "cheese"]))
        self.assertEqual(ks2, set(["apple", "acacia", "banana", "durian"]))

        # Proper key sets
        self.assertEqual(result.keys(), ['a', 'c', 'd'])
        self.assertEqual(result.subset_by_key("a"), set(["acacia", "avocado"]))
        self.assertEqual(result.subset_by_key("b"), set())
        self.assertEqual(result.subset_by_key("c"), set(["cheese"]))
        self.assertEqual(result.subset_by_key("d"), set(["durian"]))

        # _update
        copy = ks.copy()
        copy ^= ks2

        # No unintended side-effects
        self.assertEqual(ks2, set(["apple", "acacia", "banana", "durian"]))

        self.assertEqual(result, copy)
        self.assertEqual(sorted(result.keys()), sorted(copy.keys()))
        for key in result.keys():
            self.assertEqual(result.subset_by_key(key),
                             copy.subset_by_key(key))
示例#3
0
    def testSymmetricDifference(self):
        ks = KeyedSet(firstLetter, ["apple", "avocado", "banana", "cheese"])
        other = ["apple", "acacia", "banana", "durian"]
        result = ks.symmetric_difference(other)
        self.assertEqual(result, set(["acacia", "avocado", "cheese",
                                      "durian"]))

        # No side-effects
        self.assertEqual(ks, set(["apple", "avocado", "banana", "cheese"]))
        self.assertEqual(other, ["apple", "acacia", "banana", "durian"])

        # Proper key sets
        self.assertEqual(result.keys(), ['a', 'c', 'd'])
        self.assertEqual(result.subset_by_key("a"), set(["acacia", "avocado"]))
        self.assertEqual(result.subset_by_key("b"), set())
        self.assertEqual(result.subset_by_key("c"), set(["cheese"]))
        self.assertEqual(result.subset_by_key("d"), set(["durian"]))

        # _update
        copy = ks.copy()
        copy.symmetric_difference_update(other)

        # No unintended side-effects
        self.assertEqual(other, ["apple", "acacia", "banana", "durian"])

        self.assertEqual(result, copy)
        self.assertEqual(sorted(result.keys()), sorted(copy.keys()))
        for key in result.keys():
            self.assertEqual(result.subset_by_key(key),
                             copy.subset_by_key(key))
示例#4
0
 def testPop(self):
     ks = KeyedSet(firstLetter, ["apple", "avocado", "banana"])
     popped = []
     while ks:
         popped.append(ks.pop())
     self.assertEqual(sorted(popped), ["apple", "avocado", "banana"])
     self.assertEqual(ks.subset_by_key("a"), set())
     self.assertEqual(ks.subset_by_key("b"), set())
示例#5
0
 def testClear(self):
     ks = KeyedSet(firstLetter, ["apple", "avocado", "banana"])
     self.assertFalse(not ks)
     self.assertEqual(len(ks), 3)
     ks.clear()
     self.assertEqual(len(ks), 0)
     self.assertTrue(not ks)
     self.assertEqual(ks.subset_by_key("a"), set())
     self.assertEqual(ks.subset_by_key("b"), set())
示例#6
0
    def testDiscard(self):
        ks = KeyedSet(firstLetter, ["apple", "avocado", "banana"])
        for item in ["apple", "acacia", "banana", "cheese"]:
            ks.discard(item)
        self.assertEqual(ks, set(["avocado"]))

        # Proper key sets
        self.assertEqual(ks.keys(), ['a'])
        self.assertEqual(ks.subset_by_key("a"), set(["avocado"]))
        self.assertEqual(ks.subset_by_key("b"), set())
        self.assertEqual(ks.subset_by_key("c"), set())
示例#7
0
 def testDiscardByKey(self):
     ks = KeyedSet(firstLetter, ["apple", "avocado", "banana"])
     discarded = ks.discard_by_key('a')
     self.assertEqual(discarded, set(['apple', 'avocado']))
     self.assertEqual(ks.subset_by_key('a'), set())
     self.assertEqual(ks, set(['banana']))
     self.assertEqual(ks.discard_by_key('b'), set(['banana']))
     self.assertTrue(not ks)
     try:
         self.assertEqual(ks.discard_by_key('a'), set())
     except:
         self.assertTrue(False)
示例#8
0
    def testAdd(self):
        ks = KeyedSet(firstLetter, ["apple", "avocado", "banana"])
        for item in ["apple", "acacia", "cheese"]:
            ks.add(item)
        self.assertEqual(
            ks, set(["apple", "avocado", "banana", "acacia", "cheese"]))

        # Proper key sets
        self.assertEqual(sorted(ks.keys()), ['a', 'b', 'c'])
        self.assertEqual(ks.subset_by_key("a"),
                         set(["apple", "avocado", "acacia"]))
        self.assertEqual(ks.subset_by_key("b"), set(["banana"]))
        self.assertEqual(ks.subset_by_key("c"), set(["cheese"]))
        self.assertEqual(ks.subset_by_key("d"), set())
示例#9
0
 def testPopByKey(self):
     ks = KeyedSet(firstLetter, ["apple", "avocado", "banana"])
     popped = []
     popped.append(ks.pop_by_key('a'))
     popped.append(ks.pop_by_key('a'))
     self.assertEqual(sorted(popped), ['apple', 'avocado'])
     self.assertEqual(ks.subset_by_key('a'), set())
     self.assertEqual(ks, set(['banana']))
     self.assertEqual(ks.pop_by_key('b'), 'banana')
     self.assertTrue(not ks)
     try:
         ks.pop_by_key('a')
     except KeyError:
         self.assertTrue(True)
     except:
         self.assertTrue(False)
     else:
         self.assertTrue(False)
示例#10
0
 def testCopy(self):
     ks = KeyedSet(firstLetter, ["apple", "avocado", "banana"])
     ks2 = ks.copy()
     self.assertEqual(sorted(ks), ["apple", "avocado", "banana"])
     self.assertEqual(sorted(ks2), ["apple", "avocado", "banana"])
     self.assertEqual(sorted(ks.keys()), ["a", "b"])
     self.assertEqual(sorted(ks2.keys()), ["a", "b"])
     ks2.add("acacia")
     ks2.add("cheese")
     ks2.remove("banana")
     self.assertEqual(sorted(ks), ["apple", "avocado", "banana"])
     self.assertEqual(sorted(ks2), ["acacia", "apple", "avocado", "cheese"])
     self.assertEqual(sorted(ks.keys()), ["a", "b"])
     self.assertEqual(sorted(ks2.keys()), ["a", "c"])
     self.assertEqual(ks2.subset_by_key("a"),
                      set(["acacia", "apple", "avocado"]))
     self.assertEqual(ks2.subset_by_key("b"), set())
     self.assertEqual(ks2.subset_by_key("c"), set(["cheese"]))
示例#11
0
    def __init__(self, callableTaskFactory=CallableTaskFactory()):
        self._loopingCalls = {}
        self._tasks = {}
        self._taskCallback = {}
        self._taskStats = {}
        self._callableTaskFactory = callableTaskFactory
        self._shuttingDown = False
        # create a cleanup task that will periodically sweep the
        # cleanup dictionary for tasks that need to be cleaned
        self._tasksToCleanup = KeyedSet(getConfigId)
        self._cleanupTask = task.LoopingCall(self._cleanupTasks)
        self._cleanupTask.start(Scheduler.CLEANUP_TASKS_INTERVAL)

        self._executor = TwistedExecutor(1)

        # Ensure that we can cleanly shutdown all of our tasks
        reactor.addSystemEventTrigger('before', 'shutdown', self.shutdown, 'before')
        reactor.addSystemEventTrigger('during', 'shutdown', self.shutdown, 'during')
        reactor.addSystemEventTrigger('after', 'shutdown', self.shutdown, 'after')
示例#12
0
    def testRemove(self):
        ks = KeyedSet(firstLetter, ["apple", "avocado", "banana"])
        for item in ["apple", "banana"]:
            ks.remove(item)
        for item in ["acacia", "cheese"]:
            try:
                ks.remove(item)
            except KeyError:
                self.assertTrue(True)
            except:
                self.assertTrue(False)
            else:
                self.assertTrue(False)
        self.assertEqual(ks, set(["avocado"]))

        # Proper key sets
        self.assertEqual(ks.keys(), ['a'])
        self.assertEqual(ks.subset_by_key("a"), set(["avocado"]))
        self.assertEqual(ks.subset_by_key("b"), set())
        self.assertEqual(ks.subset_by_key("c"), set())
示例#13
0
 def testSubsetByKey(self):
     ks = KeyedSet(firstLetter, ["apple", "avocado", "banana"])
     self.assertEqual(ks.subset_by_key('a'), set(['apple', 'avocado']))
     self.assertEqual(ks.subset_by_key('b'), set(['banana']))
     self.assertEqual(ks.subset_by_key('c'), set())
示例#14
0
 def testHasKey(self):
     ks = KeyedSet(firstLetter, ["apple", "avocado", "banana"])
     self.assertTrue(ks.has_key("a"))
     self.assertTrue(ks.has_key("b"))
     self.assertFalse(ks.has_key("c"))
示例#15
0
 def testIterkeys(self):
     ks = KeyedSet(firstLetter, ["apple", "avocado", "banana"])
     keys = []
     for key in ks.iterkeys():
         keys.append(key)
     self.assertEqual(sorted(keys), ["a", "b"])
示例#16
0
 def testKeys(self):
     ks = KeyedSet(firstLetter, ["apple", "avocado", "banana"])
     self.assertEqual(sorted(ks.keys()), ["a", "b"])