public void ShouldPopFromEmptyQueueForReferenceTypes()
        {
            IPriorityQueue <ReferenceTypeWrapper> priorityQueue = new PriorityQueue <ReferenceTypeWrapper>(new CompareReferenceTypeWrapper());

            var one = new ReferenceTypeWrapper(1);

            priorityQueue.Push(one);

            priorityQueue.Pop().Value.ShouldBe(1);
            priorityQueue.Pop().ShouldBe(null);
        }
        public void ShouldMaintainOrderedQueue()
        {
            IPriorityQueue <ReferenceTypeWrapper> priorityQueue = new PriorityQueue <ReferenceTypeWrapper>(new CompareReferenceTypeWrapper());

            var one   = new ReferenceTypeWrapper(1);
            var two   = new ReferenceTypeWrapper(2);
            var three = new ReferenceTypeWrapper(3);
            var four  = new ReferenceTypeWrapper(4);

            priorityQueue.Push(three);
            priorityQueue.Push(two);
            priorityQueue.Push(four);
            priorityQueue.Push(one);

            one.Value   = 8;
            two.Value   = 7;
            three.Value = 6;
            four.Value  = 5;

            priorityQueue.Pop().Value.ShouldBe(5);
            priorityQueue.Pop().Value.ShouldBe(6);
            priorityQueue.Pop().Value.ShouldBe(7);
            priorityQueue.Pop().Value.ShouldBe(8);
        }