| OLD | NEW |
| 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 |
| OLD | NEW |