Exemplo n.º 1
0
 def testPending(self):
     heap = IndexedHeap()
     heap.push(1, 1)
     self.assertEqual(len(heap), 1)
     self.assertEqual(len(heap.heap), 1)
     heap.push(2, 3)
     self.assertEqual(len(heap), 2)
     self.assertEqual(len(heap.heap), 1)
     self.assertEqual(len(heap.pending), 1)
     heap.push(3, 2)
     self.assertEqual(len(heap), 3)
     self.assertEqual(len(heap.heap), 1)
     self.assertEqual(len(heap.pending), 2)
     self.assertEqual(heap.pendingpriority, 2)
     heap.push(4, 4)
     self.assertEqual(len(heap), 4)
     self.assertEqual(len(heap.heap), 1)
     self.assertEqual(len(heap.pending), 3)
     self.assertEqual(heap.pendingpriority, 2)
     heap.remove(4)
     self.assertEqual(len(heap), 3)
     self.assertEqual(len(heap.heap), 1)
     self.assertEqual(len(heap.pending), 2)
     self.assertEqual(heap.pendingpriority, 2)
     self.assertEqual(heap.pop(), 1)
     self.assertEqual(len(heap), 2)
     self.assertEqual(len(heap.heap), 2)
     self.assertEqual(len(heap.pending), 0)
     self.assertIsNone(heap.pendingpriority)
     heap.push(1, 1)
     self.assertEqual(len(heap), 3)
     self.assertEqual(len(heap.heap), 3)
     self.assertEqual(len(heap.pending), 0)
     self.assertIsNone(heap.pendingpriority)
Exemplo n.º 2
0
 def testRandomSort(self):
     data = [(randrange(0, 10000), randrange(0, 10000))
             for _ in range(0, 1000)]
     data = list(
         (v, k) for k, v in dict((d[1], d[0]) for d in data).items())
     heap = IndexedHeap()
     for d in data:
         heap.push(d[1], d)
     # Remove min item
     minv = heap.top()
     self.assertEqual(minv, min(data)[1])
     heap.remove(minv)
     data.remove(min(data))
     # Remove last
     last = heap.heap[-1][0]
     heap.remove(last[1])
     data.remove(last)
     self.assertEqual(len(heap), len(data))
     # Random remove
     remove_sample = sample(data, 100)
     data = [d for d in data if d not in remove_sample]
     for d in remove_sample:
         heap.remove(d[1])
     result = []
     while heap:
         result.append(heap.pop())
     self.assertListEqual(result, [d[1] for d in sorted(data)])
Exemplo n.º 3
0
 def __init__(self,
              polling=None,
              processevents=None,
              queuedefault=None,
              queuemax=None,
              defaultQueueClass=CBQueue.FifoQueue,
              defaultQueuePriority=0):
     '''
     Constructor
     
     :param polling: a polling source to retrieve events
     
     :param processevents: max events processed before starting another poll
     
     :param queuedefault: max length of default queue
     
     :param queuemax: total max length of the event queue
     
     :param defaultQueueClass: default queue class, see CBQueue
     
     :param defaultQueuePriority: default queue priority, see CBQueue
     '''
     self.matchtree = MatchTree()
     self.eventtree = EventTree()
     self.queue = CBQueue(None,
                          None,
                          queuedefault,
                          queuemax,
                          defaultQueueClass=defaultQueueClass,
                          defaultQueuePriority=defaultQueuePriority)
     self.polling = polling
     if polling is None:
         # test only
         self.polling = self.MockPolling()
     self.timers = IndexedHeap()
     self.quitsignal = False
     self.quitting = False
     self.generatecontinue = False
     self.registerIndex = {}
     self.daemons = set()
     self.processevents = processevents
     #self.logger.setLevel(WARNING)
     self.debugging = False
     self._pending_runnables = []
     self.syscallfunc = None
     self.current_time = time()