summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/Support
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/Support')
-rw-r--r--llvm/unittests/Support/BinaryStreamTest.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/llvm/unittests/Support/BinaryStreamTest.cpp b/llvm/unittests/Support/BinaryStreamTest.cpp
index fe574072a11..5291a31013c 100644
--- a/llvm/unittests/Support/BinaryStreamTest.cpp
+++ b/llvm/unittests/Support/BinaryStreamTest.cpp
@@ -610,6 +610,77 @@ TEST_F(BinaryStreamTest, StreamReaderEnum) {
}
}
+TEST_F(BinaryStreamTest, StreamReaderULEB128) {
+ std::vector<uint64_t> TestValues = {
+ 0, // Zero
+ 0x7F, // One byte
+ 0xFF, // One byte, all-ones
+ 0xAAAA, // Two bytes
+ 0xAAAAAAAA, // Four bytes
+ 0xAAAAAAAAAAAAAAAA, // Eight bytes
+ 0xffffffffffffffff // Eight bytess, all-ones
+ };
+
+ // Conservatively assume a 10-byte encoding for each of our LEB128s, with no
+ // alignment requirement.
+ initializeOutput(10 * TestValues.size(), 1);
+ initializeInputFromOutput(1);
+
+ for (auto &Stream : Streams) {
+ // Write fields.
+ BinaryStreamWriter Writer(*Stream.Output);
+ for (const auto &Value : TestValues)
+ ASSERT_THAT_ERROR(Writer.writeULEB128(Value), Succeeded());
+
+ // Read fields.
+ BinaryStreamReader Reader(*Stream.Input);
+ std::vector<uint64_t> Results;
+ Results.resize(TestValues.size());
+ for (unsigned I = 0; I != TestValues.size(); ++I)
+ ASSERT_THAT_ERROR(Reader.readULEB128(Results[I]), Succeeded());
+
+ for (unsigned I = 0; I != TestValues.size(); ++I)
+ EXPECT_EQ(TestValues[I], Results[I]);
+ }
+}
+
+TEST_F(BinaryStreamTest, StreamReaderSLEB128) {
+ std::vector<int64_t> TestValues = {
+ 0, // Zero
+ 0x7F, // One byte
+ -0x7F, // One byte, negative
+ 0xFF, // One byte, all-ones
+ 0xAAAA, // Two bytes
+ -0xAAAA, // Two bytes, negative
+ 0xAAAAAAAA, // Four bytes
+ -0xAAAAAAAA, // Four bytes, negative
+ 0x2AAAAAAAAAAAAAAA, // Eight bytes
+ -0x7ffffffffffffff // Eight bytess, negative
+ };
+
+ // Conservatively assume a 10-byte encoding for each of our LEB128s, with no
+ // alignment requirement.
+ initializeOutput(10 * TestValues.size(), 1);
+ initializeInputFromOutput(1);
+
+ for (auto &Stream : Streams) {
+ // Write fields.
+ BinaryStreamWriter Writer(*Stream.Output);
+ for (const auto &Value : TestValues)
+ ASSERT_THAT_ERROR(Writer.writeSLEB128(Value), Succeeded());
+
+ // Read fields.
+ BinaryStreamReader Reader(*Stream.Input);
+ std::vector<int64_t> Results;
+ Results.resize(TestValues.size());
+ for (unsigned I = 0; I != TestValues.size(); ++I)
+ ASSERT_THAT_ERROR(Reader.readSLEB128(Results[I]), Succeeded());
+
+ for (unsigned I = 0; I != TestValues.size(); ++I)
+ EXPECT_EQ(TestValues[I], Results[I]);
+ }
+}
+
TEST_F(BinaryStreamTest, StreamReaderObject) {
struct Foo {
int X;
OpenPOWER on IntegriCloud