diff options
author | Andreas Kling <awesomekling@gmail.com> | 2019-10-23 12:20:45 +0200 |
---|---|---|
committer | Andreas Kling <awesomekling@gmail.com> | 2019-10-23 12:27:43 +0200 |
commit | 0cea80218df874bb3370f13c5e03ab22b230be1b (patch) | |
tree | a68dc12792b5c0f715170d9b256573d31d2ed71d /AK/Tests | |
parent | 0c4c4c48f277bf8ffc58f655ec937658f3f9b1de (diff) | |
download | serenity-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/Makefile | 6 | ||||
-rw-r--r-- | AK/Tests/TestCircularQueue.cpp | 51 |
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) |