summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaciej Piechotka <uzytkownik2@gmail.com>2011-04-08 15:24:27 +0200
committerMaciej Piechotka <uzytkownik2@gmail.com>2011-04-08 15:25:43 +0200
commit1821ee977015cef8f7f111854e6a8a9447898f01 (patch)
tree7a9e583d500a54a3a2a8a1b8c14c783c0a33b062
parent35c40b1873064c744fab646fbe8df6b12ba2c621 (diff)
downloadlibgee-1821ee977015cef8f7f111854e6a8a9447898f01.tar.gz
Fix adding second element to priority queue, fixes bug #647162
-rw-r--r--gee/priorityqueue.vala2
-rw-r--r--tests/testpriorityqueue.vala10
2 files changed, 12 insertions, 0 deletions
diff --git a/gee/priorityqueue.vala b/gee/priorityqueue.vala
index 74337a0..6a6f8bf 100644
--- a/gee/priorityqueue.vala
+++ b/gee/priorityqueue.vala
@@ -107,6 +107,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);
diff --git a/tests/testpriorityqueue.vala b/tests/testpriorityqueue.vala
index 9c82ab2..cbeac2f 100644
--- a/tests/testpriorityqueue.vala
+++ b/tests/testpriorityqueue.vala
@@ -114,5 +114,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");
}
}