mirror of
https://github.com/TheAlgorithms/C-Plus-Plus.git
synced 2026-02-07 20:46:16 +08:00
fix: remove memory leak in queue
This commit is contained in:
@@ -1,41 +1,93 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <cassert> /// for assert
|
||||
#include <iostream> /// for std::cout
|
||||
|
||||
#include "./queue.h"
|
||||
#include "./queue.hpp"
|
||||
|
||||
template <typename T>
|
||||
void testConstructedQueueIsEmpty() {
|
||||
const queue<T> curQueue;
|
||||
assert(curQueue.isEmptyQueue());
|
||||
}
|
||||
|
||||
void testEnQueue() {
|
||||
queue<int> curQueue;
|
||||
curQueue.enQueue(10);
|
||||
assert(curQueue.toVector() == std::vector<int>({10}));
|
||||
curQueue.enQueue(20);
|
||||
assert(curQueue.toVector() == std::vector<int>({10, 20}));
|
||||
curQueue.enQueue(30);
|
||||
curQueue.enQueue(40);
|
||||
assert(curQueue.toVector() == std::vector<int>({10, 20, 30, 40}));
|
||||
}
|
||||
|
||||
void testDeQueue() {
|
||||
queue<int> curQueue;
|
||||
curQueue.enQueue(10);
|
||||
curQueue.enQueue(20);
|
||||
curQueue.enQueue(30);
|
||||
|
||||
curQueue.deQueue();
|
||||
assert(curQueue.toVector() == std::vector<int>({20, 30}));
|
||||
|
||||
curQueue.deQueue();
|
||||
assert(curQueue.toVector() == std::vector<int>({30}));
|
||||
|
||||
curQueue.deQueue();
|
||||
assert(curQueue.isEmptyQueue());
|
||||
}
|
||||
|
||||
void testFront() {
|
||||
queue<int> curQueue;
|
||||
curQueue.enQueue(10);
|
||||
assert(curQueue.front() == 10);
|
||||
curQueue.enQueue(20);
|
||||
assert(curQueue.front() == 10);
|
||||
}
|
||||
|
||||
void testQueueAfterClearIsEmpty() {
|
||||
queue<int> curQueue;
|
||||
curQueue.enQueue(10);
|
||||
curQueue.enQueue(20);
|
||||
curQueue.enQueue(30);
|
||||
curQueue.clear();
|
||||
assert(curQueue.isEmptyQueue());
|
||||
}
|
||||
|
||||
void testFrontThrowsAnInvalidArgumentWhenQueueEmpty() {
|
||||
const queue<int> curQueue;
|
||||
bool wasException = false;
|
||||
try {
|
||||
curQueue.front();
|
||||
} catch (const std::invalid_argument&) {
|
||||
wasException = true;
|
||||
}
|
||||
assert(wasException);
|
||||
}
|
||||
|
||||
void testDeQueueThrowsAnInvalidArgumentWhenQueueEmpty() {
|
||||
queue<int> curQueue;
|
||||
bool wasException = false;
|
||||
try {
|
||||
curQueue.deQueue();
|
||||
} catch (const std::invalid_argument&) {
|
||||
wasException = true;
|
||||
}
|
||||
assert(wasException);
|
||||
}
|
||||
|
||||
int main() {
|
||||
queue<std::string> q;
|
||||
std::cout << "---------------------- Test construct ----------------------"
|
||||
<< std::endl;
|
||||
q.display();
|
||||
std::cout
|
||||
<< "---------------------- Test isEmptyQueue ----------------------"
|
||||
<< std::endl;
|
||||
if (q.isEmptyQueue())
|
||||
std::cout << "PASS" << std::endl;
|
||||
else
|
||||
std::cout << "FAIL" << std::endl;
|
||||
std::cout << "---------------------- Test enQueue ----------------------"
|
||||
<< std::endl;
|
||||
std::cout << "After Hai, Jeff, Tom, Jkingston go into queue: " << std::endl;
|
||||
q.enQueue("Hai");
|
||||
q.enQueue("Jeff");
|
||||
q.enQueue("Tom");
|
||||
q.enQueue("Jkingston");
|
||||
q.display();
|
||||
std::cout << "---------------------- Test front ----------------------"
|
||||
<< std::endl;
|
||||
std::string value = q.front();
|
||||
if (value == "Hai")
|
||||
std::cout << "PASS" << std::endl;
|
||||
else
|
||||
std::cout << "FAIL" << std::endl;
|
||||
std::cout << "---------------------- Test deQueue ----------------------"
|
||||
<< std::endl;
|
||||
q.display();
|
||||
q.deQueue();
|
||||
q.deQueue();
|
||||
std::cout << "After Hai, Jeff left the queue: " << std::endl;
|
||||
q.display();
|
||||
testConstructedQueueIsEmpty<int>();
|
||||
testConstructedQueueIsEmpty<double>();
|
||||
testConstructedQueueIsEmpty<std::vector<long double>>();
|
||||
|
||||
testEnQueue();
|
||||
testDeQueue();
|
||||
|
||||
testQueueAfterClearIsEmpty();
|
||||
|
||||
testFrontThrowsAnInvalidArgumentWhenQueueEmpty();
|
||||
testDeQueueThrowsAnInvalidArgumentWhenQueueEmpty();
|
||||
|
||||
std::cout << "All tests pass!\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user