summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2014-12-08 17:07:34 +0100
committerAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2014-12-08 17:07:34 +0100
commite90a7ced80c6a7dbcdc75bf60c65bcc23f727ca2 (patch)
treee0da8daf8af0fc45ced075a2b55126b0b24b4fec /test
parente7f97a4c8da44a696bb7e71b9dd54e8d271e24d0 (diff)
implemented and tested moveCursor function
Diffstat (limited to 'test')
-rw-r--r--test/core/utils/CharReaderTest.cpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/test/core/utils/CharReaderTest.cpp b/test/core/utils/CharReaderTest.cpp
index 260b135..1518928 100644
--- a/test/core/utils/CharReaderTest.cpp
+++ b/test/core/utils/CharReaderTest.cpp
@@ -168,6 +168,63 @@ TEST(Buffer, copyCursors)
ASSERT_TRUE(buf.atEnd(cur3));
}
+TEST(Buffer, moveCursor)
+{
+ std::string testStr{"test1 test2 test3"};
+
+ // Create buffer with the test string
+ char c;
+ Buffer buf{testStr};
+ Buffer::CursorId cursor = buf.createCursor();
+
+ // Read the first six characters with cursor one
+ {
+ std::string res;
+ for (int i = 0; i < 6; i++) {
+ if (buf.read(cursor, c)) {
+ res.append(&c, 1);
+ }
+ }
+ ASSERT_EQ("test1 ", res);
+ }
+
+ // Move six bytes backward
+ ASSERT_EQ(-6, buf.moveCursor(cursor, -6));
+ {
+ std::string res;
+ for (int i = 0; i < 6; i++) {
+ if (buf.read(cursor, c)) {
+ res.append(&c, 1);
+ }
+ }
+ ASSERT_EQ("test1 ", res);
+ }
+
+ // Move more than six bytes backward
+ ASSERT_EQ(-6, buf.moveCursor(cursor, -1000));
+ {
+ std::string res;
+ for (int i = 0; i < 6; i++) {
+ if (buf.read(cursor, c)) {
+ res.append(&c, 1);
+ }
+ }
+ ASSERT_EQ("test1 ", res);
+ }
+
+ // Move six bytes forward
+ ASSERT_EQ(6, buf.moveCursor(cursor, 6));
+ {
+ std::string res;
+ for (int i = 0; i < 6; i++) {
+ if (buf.read(cursor, c)) {
+ res.append(&c, 1);
+ }
+ }
+ ASSERT_EQ("test3", res);
+ }
+}
+
// Generates some pseudo-random data
// (inspired by "Numerical Recipes, Third Edition", Chapter 7.17)
static std::vector<char> generateData(size_t len)
@@ -294,6 +351,15 @@ TEST(Buffer, streamTwoCursorsInterleaved)
res2.push_back(c);
}
}
+
+ // Move cur2 120 bytes backward and read the content again
+ res2.resize(res2.size() - 120);
+ ASSERT_EQ(-120, buf.moveCursor(cur2, -120));
+ for (int i = 0; i < 120; i++) {
+ if (buf.read(cur2, c)) {
+ res2.push_back(c);
+ }
+ }
}
ASSERT_EQ(DATA_LENGTH, buf.offset(cur1));
@@ -304,6 +370,26 @@ TEST(Buffer, streamTwoCursorsInterleaved)
ASSERT_EQ(DATA, res2);
}
+TEST(Buffer, streamMoveForward)
+{
+ VectorReadState state(DATA);
+
+ std::vector<char> partialData;
+ partialData.resize(100);
+ std::copy(DATA.end() - partialData.size(), DATA.end(), partialData.begin());
+
+ Buffer buf{readFromVector, &state};
+ Buffer::CursorId cursor = buf.createCursor();
+ ASSERT_EQ(DATA_LENGTH - 100, buf.moveCursor(cursor, DATA_LENGTH - 100));
+
+ char c;
+ std::vector<char> res;
+ while (buf.read(cursor, c)) {
+ res.push_back(c);
+ }
+ ASSERT_EQ(partialData, res);
+}
+
}
}