blob: 6c78cd80e8b5072dddb3621e42aea8c87333672b [file] [log] [blame]
Andrew Kaylor2d6d5852012-10-04 20:29:44 +00001//===- 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}