diff options
| author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2016-03-27 22:45:25 +0000 |
|---|---|---|
| committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2016-03-27 22:45:25 +0000 |
| commit | d3be62ddf2eb1cfba957f1bbcea28eef9806479e (patch) | |
| tree | d96749dbb3d58e99d5f7575999683f374a14b8c9 /llvm/unittests/Bitcode/BitstreamReaderTest.cpp | |
| parent | d766d136ce53451946b121bfe166aeaa89b03f9e (diff) | |
| download | llvm-d3be62ddf2eb1cfba957f1bbcea28eef9806479e.zip llvm-d3be62ddf2eb1cfba957f1bbcea28eef9806479e.tar.gz llvm-d3be62ddf2eb1cfba957f1bbcea28eef9806479e.tar.bz2 | |
Bitcode: Add SimpleBitstreamCursor::getPointerToByte, etc.
Add API to SimpleBitstreamCursor to allow users to translate between
byte addresses and pointers.
- jumpToPointer: move the bit position to a particular pointer.
- getPointerToByte: get the pointer for a particular byte.
- getPointerToBit: get the pointer for the byte of the current bit.
- getCurrentByteNo: convenience function for assertions and tests.
Mainly adds unit tests (getPointerToBit/Byte already has a use), but
also preparation for eventually using jumpToPointer.
llvm-svn: 264546
Diffstat (limited to 'llvm/unittests/Bitcode/BitstreamReaderTest.cpp')
| -rw-r--r-- | llvm/unittests/Bitcode/BitstreamReaderTest.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/llvm/unittests/Bitcode/BitstreamReaderTest.cpp b/llvm/unittests/Bitcode/BitstreamReaderTest.cpp index b11d7fd..80285b8 100644 --- a/llvm/unittests/Bitcode/BitstreamReaderTest.cpp +++ b/llvm/unittests/Bitcode/BitstreamReaderTest.cpp @@ -53,4 +53,47 @@ TEST(BitstreamReaderTest, AtEndOfStreamEmpty) { EXPECT_TRUE(Cursor.AtEndOfStream()); } +TEST(BitstreamReaderTest, getCurrentByteNo) { + uint8_t Bytes[] = {0x00, 0x01, 0x02, 0x03}; + BitstreamReader Reader(std::begin(Bytes), std::end(Bytes)); + SimpleBitstreamCursor Cursor(Reader); + + for (unsigned I = 0, E = 33; I != E; ++I) { + EXPECT_EQ(I / 8, Cursor.getCurrentByteNo()); + (void)Cursor.Read(1); + } + EXPECT_EQ(4u, Cursor.getCurrentByteNo()); +} + +TEST(BitstreamReaderTest, getPointerToByte) { + uint8_t Bytes[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; + BitstreamReader Reader(std::begin(Bytes), std::end(Bytes)); + SimpleBitstreamCursor Cursor(Reader); + + for (unsigned I = 0, E = 8; I != E; ++I) { + EXPECT_EQ(Bytes + I, Cursor.getPointerToByte(I, 1)); + } +} + +TEST(BitstreamReaderTest, getPointerToBit) { + uint8_t Bytes[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; + BitstreamReader Reader(std::begin(Bytes), std::end(Bytes)); + SimpleBitstreamCursor Cursor(Reader); + + for (unsigned I = 0, E = 8; I != E; ++I) { + EXPECT_EQ(Bytes + I, Cursor.getPointerToBit(I * 8, 1)); + } +} + +TEST(BitstreamReaderTest, jumpToPointer) { + uint8_t Bytes[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; + BitstreamReader Reader(std::begin(Bytes), std::end(Bytes)); + SimpleBitstreamCursor Cursor(Reader); + + for (unsigned I : {0, 6, 2, 7}) { + Cursor.jumpToPointer(Bytes + I); + EXPECT_EQ(I, Cursor.getCurrentByteNo()); + } +} + } // end anonymous namespace |
