/// <summary>
        /// Checks for runnable Operations in Queue
        /// </summary>
        public void CheckQueue()
        {
            DateTime currentInstant = DateTime.Now;

            List <OperationContext> runnableOperations = new List <OperationContext>();

            lock (queuedOperations)
            {
                while (queuedOperations.Count > 0 && queuedOperations.Peek().RunDate < currentInstant)
                {
                    runnableOperations.Add(queuedOperations.Dequeue());
                }
            }

            foreach (OperationContext operation in runnableOperations)
            {
                RunOperation(operation);
            }

            lock (queuedOperations)
            {
                foreach (OperationContext operation in runnableOperations)
                {
                    OperationContext x = operation.GetNext();

                    if (x != null)
                    {
                        queuedOperations.Enqueue(x);
                    }
                }

                if (queuedOperations.Count > 0)
                {
                    if (queuedOperations.Peek().RunDate < currentInstant)
                    {
                        CheckQueue();
                    }
                    else
                    {
                        NextRunDate = queuedOperations.Min(x => x.RunDate);
                    }
                }
            }
        }
        public void TestExampleHeapQueue()
        {
            PriorityQueue <double, int> queue = new HeapPriorityQueue <double, int>();

            int[] elements = new int[] { 4, 9, 8, 7, 3, 22, 4, 9, -20, -40, -100, 102, 4, 5 };
            for (int i = 0; i < elements.Length; i++)
            {
                queue.Enqueue(elements[i], elements[i]);
            }
            Assert.AreEqual(queue.Count, elements.Length);
            int[] expected = new int[] { 102, 22, 9, 9, 8, 7, 5, 4, 4, 4, 3, -20, -40, -100 };
            for (int i = 0; i < expected.Length; i++)
            {
                Assert.AreEqual(expected[i], queue.Peek());
                Assert.AreEqual(expected[i], queue.Dequeue());
            }
            Assert.AreEqual(queue.Count, 0);
            Assert.IsTrue(queue.IsEmpty());
        }
        public void HeapPriorityQueuePeekTest()
        {
            HeapPriorityQueue<int> queue = new HeapPriorityQueue<int> (10);

            queue.Enqueue (5, 3);
            queue.Enqueue (6, 2);

            Assert.AreEqual (6, queue.Peek ());
            Assert.AreEqual (2, queue.Count);
        }
 public void HeapPriorityQueuePeekEmptyTest()
 {
     HeapPriorityQueue<int> queue = new HeapPriorityQueue<int> (10);
     Assert.AreEqual (0, queue.Peek());
 }