Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(328)

Side by Side Diff: unittests/Bitcode/NaClMungedBitcodeTest.cpp

Issue 1140153004: Clean up bitcode munging tests. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-llvm.git@master
Patch Set: Fix issues in patch set 2. Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « unittests/Bitcode/NaClMungeWriteErrorTests.cpp ('k') | unittests/Bitcode/NaClMungedIoTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===- llvm/unittest/Bitcode/NaClMungedBitcodeTest.cpp -------------------===// 1 //===- llvm/unittest/Bitcode/NaClMungedBitcodeTest.cpp -------------------===//
2 // Tests munging NaCl bitcode records. 2 // Tests munging NaCl bitcode records.
3 // 3 //
4 // The LLVM Compiler Infrastructure 4 // The LLVM Compiler Infrastructure
5 // 5 //
6 // This file is distributed under the University of Illinois Open Source 6 // This file is distributed under the University of Illinois Open Source
7 // License. See LICENSE.TXT for details. 7 // License. See LICENSE.TXT for details.
8 // 8 //
9 //===----------------------------------------------------------------------===// 9 //===----------------------------------------------------------------------===//
10 10
11 // Tests munging NaCl bitcode records. 11 // Tests munging NaCl bitcode records.
12 12
13 #include "llvm/ADT/STLExtras.h" 13 #include "NaClMungeTest.h"
14 #include "llvm/Bitcode/NaCl/NaClBitcodeMungeUtils.h"
15 14
16 #include "gtest/gtest.h"
17 #include <limits> 15 #include <limits>
18 16
19 using namespace llvm; 17 using namespace llvm;
20 18
21 namespace { 19 namespace naclmungetest {
22
23 static const uint64_t Terminator = 0x5768798008978675LL;
24
25 std::string stringify(NaClMungedBitcode &MungedBitcode) {
26 std::string Buffer;
27 raw_string_ostream StrBuf(Buffer);
28 MungedBitcode.print(StrBuf);
29 return StrBuf.str();
30 }
31
32 } // end of anonymous namespace
33
34 #define ARRAY_ARGS(name) name, array_lengthof(name), Terminator
35
36 namespace NaClMungedBc {
37 20
38 TEST(NaClMungedBitcodeTest, TestInsertBefore) { 21 TEST(NaClMungedBitcodeTest, TestInsertBefore) {
39 const uint64_t Records[] = { 22 const uint64_t Records[] = {
40 1, 2, 3, Terminator, 23 1, 2, 3, Terminator,
41 4, 5, Terminator, 24 4, 5, Terminator,
42 6, 7, 8 , 9, Terminator, 25 6, 7, 8 , 9, Terminator,
43 10, 11, Terminator 26 10, 11, Terminator
44 }; 27 };
45 NaClMungedBitcode MungedRecords(ARRAY_ARGS(Records)); 28 NaClMungedBitcode MungedRecords(ARRAY_TERM(Records));
46 EXPECT_EQ( 29 EXPECT_EQ(
47 " 1: [2, 3]\n" 30 " 1: [2, 3]\n"
48 " 4: [5]\n" 31 " 4: [5]\n"
49 " 6: [7, 8, 9]\n" 32 " 6: [7, 8, 9]\n"
50 " 10: [11]\n", 33 " 10: [11]\n",
51 stringify(MungedRecords)); 34 stringify(MungedRecords));
52 35
53 // Add a record before the second record. 36 // Add a record before the second record.
54 const uint64_t BeforeSecond[] = { 37 const uint64_t BeforeSecond[] = {
55 1, NaClMungedBitcode::AddBefore, 12, 13, 14, Terminator 38 1, NaClMungedBitcode::AddBefore, 12, 13, 14, Terminator
56 }; 39 };
57 MungedRecords.munge(ARRAY_ARGS(BeforeSecond)); 40 MungedRecords.munge(ARRAY_TERM(BeforeSecond));
58 EXPECT_EQ( 41 EXPECT_EQ(
59 " 1: [2, 3]\n" 42 " 1: [2, 3]\n"
60 " 12: [13, 14]\n" 43 " 12: [13, 14]\n"
61 " 4: [5]\n" 44 " 4: [5]\n"
62 " 6: [7, 8, 9]\n" 45 " 6: [7, 8, 9]\n"
63 " 10: [11]\n", 46 " 10: [11]\n",
64 stringify(MungedRecords)); 47 stringify(MungedRecords));
65 48
66 // Add two more records before the second record. 49 // Add two more records before the second record.
67 const uint64_t BeforeSecondMore[] = { 50 const uint64_t BeforeSecondMore[] = {
68 1, NaClMungedBitcode::AddBefore, 15, 16, 17, Terminator, 51 1, NaClMungedBitcode::AddBefore, 15, 16, 17, Terminator,
69 1, NaClMungedBitcode::AddBefore, 18, 19, Terminator 52 1, NaClMungedBitcode::AddBefore, 18, 19, Terminator
70 }; 53 };
71 MungedRecords.munge(ARRAY_ARGS(BeforeSecondMore)); 54 MungedRecords.munge(ARRAY_TERM(BeforeSecondMore));
72 EXPECT_EQ( 55 EXPECT_EQ(
73 " 1: [2, 3]\n" 56 " 1: [2, 3]\n"
74 " 12: [13, 14]\n" 57 " 12: [13, 14]\n"
75 " 15: [16, 17]\n" 58 " 15: [16, 17]\n"
76 " 18: [19]\n" 59 " 18: [19]\n"
77 " 4: [5]\n" 60 " 4: [5]\n"
78 " 6: [7, 8, 9]\n" 61 " 6: [7, 8, 9]\n"
79 " 10: [11]\n", 62 " 10: [11]\n",
80 stringify(MungedRecords)); 63 stringify(MungedRecords));
81 64
82 // Add two records before the last record. 65 // Add two records before the last record.
83 const uint64_t BeforeLast[] = { 66 const uint64_t BeforeLast[] = {
84 3, NaClMungedBitcode::AddBefore, 21, 22, 23, Terminator, 67 3, NaClMungedBitcode::AddBefore, 21, 22, 23, Terminator,
85 3, NaClMungedBitcode::AddBefore, 24, 25, 26, 27, Terminator 68 3, NaClMungedBitcode::AddBefore, 24, 25, 26, 27, Terminator
86 }; 69 };
87 MungedRecords.munge(ARRAY_ARGS(BeforeLast)); 70 MungedRecords.munge(ARRAY_TERM(BeforeLast));
88 EXPECT_EQ( 71 EXPECT_EQ(
89 " 1: [2, 3]\n" 72 " 1: [2, 3]\n"
90 " 12: [13, 14]\n" 73 " 12: [13, 14]\n"
91 " 15: [16, 17]\n" 74 " 15: [16, 17]\n"
92 " 18: [19]\n" 75 " 18: [19]\n"
93 " 4: [5]\n" 76 " 4: [5]\n"
94 " 6: [7, 8, 9]\n" 77 " 6: [7, 8, 9]\n"
95 " 21: [22, 23]\n" 78 " 21: [22, 23]\n"
96 " 24: [25, 26, 27]\n" 79 " 24: [25, 26, 27]\n"
97 " 10: [11]\n", 80 " 10: [11]\n",
98 stringify(MungedRecords)); 81 stringify(MungedRecords));
99 } 82 }
100 83
101 TEST(NaClMungedBitcodeTest, TestInsertAfter) { 84 TEST(NaClMungedBitcodeTest, TestInsertAfter) {
102 const uint64_t Records[] = { 85 const uint64_t Records[] = {
103 1, 2, 3, Terminator, 86 1, 2, 3, Terminator,
104 4, 5, Terminator, 87 4, 5, Terminator,
105 6, 7, 8 , 9, Terminator, 88 6, 7, 8 , 9, Terminator,
106 10, 11, Terminator 89 10, 11, Terminator
107 }; 90 };
108 NaClMungedBitcode MungedRecords(ARRAY_ARGS(Records)); 91 NaClMungedBitcode MungedRecords(ARRAY_TERM(Records));
109 EXPECT_EQ( 92 EXPECT_EQ(
110 " 1: [2, 3]\n" 93 " 1: [2, 3]\n"
111 " 4: [5]\n" 94 " 4: [5]\n"
112 " 6: [7, 8, 9]\n" 95 " 6: [7, 8, 9]\n"
113 " 10: [11]\n", 96 " 10: [11]\n",
114 stringify(MungedRecords)); 97 stringify(MungedRecords));
115 98
116 // Add a record after the second record. 99 // Add a record after the second record.
117 const uint64_t AfterSecond[] = { 100 const uint64_t AfterSecond[] = {
118 1, NaClMungedBitcode::AddAfter, 12, 13, 14, Terminator 101 1, NaClMungedBitcode::AddAfter, 12, 13, 14, Terminator
119 }; 102 };
120 MungedRecords.munge(ARRAY_ARGS(AfterSecond)); 103 MungedRecords.munge(ARRAY_TERM(AfterSecond));
121 EXPECT_EQ( 104 EXPECT_EQ(
122 " 1: [2, 3]\n" 105 " 1: [2, 3]\n"
123 " 4: [5]\n" 106 " 4: [5]\n"
124 " 12: [13, 14]\n" 107 " 12: [13, 14]\n"
125 " 6: [7, 8, 9]\n" 108 " 6: [7, 8, 9]\n"
126 " 10: [11]\n", 109 " 10: [11]\n",
127 stringify(MungedRecords)); 110 stringify(MungedRecords));
128 111
129 // Add two more records after the second record. 112 // Add two more records after the second record.
130 const uint64_t AfterSecondMore[] = { 113 const uint64_t AfterSecondMore[] = {
131 1, NaClMungedBitcode::AddAfter, 15, 16, 17, Terminator, 114 1, NaClMungedBitcode::AddAfter, 15, 16, 17, Terminator,
132 1, NaClMungedBitcode::AddAfter, 18, 19, Terminator 115 1, NaClMungedBitcode::AddAfter, 18, 19, Terminator
133 }; 116 };
134 MungedRecords.munge(ARRAY_ARGS(AfterSecondMore)); 117 MungedRecords.munge(ARRAY_TERM(AfterSecondMore));
135 EXPECT_EQ( 118 EXPECT_EQ(
136 " 1: [2, 3]\n" 119 " 1: [2, 3]\n"
137 " 4: [5]\n" 120 " 4: [5]\n"
138 " 12: [13, 14]\n" 121 " 12: [13, 14]\n"
139 " 15: [16, 17]\n" 122 " 15: [16, 17]\n"
140 " 18: [19]\n" 123 " 18: [19]\n"
141 " 6: [7, 8, 9]\n" 124 " 6: [7, 8, 9]\n"
142 " 10: [11]\n", 125 " 10: [11]\n",
143 stringify(MungedRecords)); 126 stringify(MungedRecords));
144 127
145 // Add two records after the last record. 128 // Add two records after the last record.
146 const uint64_t AfterLast[] = { 129 const uint64_t AfterLast[] = {
147 3, NaClMungedBitcode::AddAfter, 21, 22, 23, Terminator, 130 3, NaClMungedBitcode::AddAfter, 21, 22, 23, Terminator,
148 3, NaClMungedBitcode::AddAfter, 24, 25, 26, 27, Terminator 131 3, NaClMungedBitcode::AddAfter, 24, 25, 26, 27, Terminator
149 }; 132 };
150 MungedRecords.munge(ARRAY_ARGS(AfterLast)); 133 MungedRecords.munge(ARRAY_TERM(AfterLast));
151 EXPECT_EQ( 134 EXPECT_EQ(
152 " 1: [2, 3]\n" 135 " 1: [2, 3]\n"
153 " 4: [5]\n" 136 " 4: [5]\n"
154 " 12: [13, 14]\n" 137 " 12: [13, 14]\n"
155 " 15: [16, 17]\n" 138 " 15: [16, 17]\n"
156 " 18: [19]\n" 139 " 18: [19]\n"
157 " 6: [7, 8, 9]\n" 140 " 6: [7, 8, 9]\n"
158 " 10: [11]\n" 141 " 10: [11]\n"
159 " 21: [22, 23]\n" 142 " 21: [22, 23]\n"
160 " 24: [25, 26, 27]\n", 143 " 24: [25, 26, 27]\n",
161 stringify(MungedRecords)); 144 stringify(MungedRecords));
162 } 145 }
163 146
164 TEST(NaClMungedBitcodeTest, TestRemove) { 147 TEST(NaClMungedBitcodeTest, TestRemove) {
165 const uint64_t Records[] = { 148 const uint64_t Records[] = {
166 1, 2, 3, Terminator, 149 1, 2, 3, Terminator,
167 4, 5, Terminator, 150 4, 5, Terminator,
168 6, 7, 8 , 9, Terminator, 151 6, 7, 8 , 9, Terminator,
169 10, 11, Terminator 152 10, 11, Terminator
170 }; 153 };
171 NaClMungedBitcode MungedRecords(ARRAY_ARGS(Records)); 154 NaClMungedBitcode MungedRecords(ARRAY_TERM(Records));
172 EXPECT_EQ( 155 EXPECT_EQ(
173 " 1: [2, 3]\n" 156 " 1: [2, 3]\n"
174 " 4: [5]\n" 157 " 4: [5]\n"
175 " 6: [7, 8, 9]\n" 158 " 6: [7, 8, 9]\n"
176 " 10: [11]\n", 159 " 10: [11]\n",
177 stringify(MungedRecords)); 160 stringify(MungedRecords));
178 161
179 // Remove the second record. 162 // Remove the second record.
180 const uint64_t RemoveSecond[] = { 163 const uint64_t RemoveSecond[] = {
181 1, NaClMungedBitcode::Remove 164 1, NaClMungedBitcode::Remove
182 }; 165 };
183 MungedRecords.munge(ARRAY_ARGS(RemoveSecond)); 166 MungedRecords.munge(ARRAY_TERM(RemoveSecond));
184 EXPECT_EQ( 167 EXPECT_EQ(
185 " 1: [2, 3]\n" 168 " 1: [2, 3]\n"
186 " 6: [7, 8, 9]\n" 169 " 6: [7, 8, 9]\n"
187 " 10: [11]\n", 170 " 10: [11]\n",
188 stringify(MungedRecords)); 171 stringify(MungedRecords));
189 172
190 // Remove first and last records. 173 // Remove first and last records.
191 const uint64_t RemoveEnds[] = { 174 const uint64_t RemoveEnds[] = {
192 0, NaClMungedBitcode::Remove, 175 0, NaClMungedBitcode::Remove,
193 3, NaClMungedBitcode::Remove 176 3, NaClMungedBitcode::Remove
194 }; 177 };
195 MungedRecords.munge(ARRAY_ARGS(RemoveEnds)); 178 MungedRecords.munge(ARRAY_TERM(RemoveEnds));
196 EXPECT_EQ( 179 EXPECT_EQ(
197 " 6: [7, 8, 9]\n", 180 " 6: [7, 8, 9]\n",
198 stringify(MungedRecords)); 181 stringify(MungedRecords));
199 182
200 // Remove remaining record. 183 // Remove remaining record.
201 const uint64_t RemoveOther[] = { 184 const uint64_t RemoveOther[] = {
202 2, NaClMungedBitcode::Remove 185 2, NaClMungedBitcode::Remove
203 }; 186 };
204 MungedRecords.munge(ARRAY_ARGS(RemoveOther)); 187 MungedRecords.munge(ARRAY_TERM(RemoveOther));
205 EXPECT_EQ( 188 EXPECT_EQ(
206 "", 189 "",
207 stringify(MungedRecords)); 190 stringify(MungedRecords));
208 } 191 }
209 192
210 TEST(NaClMungedBitcodeTest, TestReplace) { 193 TEST(NaClMungedBitcodeTest, TestReplace) {
211 const uint64_t Records[] = { 194 const uint64_t Records[] = {
212 1, 2, 3, Terminator, 195 1, 2, 3, Terminator,
213 4, 5, Terminator, 196 4, 5, Terminator,
214 6, 7, 8 , 9, Terminator, 197 6, 7, 8 , 9, Terminator,
215 10, 11, Terminator 198 10, 11, Terminator
216 }; 199 };
217 NaClMungedBitcode MungedRecords(ARRAY_ARGS(Records)); 200 NaClMungedBitcode MungedRecords(ARRAY_TERM(Records));
218 EXPECT_EQ( 201 EXPECT_EQ(
219 " 1: [2, 3]\n" 202 " 1: [2, 3]\n"
220 " 4: [5]\n" 203 " 4: [5]\n"
221 " 6: [7, 8, 9]\n" 204 " 6: [7, 8, 9]\n"
222 " 10: [11]\n", 205 " 10: [11]\n",
223 stringify(MungedRecords)); 206 stringify(MungedRecords));
224 207
225 // Replace the second record. 208 // Replace the second record.
226 const uint64_t ReplaceSecond[] = { 209 const uint64_t ReplaceSecond[] = {
227 1, NaClMungedBitcode::Replace, 12, 13, 14, Terminator 210 1, NaClMungedBitcode::Replace, 12, 13, 14, Terminator
228 }; 211 };
229 MungedRecords.munge(ARRAY_ARGS(ReplaceSecond)); 212 MungedRecords.munge(ARRAY_TERM(ReplaceSecond));
230 EXPECT_EQ( 213 EXPECT_EQ(
231 " 1: [2, 3]\n" 214 " 1: [2, 3]\n"
232 " 12: [13, 14]\n" 215 " 12: [13, 14]\n"
233 " 6: [7, 8, 9]\n" 216 " 6: [7, 8, 9]\n"
234 " 10: [11]\n", 217 " 10: [11]\n",
235 stringify(MungedRecords)); 218 stringify(MungedRecords));
236 219
237 // Replace the first and last record. 220 // Replace the first and last record.
238 const uint64_t ReplaceEnds[] = { 221 const uint64_t ReplaceEnds[] = {
239 0, NaClMungedBitcode::Replace, 15, 16, 17, 18, Terminator, 222 0, NaClMungedBitcode::Replace, 15, 16, 17, 18, Terminator,
240 3, NaClMungedBitcode::Replace, 19, 20, Terminator 223 3, NaClMungedBitcode::Replace, 19, 20, Terminator
241 }; 224 };
242 MungedRecords.munge(ARRAY_ARGS(ReplaceEnds)); 225 MungedRecords.munge(ARRAY_TERM(ReplaceEnds));
243 EXPECT_EQ( 226 EXPECT_EQ(
244 " 15: [16, 17, 18]\n" 227 " 15: [16, 17, 18]\n"
245 " 12: [13, 14]\n" 228 " 12: [13, 14]\n"
246 " 6: [7, 8, 9]\n" 229 " 6: [7, 8, 9]\n"
247 " 19: [20]\n", 230 " 19: [20]\n",
248 stringify(MungedRecords)); 231 stringify(MungedRecords));
249 232
250 // Replace the first three records, which includes two already replaced 233 // Replace the first three records, which includes two already replaced
251 // records. 234 // records.
252 const uint64_t ReplaceFirst3[] = { 235 const uint64_t ReplaceFirst3[] = {
253 0, NaClMungedBitcode::Replace, 21, 22, 23, Terminator, 236 0, NaClMungedBitcode::Replace, 21, 22, 23, Terminator,
254 1, NaClMungedBitcode::Replace, 24, 25, Terminator, 237 1, NaClMungedBitcode::Replace, 24, 25, Terminator,
255 2, NaClMungedBitcode::Replace, 26, 27, 28, 29, Terminator 238 2, NaClMungedBitcode::Replace, 26, 27, 28, 29, Terminator
256 }; 239 };
257 MungedRecords.munge(ARRAY_ARGS(ReplaceFirst3)); 240 MungedRecords.munge(ARRAY_TERM(ReplaceFirst3));
258 EXPECT_EQ( 241 EXPECT_EQ(
259 " 21: [22, 23]\n" 242 " 21: [22, 23]\n"
260 " 24: [25]\n" 243 " 24: [25]\n"
261 " 26: [27, 28, 29]\n" 244 " 26: [27, 28, 29]\n"
262 " 19: [20]\n", 245 " 19: [20]\n",
263 stringify(MungedRecords)); 246 stringify(MungedRecords));
264 247
265 // Show that we can remove replaced records. 248 // Show that we can remove replaced records.
266 const uint64_t RemoveReplaced[] = { 249 const uint64_t RemoveReplaced[] = {
267 1, NaClMungedBitcode::Remove, 250 1, NaClMungedBitcode::Remove,
268 3, NaClMungedBitcode::Remove 251 3, NaClMungedBitcode::Remove
269 }; 252 };
270 MungedRecords.munge(ARRAY_ARGS(RemoveReplaced)); 253 MungedRecords.munge(ARRAY_TERM(RemoveReplaced));
271 EXPECT_EQ( 254 EXPECT_EQ(
272 " 21: [22, 23]\n" 255 " 21: [22, 23]\n"
273 " 26: [27, 28, 29]\n", 256 " 26: [27, 28, 29]\n",
274 stringify(MungedRecords)); 257 stringify(MungedRecords));
275 } 258 }
276 259
277 TEST(NaClMungedBitcodeTest, TestBlockStructure) { 260 TEST(NaClMungedBitcodeTest, TestBlockStructure) {
278 const uint64_t Records[] = { 261 const uint64_t Records[] = {
279 1, 2, 3, 4, Terminator, 262 1, 2, 3, 4, Terminator,
280 5, naclbitc::BLK_CODE_ENTER, 6, Terminator, 263 5, naclbitc::BLK_CODE_ENTER, 6, Terminator,
281 7, 8, Terminator, 264 7, 8, Terminator,
282 9, naclbitc::BLK_CODE_ENTER, 10, Terminator, 265 9, naclbitc::BLK_CODE_ENTER, 10, Terminator,
283 11, 12, 13, Terminator, 266 11, 12, 13, Terminator,
284 14, naclbitc::BLK_CODE_EXIT, Terminator, 267 14, naclbitc::BLK_CODE_EXIT, Terminator,
285 15, naclbitc::BLK_CODE_ENTER, 16, Terminator, 268 15, naclbitc::BLK_CODE_ENTER, 16, Terminator,
286 17, naclbitc::BLK_CODE_EXIT, 18, Terminator, 269 17, naclbitc::BLK_CODE_EXIT, 18, Terminator,
287 19, 20, 21, Terminator, 270 19, 20, 21, Terminator,
288 22, naclbitc::BLK_CODE_EXIT, Terminator 271 22, naclbitc::BLK_CODE_EXIT, Terminator
289 }; 272 };
290 NaClMungedBitcode MungedRecords(ARRAY_ARGS(Records)); 273 NaClMungedBitcode MungedRecords(ARRAY_TERM(Records));
291 EXPECT_EQ( 274 EXPECT_EQ(
292 " 1: [2, 3, 4]\n" 275 " 1: [2, 3, 4]\n"
293 " 5: [65535, 6]\n" 276 " 5: [65535, 6]\n"
294 " 7: [8]\n" 277 " 7: [8]\n"
295 " 9: [65535, 10]\n" 278 " 9: [65535, 10]\n"
296 " 11: [12, 13]\n" 279 " 11: [12, 13]\n"
297 " 14: [65534]\n" 280 " 14: [65534]\n"
298 " 15: [65535, 16]\n" 281 " 15: [65535, 16]\n"
299 " 17: [65534, 18]\n" 282 " 17: [65534, 18]\n"
300 " 19: [20, 21]\n" 283 " 19: [20, 21]\n"
301 " 22: [65534]\n", 284 " 22: [65534]\n",
302 stringify(MungedRecords)); 285 stringify(MungedRecords));
303 286
304 // Show what happens if you have unbalanced blocks. 287 // Show what happens if you have unbalanced blocks.
305 const uint64_t ExitEdits[] = { 288 const uint64_t ExitEdits[] = {
306 4, NaClMungedBitcode::AddAfter, 0, naclbitc::BLK_CODE_EXIT, Terminator, 289 4, NaClMungedBitcode::AddAfter, 0, naclbitc::BLK_CODE_EXIT, Terminator,
307 4, NaClMungedBitcode::AddAfter, 0, naclbitc::BLK_CODE_EXIT, Terminator, 290 4, NaClMungedBitcode::AddAfter, 0, naclbitc::BLK_CODE_EXIT, Terminator,
308 2, NaClMungedBitcode::Replace, 0, naclbitc::BLK_CODE_EXIT, Terminator 291 2, NaClMungedBitcode::Replace, 0, naclbitc::BLK_CODE_EXIT, Terminator
309 }; 292 };
310 MungedRecords.munge(ARRAY_ARGS(ExitEdits)); 293 MungedRecords.munge(ARRAY_TERM(ExitEdits));
311 EXPECT_EQ( 294 EXPECT_EQ(
312 " 1: [2, 3, 4]\n" 295 " 1: [2, 3, 4]\n"
313 " 5: [65535, 6]\n" 296 " 5: [65535, 6]\n"
314 " 0: [65534]\n" 297 " 0: [65534]\n"
315 " 9: [65535, 10]\n" 298 " 9: [65535, 10]\n"
316 " 11: [12, 13]\n" 299 " 11: [12, 13]\n"
317 " 0: [65534]\n" 300 " 0: [65534]\n"
318 " 0: [65534]\n" 301 " 0: [65534]\n"
319 " 14: [65534]\n" 302 " 14: [65534]\n"
320 " 15: [65535, 16]\n" 303 " 15: [65535, 16]\n"
321 " 17: [65534, 18]\n" 304 " 17: [65534, 18]\n"
322 " 19: [20, 21]\n" 305 " 19: [20, 21]\n"
323 " 22: [65534]\n", 306 " 22: [65534]\n",
324 stringify(MungedRecords)); 307 stringify(MungedRecords));
325 } 308 }
326 309
327 // Tests that replace/remove superceed other replace/removes at same 310 // Tests that replace/remove superceed other replace/removes at same
328 // record index. 311 // record index.
329 TEST(NaClMungedBitcodeTest, TestReplaceRemoveEffects) { 312 TEST(NaClMungedBitcodeTest, TestReplaceRemoveEffects) {
330 const uint64_t Records[] = { 313 const uint64_t Records[] = {
331 1, 2, 3, Terminator, 314 1, 2, 3, Terminator,
332 4, 5, Terminator, 315 4, 5, Terminator,
333 6, 7, 8 , 9, Terminator, 316 6, 7, 8 , 9, Terminator,
334 10, 11, Terminator 317 10, 11, Terminator
335 }; 318 };
336 NaClMungedBitcode MungedRecords(ARRAY_ARGS(Records)); 319 NaClMungedBitcode MungedRecords(ARRAY_TERM(Records));
337 EXPECT_EQ( 320 EXPECT_EQ(
338 " 1: [2, 3]\n" 321 " 1: [2, 3]\n"
339 " 4: [5]\n" 322 " 4: [5]\n"
340 " 6: [7, 8, 9]\n" 323 " 6: [7, 8, 9]\n"
341 " 10: [11]\n", 324 " 10: [11]\n",
342 stringify(MungedRecords)); 325 stringify(MungedRecords));
343 326
344 // Remove the second record. 327 // Remove the second record.
345 const uint64_t RemoveSecond[] = { 328 const uint64_t RemoveSecond[] = {
346 1, NaClMungedBitcode::Remove 329 1, NaClMungedBitcode::Remove
347 }; 330 };
348 MungedRecords.munge(ARRAY_ARGS(RemoveSecond)); 331 MungedRecords.munge(ARRAY_TERM(RemoveSecond));
349 EXPECT_EQ( 332 EXPECT_EQ(
350 " 1: [2, 3]\n" 333 " 1: [2, 3]\n"
351 " 6: [7, 8, 9]\n" 334 " 6: [7, 8, 9]\n"
352 " 10: [11]\n", 335 " 10: [11]\n",
353 stringify(MungedRecords)); 336 stringify(MungedRecords));
354 337
355 // Try it again. Should have no effect. 338 // Try it again. Should have no effect.
356 MungedRecords.munge(ARRAY_ARGS(RemoveSecond)); 339 MungedRecords.munge(ARRAY_TERM(RemoveSecond));
357 EXPECT_EQ( 340 EXPECT_EQ(
358 " 1: [2, 3]\n" 341 " 1: [2, 3]\n"
359 " 6: [7, 8, 9]\n" 342 " 6: [7, 8, 9]\n"
360 " 10: [11]\n", 343 " 10: [11]\n",
361 stringify(MungedRecords)); 344 stringify(MungedRecords));
362 345
363 // Override removed record with a replacement. 346 // Override removed record with a replacement.
364 const uint64_t ReplaceSecond[] = { 347 const uint64_t ReplaceSecond[] = {
365 1, NaClMungedBitcode::Replace, 12, 12, 14, 15, Terminator 348 1, NaClMungedBitcode::Replace, 12, 12, 14, 15, Terminator
366 }; 349 };
367 MungedRecords.munge(ARRAY_ARGS(ReplaceSecond)); 350 MungedRecords.munge(ARRAY_TERM(ReplaceSecond));
368 EXPECT_EQ( 351 EXPECT_EQ(
369 " 1: [2, 3]\n" 352 " 1: [2, 3]\n"
370 " 12: [12, 14, 15]\n" 353 " 12: [12, 14, 15]\n"
371 " 6: [7, 8, 9]\n" 354 " 6: [7, 8, 9]\n"
372 " 10: [11]\n", 355 " 10: [11]\n",
373 stringify(MungedRecords)); 356 stringify(MungedRecords));
374 357
375 // Override replacement with a different replacement. 358 // Override replacement with a different replacement.
376 const uint64_t ReplaceSecondAgain[] = { 359 const uint64_t ReplaceSecondAgain[] = {
377 1, NaClMungedBitcode::Replace, 16, 17, 18, Terminator 360 1, NaClMungedBitcode::Replace, 16, 17, 18, Terminator
378 }; 361 };
379 MungedRecords.munge(ARRAY_ARGS(ReplaceSecondAgain)); 362 MungedRecords.munge(ARRAY_TERM(ReplaceSecondAgain));
380 EXPECT_EQ( 363 EXPECT_EQ(
381 " 1: [2, 3]\n" 364 " 1: [2, 3]\n"
382 " 16: [17, 18]\n" 365 " 16: [17, 18]\n"
383 " 6: [7, 8, 9]\n" 366 " 6: [7, 8, 9]\n"
384 " 10: [11]\n", 367 " 10: [11]\n",
385 stringify(MungedRecords)); 368 stringify(MungedRecords));
386 369
387 // Override replacement with a remove. 370 // Override replacement with a remove.
388 MungedRecords.munge(ARRAY_ARGS(RemoveSecond)); 371 MungedRecords.munge(ARRAY_TERM(RemoveSecond));
389 EXPECT_EQ( 372 EXPECT_EQ(
390 " 1: [2, 3]\n" 373 " 1: [2, 3]\n"
391 " 6: [7, 8, 9]\n" 374 " 6: [7, 8, 9]\n"
392 " 10: [11]\n", 375 " 10: [11]\n",
393 stringify(MungedRecords)); 376 stringify(MungedRecords));
394 } 377 }
395 378
396 // Show how before/after interact between neighboring indices 379 // Show how before/after interact between neighboring indices
397 TEST(NaClMungedBitcodeTest, TestBeforeAfterInteraction) { 380 TEST(NaClMungedBitcodeTest, TestBeforeAfterInteraction) {
398 const uint64_t Records[] = { 381 const uint64_t Records[] = {
399 1, 2, 3, Terminator, 382 1, 2, 3, Terminator,
400 4, 5, Terminator, 383 4, 5, Terminator,
401 6, 7, 8 , 9, Terminator, 384 6, 7, 8 , 9, Terminator,
402 10, 11, Terminator 385 10, 11, Terminator
403 }; 386 };
404 NaClMungedBitcode MungedRecords(ARRAY_ARGS(Records)); 387 NaClMungedBitcode MungedRecords(ARRAY_TERM(Records));
405 EXPECT_EQ( 388 EXPECT_EQ(
406 " 1: [2, 3]\n" 389 " 1: [2, 3]\n"
407 " 4: [5]\n" 390 " 4: [5]\n"
408 " 6: [7, 8, 9]\n" 391 " 6: [7, 8, 9]\n"
409 " 10: [11]\n", 392 " 10: [11]\n",
410 stringify(MungedRecords)); 393 stringify(MungedRecords));
411 394
412 // Add record before the third record. 395 // Add record before the third record.
413 const uint64_t AddBeforeThird[] = { 396 const uint64_t AddBeforeThird[] = {
414 2, NaClMungedBitcode::AddBefore, 12, 13, 14, Terminator 397 2, NaClMungedBitcode::AddBefore, 12, 13, 14, Terminator
415 }; 398 };
416 MungedRecords.munge(ARRAY_ARGS(AddBeforeThird)); 399 MungedRecords.munge(ARRAY_TERM(AddBeforeThird));
417 EXPECT_EQ( 400 EXPECT_EQ(
418 " 1: [2, 3]\n" 401 " 1: [2, 3]\n"
419 " 4: [5]\n" 402 " 4: [5]\n"
420 " 12: [13, 14]\n" 403 " 12: [13, 14]\n"
421 " 6: [7, 8, 9]\n" 404 " 6: [7, 8, 9]\n"
422 " 10: [11]\n", 405 " 10: [11]\n",
423 stringify(MungedRecords)); 406 stringify(MungedRecords));
424 407
425 // Add record after the second record. 408 // Add record after the second record.
426 const uint64_t AddAfterSecond[] = { 409 const uint64_t AddAfterSecond[] = {
427 1, NaClMungedBitcode::AddAfter, 15, 16, 17, 18, Terminator 410 1, NaClMungedBitcode::AddAfter, 15, 16, 17, 18, Terminator
428 }; 411 };
429 MungedRecords.munge(ARRAY_ARGS(AddAfterSecond)); 412 MungedRecords.munge(ARRAY_TERM(AddAfterSecond));
430 EXPECT_EQ( 413 EXPECT_EQ(
431 " 1: [2, 3]\n" 414 " 1: [2, 3]\n"
432 " 4: [5]\n" 415 " 4: [5]\n"
433 " 15: [16, 17, 18]\n" 416 " 15: [16, 17, 18]\n"
434 " 12: [13, 14]\n" 417 " 12: [13, 14]\n"
435 " 6: [7, 8, 9]\n" 418 " 6: [7, 8, 9]\n"
436 " 10: [11]\n", 419 " 10: [11]\n",
437 stringify(MungedRecords)); 420 stringify(MungedRecords));
438 421
439 // Add more records before the third record. 422 // Add more records before the third record.
440 const uint64_t AddBeforeThirdMore[] = { 423 const uint64_t AddBeforeThirdMore[] = {
441 2, NaClMungedBitcode::AddBefore, 19, 20, Terminator, 424 2, NaClMungedBitcode::AddBefore, 19, 20, Terminator,
442 2, NaClMungedBitcode::AddBefore, 21, 22, Terminator 425 2, NaClMungedBitcode::AddBefore, 21, 22, Terminator
443 }; 426 };
444 MungedRecords.munge(ARRAY_ARGS(AddBeforeThirdMore)); 427 MungedRecords.munge(ARRAY_TERM(AddBeforeThirdMore));
445 EXPECT_EQ( 428 EXPECT_EQ(
446 " 1: [2, 3]\n" 429 " 1: [2, 3]\n"
447 " 4: [5]\n" 430 " 4: [5]\n"
448 " 15: [16, 17, 18]\n" 431 " 15: [16, 17, 18]\n"
449 " 12: [13, 14]\n" 432 " 12: [13, 14]\n"
450 " 19: [20]\n" 433 " 19: [20]\n"
451 " 21: [22]\n" 434 " 21: [22]\n"
452 " 6: [7, 8, 9]\n" 435 " 6: [7, 8, 9]\n"
453 " 10: [11]\n", 436 " 10: [11]\n",
454 stringify(MungedRecords)); 437 stringify(MungedRecords));
455 438
456 // Add more records after the second record. 439 // Add more records after the second record.
457 const uint64_t AddAfterSecondMore[] = { 440 const uint64_t AddAfterSecondMore[] = {
458 1, NaClMungedBitcode::AddAfter, 23, 24, 25, Terminator, 441 1, NaClMungedBitcode::AddAfter, 23, 24, 25, Terminator,
459 1, NaClMungedBitcode::AddAfter, 26, 27, 28, 29, Terminator 442 1, NaClMungedBitcode::AddAfter, 26, 27, 28, 29, Terminator
460 }; 443 };
461 MungedRecords.munge(ARRAY_ARGS(AddAfterSecondMore)); 444 MungedRecords.munge(ARRAY_TERM(AddAfterSecondMore));
462 EXPECT_EQ( 445 EXPECT_EQ(
463 " 1: [2, 3]\n" 446 " 1: [2, 3]\n"
464 " 4: [5]\n" 447 " 4: [5]\n"
465 " 15: [16, 17, 18]\n" 448 " 15: [16, 17, 18]\n"
466 " 23: [24, 25]\n" 449 " 23: [24, 25]\n"
467 " 26: [27, 28, 29]\n" 450 " 26: [27, 28, 29]\n"
468 " 12: [13, 14]\n" 451 " 12: [13, 14]\n"
469 " 19: [20]\n" 452 " 19: [20]\n"
470 " 21: [22]\n" 453 " 21: [22]\n"
471 " 6: [7, 8, 9]\n" 454 " 6: [7, 8, 9]\n"
472 " 10: [11]\n", 455 " 10: [11]\n",
473 stringify(MungedRecords)); 456 stringify(MungedRecords));
474 } 457 }
475 458
476 // Do a sample combination of all possible edits. 459 // Do a sample combination of all possible edits.
477 TEST(NaClMungedBitcodeTest, CombinationEdits) { 460 TEST(NaClMungedBitcodeTest, CombinationEdits) {
478 const uint64_t Records[] = { 461 const uint64_t Records[] = {
479 1, 2, 3, Terminator, 462 1, 2, 3, Terminator,
480 4, 5, Terminator, 463 4, 5, Terminator,
481 6, 7, 8 , 9, Terminator, 464 6, 7, 8 , 9, Terminator,
482 10, 11, Terminator 465 10, 11, Terminator
483 }; 466 };
484 467
485 NaClMungedBitcode MungedRecords(ARRAY_ARGS(Records)); 468 NaClMungedBitcode MungedRecords(ARRAY_TERM(Records));
486 EXPECT_EQ( 469 EXPECT_EQ(
487 " 1: [2, 3]\n" 470 " 1: [2, 3]\n"
488 " 4: [5]\n" 471 " 4: [5]\n"
489 " 6: [7, 8, 9]\n" 472 " 6: [7, 8, 9]\n"
490 " 10: [11]\n", 473 " 10: [11]\n",
491 stringify(MungedRecords)); 474 stringify(MungedRecords));
492 475
493 // Remove First 476 // Remove First
494 const uint64_t RemoveFirst[] = { 477 const uint64_t RemoveFirst[] = {
495 0, NaClMungedBitcode::Remove 478 0, NaClMungedBitcode::Remove
496 }; 479 };
497 MungedRecords.munge(ARRAY_ARGS(RemoveFirst)); 480 MungedRecords.munge(ARRAY_TERM(RemoveFirst));
498 EXPECT_EQ( 481 EXPECT_EQ(
499 " 4: [5]\n" 482 " 4: [5]\n"
500 " 6: [7, 8, 9]\n" 483 " 6: [7, 8, 9]\n"
501 " 10: [11]\n", 484 " 10: [11]\n",
502 stringify(MungedRecords)); 485 stringify(MungedRecords));
503 486
504 // Add records after the first (base) record, which corresponds to 487 // Add records after the first (base) record, which corresponds to
505 // before the first record in the munged result. 488 // before the first record in the munged result.
506 const uint64_t AddAfterFirst[] = { 489 const uint64_t AddAfterFirst[] = {
507 0, NaClMungedBitcode::AddAfter, 12, 13, 14, Terminator, 490 0, NaClMungedBitcode::AddAfter, 12, 13, 14, Terminator,
508 0, NaClMungedBitcode::AddAfter, 15, 16, Terminator 491 0, NaClMungedBitcode::AddAfter, 15, 16, Terminator
509 }; 492 };
510 MungedRecords.munge(ARRAY_ARGS(AddAfterFirst)); 493 MungedRecords.munge(ARRAY_TERM(AddAfterFirst));
511 EXPECT_EQ( 494 EXPECT_EQ(
512 " 12: [13, 14]\n" 495 " 12: [13, 14]\n"
513 " 15: [16]\n" 496 " 15: [16]\n"
514 " 4: [5]\n" 497 " 4: [5]\n"
515 " 6: [7, 8, 9]\n" 498 " 6: [7, 8, 9]\n"
516 " 10: [11]\n", 499 " 10: [11]\n",
517 stringify(MungedRecords)); 500 stringify(MungedRecords));
518 501
519 // Add records before the second (base) record, which corresponds to 502 // Add records before the second (base) record, which corresponds to
520 // before the third record in the munged result. 503 // before the third record in the munged result.
521 const uint64_t AddBeforeSecond[] = { 504 const uint64_t AddBeforeSecond[] = {
522 1, NaClMungedBitcode::AddBefore, 17, 18, 19, 20, Terminator, 505 1, NaClMungedBitcode::AddBefore, 17, 18, 19, 20, Terminator,
523 1, NaClMungedBitcode::AddBefore, 21, 22, 23, Terminator 506 1, NaClMungedBitcode::AddBefore, 21, 22, 23, Terminator
524 }; 507 };
525 MungedRecords.munge(ARRAY_ARGS(AddBeforeSecond)); 508 MungedRecords.munge(ARRAY_TERM(AddBeforeSecond));
526 EXPECT_EQ( 509 EXPECT_EQ(
527 " 12: [13, 14]\n" 510 " 12: [13, 14]\n"
528 " 15: [16]\n" 511 " 15: [16]\n"
529 " 17: [18, 19, 20]\n" 512 " 17: [18, 19, 20]\n"
530 " 21: [22, 23]\n" 513 " 21: [22, 23]\n"
531 " 4: [5]\n" 514 " 4: [5]\n"
532 " 6: [7, 8, 9]\n" 515 " 6: [7, 8, 9]\n"
533 " 10: [11]\n", 516 " 10: [11]\n",
534 stringify(MungedRecords)); 517 stringify(MungedRecords));
535 518
536 // Put the first (base) record back, which will also be the first 519 // Put the first (base) record back, which will also be the first
537 // record in the munged result. 520 // record in the munged result.
538 const uint64_t ReplaceFirst[] = { 521 const uint64_t ReplaceFirst[] = {
539 0, NaClMungedBitcode::Replace, 1, 2, 3, Terminator 522 0, NaClMungedBitcode::Replace, 1, 2, 3, Terminator
540 }; 523 };
541 MungedRecords.munge(ARRAY_ARGS(ReplaceFirst)); 524 MungedRecords.munge(ARRAY_TERM(ReplaceFirst));
542 EXPECT_EQ( 525 EXPECT_EQ(
543 " 1: [2, 3]\n" 526 " 1: [2, 3]\n"
544 " 12: [13, 14]\n" 527 " 12: [13, 14]\n"
545 " 15: [16]\n" 528 " 15: [16]\n"
546 " 17: [18, 19, 20]\n" 529 " 17: [18, 19, 20]\n"
547 " 21: [22, 23]\n" 530 " 21: [22, 23]\n"
548 " 4: [5]\n" 531 " 4: [5]\n"
549 " 6: [7, 8, 9]\n" 532 " 6: [7, 8, 9]\n"
550 " 10: [11]\n", 533 " 10: [11]\n",
551 stringify(MungedRecords)); 534 stringify(MungedRecords));
552 535
553 // Add before the first (base) record, which will also be before all 536 // Add before the first (base) record, which will also be before all
554 // other records in the munged result. 537 // other records in the munged result.
555 const uint64_t AddBeforeFirst[] = { 538 const uint64_t AddBeforeFirst[] = {
556 0, NaClMungedBitcode::AddBefore, 24, 25, 26, 27, Terminator, 539 0, NaClMungedBitcode::AddBefore, 24, 25, 26, 27, Terminator,
557 0, NaClMungedBitcode::AddBefore, 28, 29, Terminator, 540 0, NaClMungedBitcode::AddBefore, 28, 29, Terminator,
558 0, NaClMungedBitcode::AddBefore, 30, 31, 32, Terminator 541 0, NaClMungedBitcode::AddBefore, 30, 31, 32, Terminator
559 }; 542 };
560 MungedRecords.munge(ARRAY_ARGS(AddBeforeFirst)); 543 MungedRecords.munge(ARRAY_TERM(AddBeforeFirst));
561 EXPECT_EQ( 544 EXPECT_EQ(
562 " 24: [25, 26, 27]\n" 545 " 24: [25, 26, 27]\n"
563 " 28: [29]\n" 546 " 28: [29]\n"
564 " 30: [31, 32]\n" 547 " 30: [31, 32]\n"
565 " 1: [2, 3]\n" 548 " 1: [2, 3]\n"
566 " 12: [13, 14]\n" 549 " 12: [13, 14]\n"
567 " 15: [16]\n" 550 " 15: [16]\n"
568 " 17: [18, 19, 20]\n" 551 " 17: [18, 19, 20]\n"
569 " 21: [22, 23]\n" 552 " 21: [22, 23]\n"
570 " 4: [5]\n" 553 " 4: [5]\n"
571 " 6: [7, 8, 9]\n" 554 " 6: [7, 8, 9]\n"
572 " 10: [11]\n", 555 " 10: [11]\n",
573 stringify(MungedRecords)); 556 stringify(MungedRecords));
574 } 557 }
575 558
576 } // end of namespace NaClMungedBc 559 } // end of namespace naclmungetest
OLDNEW
« no previous file with comments | « unittests/Bitcode/NaClMungeWriteErrorTests.cpp ('k') | unittests/Bitcode/NaClMungedIoTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698