mirror of
https://github.com/lifegpc/c-utils.git
synced 2026-06-06 21:28:50 +08:00
124 lines
4.0 KiB
C++
124 lines
4.0 KiB
C++
#include "gtest/gtest.h"
|
|
#include "circular_queue.h"
|
|
#include "linked_queue.h"
|
|
#include <string>
|
|
|
|
TEST(Queue_Test, CircularQueue1) {
|
|
struct CircularQueue<int> queue;
|
|
EXPECT_EQ(init_circular_queue(queue, 3), true);
|
|
EXPECT_EQ(circular_queue_is_empty(queue), true);
|
|
int v;
|
|
EXPECT_EQ(circular_queue_get_back(queue, v), false);
|
|
EXPECT_EQ(circular_queue_get_head(queue, v), false);
|
|
EXPECT_EQ(circular_queue_pop(queue, v), false);
|
|
EXPECT_EQ(circular_queue_push(queue, 1), true);
|
|
EXPECT_EQ(circular_queue_push(queue, 2), true);
|
|
EXPECT_EQ(circular_queue_is_full(queue), true);
|
|
EXPECT_EQ(circular_queue_is_empty(queue), false);
|
|
EXPECT_EQ(circular_queue_push(queue, 3), false);
|
|
EXPECT_EQ(circular_queue_pop(queue, v), true);
|
|
EXPECT_EQ(v, 1);
|
|
EXPECT_EQ(circular_queue_is_full(queue), false);
|
|
EXPECT_EQ(circular_queue_push(queue, 3), true);
|
|
EXPECT_EQ(circular_queue_get_head(queue, v), true);
|
|
EXPECT_EQ(v, 2);
|
|
EXPECT_EQ(circular_queue_get_back(queue, v), true);
|
|
EXPECT_EQ(v, 3);
|
|
EXPECT_EQ(circular_queue_length(queue), 2);
|
|
EXPECT_EQ(queue.front, 1);
|
|
EXPECT_EQ(queue.rear, 0);
|
|
std::string text;
|
|
circular_queue_iter(queue, [&text](int ele) {
|
|
if (!text.empty()) {
|
|
text += ",";
|
|
}
|
|
text += std::to_string(ele);
|
|
});
|
|
EXPECT_EQ(text, "2,3");
|
|
EXPECT_EQ(circular_queue_pop(queue, v), true);
|
|
EXPECT_EQ(v, 2);
|
|
EXPECT_EQ(queue.front, 2);
|
|
EXPECT_EQ(circular_queue_length(queue), 1);
|
|
EXPECT_EQ(circular_queue_push(queue, 4), true);
|
|
EXPECT_EQ(circular_queue_pop(queue, v), true);
|
|
EXPECT_EQ(v, 3);
|
|
EXPECT_EQ(queue.front, 0);
|
|
EXPECT_EQ(queue.rear, 1);
|
|
circular_queue_clear(queue);
|
|
EXPECT_EQ(queue.rear, 0);
|
|
EXPECT_EQ(circular_queue_is_empty(queue), true);
|
|
free_circular_queue(queue);
|
|
}
|
|
|
|
TEST(Queue_Test, CircularQueue2) {
|
|
struct CircularQueue<int> queue;
|
|
EXPECT_EQ(init_circular_queue(queue, 5), true);
|
|
EXPECT_EQ(circular_queue_push(queue, 1), true);
|
|
EXPECT_EQ(circular_queue_push(queue, 2), true);
|
|
EXPECT_EQ(circular_queue_push(queue, 3), true);
|
|
EXPECT_EQ(circular_queue_push(queue, 4), true);
|
|
std::string text;
|
|
circular_queue_iter(queue, [&text](int ele) {
|
|
if (!text.empty()) {
|
|
text += ",";
|
|
}
|
|
text += std::to_string(ele);
|
|
});
|
|
EXPECT_EQ(text, "1,2,3,4");
|
|
int v;
|
|
EXPECT_EQ(circular_queue_pop(queue, v), true);
|
|
EXPECT_EQ(v, 1);
|
|
EXPECT_EQ(circular_queue_push(queue, 5), true);
|
|
EXPECT_EQ(circular_queue_length(queue), 4);
|
|
EXPECT_EQ(queue.front, 1);
|
|
EXPECT_EQ(queue.rear, 0);
|
|
text = "";
|
|
circular_queue_iter(queue, [&text](int ele) {
|
|
if (!text.empty()) {
|
|
text += ",";
|
|
}
|
|
text += std::to_string(ele);
|
|
});
|
|
EXPECT_EQ(text, "2,3,4,5");
|
|
free_circular_queue(queue);
|
|
}
|
|
|
|
TEST(Queue_Test, LinkedQueue1) {
|
|
struct LinkedQueue<int> queue;
|
|
linked_queue_init(queue);
|
|
EXPECT_EQ(linked_queue_push(queue, 3), true);
|
|
EXPECT_EQ(linked_queue_push(queue, 4), true);
|
|
EXPECT_EQ(linked_queue_push(queue, 9), true);
|
|
int v;
|
|
EXPECT_EQ(linked_queue_pop(queue, v), true);
|
|
EXPECT_EQ(v, 3);
|
|
EXPECT_EQ(linked_queue_push(queue, 7), true);
|
|
EXPECT_EQ(linked_queue_length(queue), 3);
|
|
std::string text = "";
|
|
linked_queue_iter(queue, [&text](int ele) {
|
|
if (!text.empty()) {
|
|
text += ",";
|
|
}
|
|
text += std::to_string(ele);
|
|
});
|
|
EXPECT_EQ(text, "4,9,7");
|
|
free_linked_queue(queue);
|
|
}
|
|
|
|
TEST(Queue_Test, LinkedQueue2) {
|
|
struct LinkedQueue<int> queue;
|
|
linked_queue_init(queue);
|
|
EXPECT_EQ(linked_queue_push(queue, 3), true);
|
|
EXPECT_EQ(linked_queue_push(queue, 4), true);
|
|
EXPECT_EQ(linked_queue_push(queue, 9), true);
|
|
int v;
|
|
EXPECT_EQ(linked_queue_pop(queue, v), true);
|
|
EXPECT_EQ(v, 3);
|
|
EXPECT_EQ(linked_queue_pop(queue, v), true);
|
|
EXPECT_EQ(linked_queue_pop(queue, v), true);
|
|
EXPECT_EQ(linked_queue_pop(queue, v), false);
|
|
EXPECT_EQ(v, 9);
|
|
EXPECT_EQ(queue.front, nullptr);
|
|
EXPECT_EQ(queue.rear, nullptr);
|
|
}
|