Fix adding second element to priority queue, fixes bug #647162
authorMaciej Piechotka <uzytkownik2@gmail.com>
Fri, 8 Apr 2011 13:24:27 +0000 (15:24 +0200)
committerMaciej Piechotka <uzytkownik2@gmail.com>
Fri, 8 Apr 2011 13:24:27 +0000 (15:24 +0200)
gee/priorityqueue.vala
tests/testpriorityqueue.vala

index fd45aac..0b6a93e 100644 (file)
@@ -114,6 +114,8 @@ public class Gee.PriorityQueue<G> : Gee.AbstractQueue<G> {
                        _r_prime = new Type2Node<G> (element);
                        _r_prime.parent = _r;
                        _r.type2_child = _r_prime;
+                       if (_compare (_r_prime, _r) < 0)
+                               _swap_data (_r_prime, _r);
                } else {
                        // Form a tree with a single node N of type I consisting of element e
                        Type1Node<G> node = new Type1Node<G> (element);
index 9274dd8..676a814 100644 (file)
@@ -89,5 +89,15 @@ public class PriorityQueueTests : QueueTests {
                assert (test_queue.poll () == "twelve");
                assert (test_queue.peek () == "two");
                assert (test_queue.poll () == "two");
+
+               // Add decreasing elements
+               assert (test_queue.offer ("2"));
+               assert (test_queue.offer ("1"));
+
+               
+               assert (test_queue.peek () == "1");
+               assert (test_queue.poll () == "1");
+               assert (test_queue.peek () == "2");
+               assert (test_queue.poll () == "2");
        }
 }