diff options
-rw-r--r-- | src/core/utils/CharReader.cpp | 11 | ||||
-rw-r--r-- | src/core/utils/CharReader.hpp | 8 | ||||
-rw-r--r-- | test/core/utils/CharReaderTest.cpp | 25 |
3 files changed, 44 insertions, 0 deletions
diff --git a/src/core/utils/CharReader.cpp b/src/core/utils/CharReader.cpp index c661b6f..61616d7 100644 --- a/src/core/utils/CharReader.cpp +++ b/src/core/utils/CharReader.cpp @@ -17,6 +17,7 @@ */ #include <algorithm> +#include <cassert> #include <limits> #include <sstream> @@ -80,6 +81,16 @@ Buffer::Buffer(const std::string &str) startBucket = buckets.begin(); } +#ifndef NDEBUG +Buffer::~Buffer() +{ + // Make sure all cursors have been deleted + for (bool cursor_alive: alive) { + assert(!cursor_alive); + } +} +#endif + void Buffer::advance(BucketIterator &it) { it++; diff --git a/src/core/utils/CharReader.hpp b/src/core/utils/CharReader.hpp index 86f09db..1306026 100644 --- a/src/core/utils/CharReader.hpp +++ b/src/core/utils/CharReader.hpp @@ -242,6 +242,14 @@ public: */ Buffer(const std::string &str); +#ifndef NDEBUG + /** + * Destructor of the Buffer class. Makes sure that all cursors have been + * freed. + */ + ~Buffer(); +#endif + // No copy Buffer(const Buffer &) = delete; diff --git a/test/core/utils/CharReaderTest.cpp b/test/core/utils/CharReaderTest.cpp index d5c7aad..eb04a8e 100644 --- a/test/core/utils/CharReaderTest.cpp +++ b/test/core/utils/CharReaderTest.cpp @@ -95,6 +95,8 @@ TEST(Buffer, simpleRead) // The two strings must equal ASSERT_EQ(testStr, res); + + buf.deleteCursor(cursor); } TEST(Buffer, cursorManagement) @@ -112,6 +114,10 @@ TEST(Buffer, cursorManagement) buf.deleteCursor(c2); Buffer::CursorId c4 = buf.createCursor(); ASSERT_EQ(1U, c4); + + buf.deleteCursor(c1); + buf.deleteCursor(c3); + buf.deleteCursor(c4); } TEST(Buffer, twoCursors) @@ -152,6 +158,9 @@ TEST(Buffer, twoCursors) // The two strings must equal ASSERT_EQ(testStr, res1); ASSERT_EQ(testStr, res2); + + buf.deleteCursor(cur1); + buf.deleteCursor(cur2); } TEST(Buffer, copyCursors) @@ -203,6 +212,10 @@ TEST(Buffer, copyCursors) ASSERT_EQ("test3", res3); ASSERT_TRUE(buf.atEnd(cur3)); + + buf.deleteCursor(cur1); + buf.deleteCursor(cur2); + buf.deleteCursor(cur3); } TEST(Buffer, moveCursor) @@ -260,6 +273,8 @@ TEST(Buffer, moveCursor) } ASSERT_EQ("test3", res); } + + buf.deleteCursor(cursor); } struct VectorReadState { @@ -302,6 +317,8 @@ TEST(Buffer, simpleStream) // The read data and the original data must be equal ASSERT_EQ(DATA, res); + + buf.deleteCursor(cursor); } TEST(Buffer, streamTwoCursors) @@ -337,6 +354,9 @@ TEST(Buffer, streamTwoCursors) // The read data and the original data must be equal ASSERT_EQ(DATA, res1); ASSERT_EQ(DATA, res2); + + buf.deleteCursor(cur1); + buf.deleteCursor(cur2); } TEST(Buffer, streamTwoCursorsMovingInterleaved) @@ -386,6 +406,9 @@ TEST(Buffer, streamTwoCursorsMovingInterleaved) // The read data and the original data must be equal ASSERT_EQ(DATA, res1); ASSERT_EQ(DATA, res2); + + buf.deleteCursor(cur1); + buf.deleteCursor(cur2); } TEST(Buffer, streamMoveForward) @@ -407,6 +430,8 @@ TEST(Buffer, streamMoveForward) res.push_back(c); } ASSERT_EQ(partialData, res); + + buf.deleteCursor(cursor); } /* CharReader Test */ |