MemoryBufferTest.cpp revision 2d6d585c85ce8c56461f17b7b49fff24eed7b8fb
1//===- llvm/unittest/Support/MemoryBufferTest.cpp - MemoryBuffer tests ----===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file implements unit tests for the MemoryBuffer support class. 11// 12//===----------------------------------------------------------------------===// 13 14#include "llvm/Support/MemoryBuffer.h" 15#include "llvm/ADT/OwningPtr.h" 16 17#include "gtest/gtest.h" 18 19using namespace llvm; 20 21class MemoryBufferTest : public testing::Test { 22protected: 23 MemoryBufferTest() 24 : data("this is some data") 25 { } 26 27 virtual void SetUp() { } 28 29 typedef OwningPtr<MemoryBuffer> OwningBuffer; 30 31 std::string data; 32}; 33 34namespace { 35 36TEST_F(MemoryBufferTest, get) { 37 // Default name and null-terminator flag 38 OwningBuffer MB1(MemoryBuffer::getMemBuffer(data)); 39 EXPECT_TRUE(0 != MB1.get()); 40 41 // RequiresNullTerminator = false 42 OwningBuffer MB2(MemoryBuffer::getMemBuffer(data, "one", false)); 43 EXPECT_TRUE(0 != MB2.get()); 44 45 // RequiresNullTerminator = true 46 OwningBuffer MB3(MemoryBuffer::getMemBuffer(data, "two", true)); 47 EXPECT_TRUE(0 != MB3.get()); 48 49 // verify all 3 buffers point to the same address 50 EXPECT_EQ(MB1->getBufferStart(), MB2->getBufferStart()); 51 EXPECT_EQ(MB2->getBufferStart(), MB3->getBufferStart()); 52 53 // verify the original data is unmodified after deleting the buffers 54 MB1.reset(); 55 MB2.reset(); 56 MB3.reset(); 57 EXPECT_EQ("this is some data", data); 58} 59 60TEST_F(MemoryBufferTest, copy) { 61 // copy with no name 62 OwningBuffer MBC1(MemoryBuffer::getMemBufferCopy(data)); 63 EXPECT_TRUE(0 != MBC1.get()); 64 65 // copy with a name 66 OwningBuffer MBC2(MemoryBuffer::getMemBufferCopy(data, "copy")); 67 EXPECT_TRUE(0 != MBC2.get()); 68 69 // verify the two copies do not point to the same place 70 EXPECT_NE(MBC1->getBufferStart(), MBC2->getBufferStart()); 71} 72 73TEST_F(MemoryBufferTest, make_new) { 74 // 0-sized buffer 75 OwningBuffer Zero(MemoryBuffer::getNewUninitMemBuffer(0)); 76 EXPECT_TRUE(0 != Zero.get()); 77 78 // uninitialized buffer with no name 79 OwningBuffer One(MemoryBuffer::getNewUninitMemBuffer(321)); 80 EXPECT_TRUE(0 != One.get()); 81 82 // uninitialized buffer with name 83 OwningBuffer Two(MemoryBuffer::getNewUninitMemBuffer(123, "bla")); 84 EXPECT_TRUE(0 != Two.get()); 85 86 // 0-initialized buffer with no name 87 OwningBuffer Three(MemoryBuffer::getNewMemBuffer(321, data)); 88 EXPECT_TRUE(0 != Three.get()); 89 for (size_t i = 0; i < 321; ++i) 90 EXPECT_EQ(0, Three->getBufferStart()[0]); 91 92 // 0-initialized buffer with name 93 OwningBuffer Four(MemoryBuffer::getNewMemBuffer(123, "zeros")); 94 EXPECT_TRUE(0 != Four.get()); 95 for (size_t i = 0; i < 123; ++i) 96 EXPECT_EQ(0, Four->getBufferStart()[0]); 97} 98 99} 100