summaryrefslogtreecommitdiff
path: root/AK/Tests
diff options
context:
space:
mode:
authorAndreas Kling <awesomekling@gmail.com>2019-10-23 12:20:45 +0200
committerAndreas Kling <awesomekling@gmail.com>2019-10-23 12:27:43 +0200
commit0cea80218df874bb3370f13c5e03ab22b230be1b (patch)
treea68dc12792b5c0f715170d9b256573d31d2ed71d /AK/Tests
parent0c4c4c48f277bf8ffc58f655ec937658f3f9b1de (diff)
downloadserenity-0cea80218df874bb3370f13c5e03ab22b230be1b.zip
AK: Make it possible to store complex types in a CircularQueue
Previously we would not run destructors for items in a CircularQueue, which would lead to memory leaks. This patch fixes that, and also adds a basic unit test for the class.
Diffstat (limited to 'AK/Tests')
-rw-r--r--AK/Tests/Makefile6
-rw-r--r--AK/Tests/TestCircularQueue.cpp51
2 files changed, 56 insertions, 1 deletions
diff --git a/AK/Tests/Makefile b/AK/Tests/Makefile
index 50f5339a23..77f8957daf 100644
--- a/AK/Tests/Makefile
+++ b/AK/Tests/Makefile
@@ -1,4 +1,4 @@
-PROGRAMS = TestAtomic TestString TestQueue TestVector TestHashMap TestJSON TestWeakPtr TestNonnullRefPtr TestRefPtr TestFixedArray TestFileSystemPath TestURL TestStringView TestUtf8
+PROGRAMS = TestAtomic TestString TestQueue TestVector TestHashMap TestJSON TestWeakPtr TestNonnullRefPtr TestRefPtr TestFixedArray TestFileSystemPath TestURL TestStringView TestUtf8 TestCircularQueue
CXXFLAGS = -std=c++17 -Wall -Wextra -ggdb3 -O2 -I../ -I../../
@@ -70,6 +70,10 @@ TestStringView: TestStringView.o $(SHARED_TEST_OBJS)
TestUtf8: TestUtf8.o $(SHARED_TEST_OBJS)
$(PRE_CXX) $(CXX) $(CXXFLAGS) -o $@ TestUtf8.o $(SHARED_TEST_OBJS)
+TestCircularQueue: TestCircularQueue.o $(SHARED_TEST_OBJS)
+ $(PRE_CXX) $(CXX) $(CXXFLAGS) -o $@ TestCircularQueue.o $(SHARED_TEST_OBJS)
+
+
clean:
rm -f $(SHARED_TEST_OBJS)
rm -f $(PROGRAMS)
diff --git a/AK/Tests/TestCircularQueue.cpp b/AK/Tests/TestCircularQueue.cpp
new file mode 100644
index 0000000000..fd49b88dcc
--- /dev/null
+++ b/AK/Tests/TestCircularQueue.cpp
@@ -0,0 +1,51 @@
+#include <AK/TestSuite.h>
+#include <AK/String.h>
+#include <AK/CircularQueue.h>
+
+TEST_CASE(basic)
+{
+ CircularQueue<int, 3> ints;
+ EXPECT(ints.is_empty());
+ ints.enqueue(1);
+ ints.enqueue(2);
+ ints.enqueue(3);
+ EXPECT_EQ(ints.size(), 3);
+
+ ints.enqueue(4);
+ EXPECT_EQ(ints.size(), 3);
+ EXPECT_EQ(ints.dequeue(), 2);
+ EXPECT_EQ(ints.dequeue(), 3);
+ EXPECT_EQ(ints.dequeue(), 4);
+ EXPECT_EQ(ints.size(), 0);
+}
+
+TEST_CASE(complex_type)
+{
+ CircularQueue<String, 2> strings;
+
+ strings.enqueue("ABC");
+ strings.enqueue("DEF");
+
+ EXPECT_EQ(strings.size(), 2);
+
+ strings.enqueue("abc");
+ strings.enqueue("def");
+
+ EXPECT_EQ(strings.dequeue(), "abc");
+ EXPECT_EQ(strings.dequeue(), "def");
+}
+
+TEST_CASE(complex_type_clear)
+{
+ CircularQueue<String, 5> strings;
+ strings.enqueue("xxx");
+ strings.enqueue("xxx");
+ strings.enqueue("xxx");
+ strings.enqueue("xxx");
+ strings.enqueue("xxx");
+ EXPECT_EQ(strings.size(), 5);
+ strings.clear();
+ EXPECT_EQ(strings.size(), 0);
+}
+
+TEST_MAIN(CircularQueue)