Merge pull request #754 from hyperquantum/master

Fix defect in ByteVectorStream::seek when Position==End.
This commit is contained in:
Stephen F. Booth 2016-09-15 21:11:08 -04:00 committed by GitHub
commit bbeeca6fdb
2 changed files with 15 additions and 1 deletions

View File

@ -137,7 +137,7 @@ void ByteVectorStream::seek(long offset, Position p)
d->position += offset;
break;
case End:
d->position = length() - offset;
d->position = length() + offset; // offset is expected to be negative
break;
}
}

View File

@ -38,6 +38,7 @@ class TestByteVectorStream : public CppUnit::TestFixture
CPPUNIT_TEST(testReadBlock);
CPPUNIT_TEST(testRemoveBlock);
CPPUNIT_TEST(testInsert);
CPPUNIT_TEST(testSeekEnd);
CPPUNIT_TEST_SUITE_END();
public:
@ -112,6 +113,19 @@ public:
CPPUNIT_ASSERT_EQUAL(ByteVector("yyx123foa"), *stream.data());
}
void testSeekEnd()
{
ByteVector v("abcdefghijklmnopqrstuvwxyz");
ByteVectorStream stream(v);
CPPUNIT_ASSERT_EQUAL(26L, stream.length());
stream.seek(-4, IOStream::End);
CPPUNIT_ASSERT_EQUAL(ByteVector("w"), stream.readBlock(1));
stream.seek(-25, IOStream::End);
CPPUNIT_ASSERT_EQUAL(ByteVector("b"), stream.readBlock(1));
}
};
CPPUNIT_TEST_SUITE_REGISTRATION(TestByteVectorStream);