summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/utils/CharReader.cpp11
-rw-r--r--src/core/utils/CharReader.hpp8
-rw-r--r--test/core/utils/CharReaderTest.cpp25
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 */