Skip to content

Commit 2d2bd02

Browse files
committed
More tests
1 parent 1194caa commit 2d2bd02

File tree

5 files changed

+237
-7
lines changed

5 files changed

+237
-7
lines changed

PriorityQueues/BinaryPriorityQueue.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,13 +220,14 @@ protected virtual T RemoveAt(int index)
220220
throw new ArgumentOutOfRangeException("index", index, string.Empty);
221221
}
222222

223+
int indexOfLastElement = Count - 1;
223224
T removedElem = _heap[index];
224225

225-
Swap(index, Count - 1);
226+
Swap(index, indexOfLastElement);
226227

227-
_heap.RemoveAt(Count - 1);
228+
_heap.RemoveAt(indexOfLastElement);
228229

229-
if (IsEmpty()) {
230+
if (index == indexOfLastElement) {
230231
return removedElem;
231232
}
232233

PriorityQueues/MappedBinaryPriorityQueue.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,15 +128,16 @@ protected override T RemoveAt(int index)
128128
throw new ArgumentOutOfRangeException("index", index, string.Empty);
129129
}
130130

131+
int indexOfLastElement = Count - 1;
131132
T removedElem = _heap[index];
132133

133-
Swap(index, Count - 1);
134+
Swap(index, indexOfLastElement);
134135

135-
_heap.RemoveAt(Count - 1);
136+
_heap.RemoveAt(indexOfLastElement);
136137

137138
MapRemove(removedElem);
138139

139-
if (IsEmpty())
140+
if (index == indexOfLastElement)
140141
{
141142
return removedElem;
142143
}

Tests/BasePriorityQueueTests.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,5 +135,11 @@ public void Removed_elements_are_no_longer_contained_in_queue()
135135

136136
[TestMethod()]
137137
public abstract void Enqueue_elements_and_peek();
138+
139+
[TestMethod()]
140+
public abstract void Enqueue_elements_and_dequeue_returns_items_in_priority_order();
141+
142+
[TestMethod()]
143+
public abstract void Complex_test_with_multiple_operations();
138144
}
139145
}

Tests/BinaryPriorityQueueTests.cs

Lines changed: 113 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,61 @@ namespace PriorityQueues.Tests
55
[TestClass()]
66
public class MinBinaryPriorityQueueTests : BasePriorityQueueTests
77
{
8+
[TestMethod()]
9+
public override void Complex_test_with_multiple_operations()
10+
{
11+
var apple = new SampleElement("apple", 50f);
12+
var banana = new SampleElement("banana", 40f);
13+
var cherry = new SampleElement("cherry", 30f);
14+
var date = new SampleElement("date", 20f);
15+
var elderberry = new SampleElement("elderberry", 10f);
16+
IPriorityQueue<SampleElement> priorityQueue = CreatePriorityQueue();
17+
18+
priorityQueue.Enqueue(date);
19+
priorityQueue.Enqueue(elderberry);
20+
21+
Assert.AreEqual(priorityQueue.Count, 2);
22+
Assert.AreEqual(priorityQueue.Peek(), elderberry);
23+
Assert.IsTrue(priorityQueue.Contains(elderberry));
24+
Assert.AreEqual(priorityQueue.Dequeue(), elderberry);
25+
26+
priorityQueue.Enqueue(apple);
27+
priorityQueue.Enqueue(banana);
28+
priorityQueue.Enqueue(cherry);
29+
30+
Assert.AreEqual(priorityQueue.Count, 4);
31+
32+
Assert.IsFalse(priorityQueue.Remove(elderberry));
33+
Assert.AreEqual(priorityQueue.Count, 4);
34+
35+
Assert.IsTrue(priorityQueue.Remove(apple));
36+
Assert.AreEqual(priorityQueue.Count, 3);
37+
38+
Assert.AreEqual(priorityQueue.Dequeue(), date);
39+
Assert.AreEqual(priorityQueue.Dequeue(), cherry);
40+
Assert.AreEqual(priorityQueue.Dequeue(), banana);
41+
42+
Assert.IsTrue(priorityQueue.IsEmpty());
43+
}
44+
45+
[TestMethod()]
46+
public override void Enqueue_elements_and_dequeue_returns_items_in_priority_order()
47+
{
48+
var apple = new SampleElement("apple", 3f);
49+
var pear = new SampleElement("pear", 1f);
50+
var banana = new SampleElement("banana", 5f);
51+
IPriorityQueue<SampleElement> priorityQueue = CreatePriorityQueue();
52+
53+
priorityQueue.Enqueue(apple);
54+
priorityQueue.Enqueue(pear);
55+
priorityQueue.Enqueue(banana);
56+
57+
Assert.IsTrue(priorityQueue.Dequeue() == pear);
58+
Assert.IsTrue(priorityQueue.Dequeue() == apple);
59+
Assert.IsTrue(priorityQueue.Dequeue() == banana);
60+
}
61+
62+
[TestMethod()]
863
public override void Enqueue_elements_and_peek()
964
{
1065
var apple = new SampleElement("apple", 3f);
@@ -28,6 +83,61 @@ protected override IPriorityQueue<SampleElement> CreatePriorityQueue()
2883
[TestClass()]
2984
public class MaxBinaryPriorityQueueTests : BasePriorityQueueTests
3085
{
86+
[TestMethod()]
87+
public override void Complex_test_with_multiple_operations()
88+
{
89+
var apple = new SampleElement("apple", 10f);
90+
var banana = new SampleElement("banana", 20f);
91+
var cherry = new SampleElement("cherry", 30f);
92+
var date = new SampleElement("date", 40f);
93+
var elderberry = new SampleElement("elderberry", 50f);
94+
IPriorityQueue<SampleElement> priorityQueue = CreatePriorityQueue();
95+
96+
priorityQueue.Enqueue(date);
97+
priorityQueue.Enqueue(elderberry);
98+
99+
Assert.AreEqual(priorityQueue.Count, 2);
100+
Assert.AreEqual(priorityQueue.Peek(), elderberry);
101+
Assert.IsTrue(priorityQueue.Contains(elderberry));
102+
Assert.AreEqual(priorityQueue.Dequeue(), elderberry);
103+
104+
priorityQueue.Enqueue(apple);
105+
priorityQueue.Enqueue(banana);
106+
priorityQueue.Enqueue(cherry);
107+
108+
Assert.AreEqual(priorityQueue.Count, 4);
109+
110+
Assert.IsFalse(priorityQueue.Remove(elderberry));
111+
Assert.AreEqual(priorityQueue.Count, 4);
112+
113+
Assert.IsTrue(priorityQueue.Remove(apple));
114+
Assert.AreEqual(priorityQueue.Count, 3);
115+
116+
Assert.AreEqual(priorityQueue.Dequeue(), date);
117+
Assert.AreEqual(priorityQueue.Dequeue(), cherry);
118+
Assert.AreEqual(priorityQueue.Dequeue(), banana);
119+
120+
Assert.IsTrue(priorityQueue.IsEmpty());
121+
}
122+
123+
[TestMethod()]
124+
public override void Enqueue_elements_and_dequeue_returns_items_in_priority_order()
125+
{
126+
var apple = new SampleElement("apple", 1f);
127+
var pear = new SampleElement("pear", 5f);
128+
var banana = new SampleElement("banana", 4f);
129+
IPriorityQueue<SampleElement> priorityQueue = CreatePriorityQueue();
130+
131+
priorityQueue.Enqueue(apple);
132+
priorityQueue.Enqueue(pear);
133+
priorityQueue.Enqueue(banana);
134+
135+
Assert.IsTrue(priorityQueue.Dequeue() == pear);
136+
Assert.IsTrue(priorityQueue.Dequeue() == banana);
137+
Assert.IsTrue(priorityQueue.Dequeue() == apple);
138+
}
139+
140+
[TestMethod()]
31141
public override void Enqueue_elements_and_peek()
32142
{
33143
var apple = new SampleElement("apple", 1f);
@@ -39,7 +149,9 @@ public override void Enqueue_elements_and_peek()
39149
priorityQueue.Enqueue(pear);
40150
priorityQueue.Enqueue(banana);
41151

42-
Assert.IsTrue(priorityQueue.Peek() == pear);
152+
Assert.IsTrue(priorityQueue.Dequeue() == pear);
153+
Assert.IsTrue(priorityQueue.Dequeue() == banana);
154+
Assert.IsTrue(priorityQueue.Dequeue() == apple);
43155
}
44156

45157
protected override IPriorityQueue<SampleElement> CreatePriorityQueue()

Tests/MappedBinaryPriorityQueueTests.cs

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,61 @@ namespace PriorityQueues.Tests
55
[TestClass()]
66
public class MinMappedBinaryPriorityQueueTests : BasePriorityQueueTests
77
{
8+
[TestMethod()]
9+
public override void Complex_test_with_multiple_operations()
10+
{
11+
var apple = new SampleElement("apple", 50f);
12+
var banana = new SampleElement("banana", 40f);
13+
var cherry = new SampleElement("cherry", 30f);
14+
var date = new SampleElement("date", 20f);
15+
var elderberry = new SampleElement("elderberry", 10f);
16+
IPriorityQueue<SampleElement> priorityQueue = CreatePriorityQueue();
17+
18+
priorityQueue.Enqueue(date);
19+
priorityQueue.Enqueue(elderberry);
20+
21+
Assert.AreEqual(priorityQueue.Count, 2);
22+
Assert.AreEqual(priorityQueue.Peek(), elderberry);
23+
Assert.IsTrue(priorityQueue.Contains(elderberry));
24+
Assert.AreEqual(priorityQueue.Dequeue(), elderberry);
25+
26+
priorityQueue.Enqueue(apple);
27+
priorityQueue.Enqueue(banana);
28+
priorityQueue.Enqueue(cherry);
29+
30+
Assert.AreEqual(priorityQueue.Count, 4);
31+
32+
Assert.IsFalse(priorityQueue.Remove(elderberry));
33+
Assert.AreEqual(priorityQueue.Count, 4);
34+
35+
Assert.IsTrue(priorityQueue.Remove(apple));
36+
Assert.AreEqual(priorityQueue.Count, 3);
37+
38+
Assert.AreEqual(priorityQueue.Dequeue(), date);
39+
Assert.AreEqual(priorityQueue.Dequeue(), cherry);
40+
Assert.AreEqual(priorityQueue.Dequeue(), banana);
41+
42+
Assert.IsTrue(priorityQueue.IsEmpty());
43+
}
44+
45+
[TestMethod()]
46+
public override void Enqueue_elements_and_dequeue_returns_items_in_priority_order()
47+
{
48+
var apple = new SampleElement("apple", 3f);
49+
var pear = new SampleElement("pear", 1f);
50+
var banana = new SampleElement("banana", 5f);
51+
IPriorityQueue<SampleElement> priorityQueue = CreatePriorityQueue();
52+
53+
priorityQueue.Enqueue(apple);
54+
priorityQueue.Enqueue(pear);
55+
priorityQueue.Enqueue(banana);
56+
57+
Assert.IsTrue(priorityQueue.Dequeue() == pear);
58+
Assert.IsTrue(priorityQueue.Dequeue() == apple);
59+
Assert.IsTrue(priorityQueue.Dequeue() == banana);
60+
}
61+
62+
[TestMethod()]
863
public override void Enqueue_elements_and_peek()
964
{
1065
var apple = new SampleElement("apple", 3f);
@@ -28,6 +83,61 @@ protected override IPriorityQueue<SampleElement> CreatePriorityQueue()
2883
[TestClass()]
2984
public class MaxMappedBinaryPriorityQueueTests : BasePriorityQueueTests
3085
{
86+
[TestMethod()]
87+
public override void Complex_test_with_multiple_operations()
88+
{
89+
var apple = new SampleElement("apple", 10f);
90+
var banana = new SampleElement("banana", 20f);
91+
var cherry = new SampleElement("cherry", 30f);
92+
var date = new SampleElement("date", 40f);
93+
var elderberry = new SampleElement("elderberry", 50f);
94+
IPriorityQueue<SampleElement> priorityQueue = CreatePriorityQueue();
95+
96+
priorityQueue.Enqueue(date);
97+
priorityQueue.Enqueue(elderberry);
98+
99+
Assert.AreEqual(priorityQueue.Count, 2);
100+
Assert.AreEqual(priorityQueue.Peek(), elderberry);
101+
Assert.IsTrue(priorityQueue.Contains(elderberry));
102+
Assert.AreEqual(priorityQueue.Dequeue(), elderberry);
103+
104+
priorityQueue.Enqueue(apple);
105+
priorityQueue.Enqueue(banana);
106+
priorityQueue.Enqueue(cherry);
107+
108+
Assert.AreEqual(priorityQueue.Count, 4);
109+
110+
Assert.IsFalse(priorityQueue.Remove(elderberry));
111+
Assert.AreEqual(priorityQueue.Count, 4);
112+
113+
Assert.IsTrue(priorityQueue.Remove(apple));
114+
Assert.AreEqual(priorityQueue.Count, 3);
115+
116+
Assert.AreEqual(priorityQueue.Dequeue(), date);
117+
Assert.AreEqual(priorityQueue.Dequeue(), cherry);
118+
Assert.AreEqual(priorityQueue.Dequeue(), banana);
119+
120+
Assert.IsTrue(priorityQueue.IsEmpty());
121+
}
122+
123+
[TestMethod()]
124+
public override void Enqueue_elements_and_dequeue_returns_items_in_priority_order()
125+
{
126+
var apple = new SampleElement("apple", 1f);
127+
var pear = new SampleElement("pear", 5f);
128+
var banana = new SampleElement("banana", 4f);
129+
IPriorityQueue<SampleElement> priorityQueue = CreatePriorityQueue();
130+
131+
priorityQueue.Enqueue(apple);
132+
priorityQueue.Enqueue(pear);
133+
priorityQueue.Enqueue(banana);
134+
135+
Assert.IsTrue(priorityQueue.Dequeue() == pear);
136+
Assert.IsTrue(priorityQueue.Dequeue() == banana);
137+
Assert.IsTrue(priorityQueue.Dequeue() == apple);
138+
}
139+
140+
[TestMethod()]
31141
public override void Enqueue_elements_and_peek()
32142
{
33143
var apple = new SampleElement("apple", 1f);

0 commit comments

Comments
 (0)