Explicitly test BitstreamReader::setArtificialByteLimit, NFC

Explicitly check that artificial byte limit is rounded correctly by
exposing BitstreamReader::Size through a new accessor, getSizeIfKnown.

The original code for rounding (from r264547) wasn't obviously correct,
and even though r264623 cleaned it up (by calling llvm::alignTo) I think
it's worth testing.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@264650 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan P. N. Exon Smith 2016-03-28 20:39:41 +00:00
parent 3828f99ca5
commit 75f9dc9b05
2 changed files with 10 additions and 1 deletions

View File

@ -373,6 +373,9 @@ public:
if (!Size || Size > Limit)
Size = Limit;
}
/// Return the Size, if known.
uint64_t getSizeIfKnown() const { return Size; }
};
/// When advancing through a bitstream cursor, each advance can discover a few

View File

@ -121,6 +121,7 @@ TEST(BitstreamReaderTest, setArtificialByteLimit) {
SimpleBitstreamCursor Cursor(Reader);
Cursor.setArtificialByteLimit(8);
EXPECT_EQ(8u, Cursor.getSizeIfKnown());
while (!Cursor.AtEndOfStream())
(void)Cursor.Read(1);
@ -134,6 +135,7 @@ TEST(BitstreamReaderTest, setArtificialByteLimitNotWordBoundary) {
SimpleBitstreamCursor Cursor(Reader);
Cursor.setArtificialByteLimit(5);
EXPECT_EQ(8u, Cursor.getSizeIfKnown());
while (!Cursor.AtEndOfStream())
(void)Cursor.Read(1);
@ -148,11 +150,13 @@ TEST(BitstreamReaderTest, setArtificialByteLimitPastTheEnd) {
// The size of the memory object isn't known yet. Set it too high and
// confirm that we don't read too far.
Cursor.setArtificialByteLimit(20);
Cursor.setArtificialByteLimit(24);
EXPECT_EQ(24u, Cursor.getSizeIfKnown());
while (!Cursor.AtEndOfStream())
(void)Cursor.Read(1);
EXPECT_EQ(12u, Cursor.getCurrentByteNo());
EXPECT_EQ(12u, Cursor.getSizeIfKnown());
}
TEST(BitstreamReaderTest, setArtificialByteLimitPastTheEndKnown) {
@ -165,9 +169,11 @@ TEST(BitstreamReaderTest, setArtificialByteLimitPastTheEndKnown) {
while (!Cursor.AtEndOfStream())
(void)Cursor.Read(1);
EXPECT_EQ(12u, Cursor.getCurrentByteNo());
EXPECT_EQ(12u, Cursor.getSizeIfKnown());
Cursor.setArtificialByteLimit(20);
EXPECT_TRUE(Cursor.AtEndOfStream());
EXPECT_EQ(12u, Cursor.getSizeIfKnown());
}
TEST(BitstreamReaderTest, readRecordWithBlobWhileStreaming) {