| OLD | NEW |
| 1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2009 the V8 project authors. All rights reserved. |
| 2 // | 2 // |
| 3 // Tests of logging utilities from log-utils.h | 3 // Tests of logging utilities from log-utils.h |
| 4 | 4 |
| 5 #ifdef ENABLE_LOGGING_AND_PROFILING | 5 #ifdef ENABLE_LOGGING_AND_PROFILING |
| 6 | 6 |
| 7 #include "v8.h" | 7 #include "v8.h" |
| 8 | 8 |
| 9 #include "log-utils.h" | 9 #include "log-utils.h" |
| 10 #include "cctest.h" | 10 #include "cctest.h" |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 // Check the seal. | 132 // Check the seal. |
| 133 EmbeddedVector<char, 50> seal_buf; | 133 EmbeddedVector<char, 50> seal_buf; |
| 134 CHECK_EQ(seal_size, ReadData(&dynabuf, 100, &seal_buf)); | 134 CHECK_EQ(seal_size, ReadData(&dynabuf, 100, &seal_buf)); |
| 135 CHECK_EQ(CStrVector(seal), seal_buf.SubVector(0, seal_size)); | 135 CHECK_EQ(CStrVector(seal), seal_buf.SubVector(0, seal_size)); |
| 136 // Verify that there's no data beyond the seal. | 136 // Verify that there's no data beyond the seal. |
| 137 CHECK_EQ(0, ReadData(&dynabuf, 100 + seal_size, &buf)); | 137 CHECK_EQ(0, ReadData(&dynabuf, 100 + seal_size, &buf)); |
| 138 } | 138 } |
| 139 | 139 |
| 140 | 140 |
| 141 TEST(CompressorStore) { | 141 TEST(CompressorStore) { |
| 142 LogRecordCompressor comp(2, 0); | 142 LogRecordCompressor comp(2); |
| 143 const Vector<const char> empty = CStrVector(""); | 143 const Vector<const char> empty = CStrVector(""); |
| 144 CHECK(comp.Store(empty)); | 144 CHECK(comp.Store(empty)); |
| 145 CHECK(!comp.Store(empty)); | 145 CHECK(!comp.Store(empty)); |
| 146 CHECK(!comp.Store(empty)); | 146 CHECK(!comp.Store(empty)); |
| 147 const Vector<const char> aaa = CStrVector("aaa"); | 147 const Vector<const char> aaa = CStrVector("aaa"); |
| 148 CHECK(comp.Store(aaa)); | 148 CHECK(comp.Store(aaa)); |
| 149 CHECK(!comp.Store(aaa)); | 149 CHECK(!comp.Store(aaa)); |
| 150 CHECK(!comp.Store(aaa)); | 150 CHECK(!comp.Store(aaa)); |
| 151 CHECK(comp.Store(empty)); | 151 CHECK(comp.Store(empty)); |
| 152 CHECK(!comp.Store(empty)); | 152 CHECK(!comp.Store(empty)); |
| 153 CHECK(!comp.Store(empty)); | 153 CHECK(!comp.Store(empty)); |
| 154 } | 154 } |
| 155 | 155 |
| 156 | 156 |
| 157 void CheckCompression(LogRecordCompressor* comp, | 157 void CheckCompression(LogRecordCompressor* comp, |
| 158 const Vector<const char>& after) { | 158 const Vector<const char>& after) { |
| 159 EmbeddedVector<char, 100> result; | 159 EmbeddedVector<char, 100> result; |
| 160 CHECK(comp->RetrievePreviousCompressed(&result)); | 160 CHECK(comp->RetrievePreviousCompressed(&result)); |
| 161 CHECK_EQ(after, result); | 161 CHECK_EQ(after, result); |
| 162 } | 162 } |
| 163 | 163 |
| 164 | 164 |
| 165 void CheckCompression(LogRecordCompressor* comp, | 165 void CheckCompression(LogRecordCompressor* comp, |
| 166 const char* after) { | 166 const char* after) { |
| 167 CheckCompression(comp, CStrVector(after)); | 167 CheckCompression(comp, CStrVector(after)); |
| 168 } | 168 } |
| 169 | 169 |
| 170 | 170 |
| 171 TEST(CompressorNonCompressed) { | 171 TEST(CompressorNonCompressed) { |
| 172 LogRecordCompressor comp(2, 0); | 172 LogRecordCompressor comp(0); |
| 173 CHECK(!comp.RetrievePreviousCompressed(NULL)); | 173 CHECK(!comp.RetrievePreviousCompressed(NULL)); |
| 174 const Vector<const char> empty = CStrVector(""); | 174 const Vector<const char> empty = CStrVector(""); |
| 175 CHECK(comp.Store(empty)); | 175 CHECK(comp.Store(empty)); |
| 176 CHECK(!comp.RetrievePreviousCompressed(NULL)); | 176 CHECK(!comp.RetrievePreviousCompressed(NULL)); |
| 177 const Vector<const char> a_x_20 = CStrVector("aaaaaaaaaaaaaaaaaaaa"); | 177 const Vector<const char> a_x_20 = CStrVector("aaaaaaaaaaaaaaaaaaaa"); |
| 178 CHECK(comp.Store(a_x_20)); | 178 CHECK(comp.Store(a_x_20)); |
| 179 CheckCompression(&comp, empty); | 179 CheckCompression(&comp, empty); |
| 180 CheckCompression(&comp, empty); | 180 CheckCompression(&comp, empty); |
| 181 CHECK(comp.Store(empty)); | 181 CHECK(comp.Store(empty)); |
| 182 CheckCompression(&comp, a_x_20); | 182 CheckCompression(&comp, a_x_20); |
| 183 CheckCompression(&comp, a_x_20); | 183 CheckCompression(&comp, a_x_20); |
| 184 } | 184 } |
| 185 | 185 |
| 186 | 186 |
| 187 TEST(CompressorSingleLine) { | 187 TEST(CompressorSingleLine) { |
| 188 LogRecordCompressor comp(3, strlen("xxx,")); | 188 LogRecordCompressor comp(1); |
| 189 const Vector<const char> string_1 = CStrVector("eee,ddd,ccc,bbb,aaa"); | 189 const Vector<const char> string_1 = CStrVector("eee,ddd,ccc,bbb,aaa"); |
| 190 CHECK(comp.Store(string_1)); | 190 CHECK(comp.Store(string_1)); |
| 191 const Vector<const char> string_2 = CStrVector("fff,ddd,ccc,bbb,aaa"); | 191 const Vector<const char> string_2 = CStrVector("fff,ddd,ccc,bbb,aaa"); |
| 192 CHECK(comp.Store(string_2)); | 192 CHECK(comp.Store(string_2)); |
| 193 // string_1 hasn't been compressed. | 193 // string_1 hasn't been compressed. |
| 194 CheckCompression(&comp, string_1); | 194 CheckCompression(&comp, string_1); |
| 195 CheckCompression(&comp, string_1); | 195 CheckCompression(&comp, string_1); |
| 196 const Vector<const char> string_3 = CStrVector("hhh,ggg,ccc,bbb,aaa"); | 196 const Vector<const char> string_3 = CStrVector("hhh,ggg,ccc,bbb,aaa"); |
| 197 CHECK(comp.Store(string_3)); | 197 CHECK(comp.Store(string_3)); |
| 198 // string_2 compressed using string_1. | 198 // string_2 compressed using string_1. |
| 199 CheckCompression(&comp, "fff,#1:4"); | 199 CheckCompression(&comp, "fff#1:3"); |
| 200 CheckCompression(&comp, "fff,#1:4"); | 200 CheckCompression(&comp, "fff#1:3"); |
| 201 CHECK(!comp.Store(string_3)); | 201 CHECK(!comp.Store(string_3)); |
| 202 // Expecting no changes. | 202 // Expecting no changes. |
| 203 CheckCompression(&comp, "fff,#1:4"); | 203 CheckCompression(&comp, "fff#1:3"); |
| 204 CHECK(!comp.Store(string_3)); | 204 CHECK(!comp.Store(string_3)); |
| 205 // Expecting no changes. | 205 // Expecting no changes. |
| 206 CheckCompression(&comp, "fff,#1:4"); | 206 CheckCompression(&comp, "fff#1:3"); |
| 207 const Vector<const char> string_4 = CStrVector("iii,hhh,ggg,ccc,bbb,aaa"); | 207 const Vector<const char> string_4 = CStrVector("iii,hhh,ggg,ccc,bbb,aaa"); |
| 208 CHECK(comp.Store(string_4)); | 208 CHECK(comp.Store(string_4)); |
| 209 // string_3 compressed using string_2. | 209 // string_3 compressed using string_2. |
| 210 CheckCompression(&comp, "hhh,ggg#1:7"); | 210 CheckCompression(&comp, "hhh,ggg#1:7"); |
| 211 const Vector<const char> string_5 = CStrVector("nnn,mmm,lll,kkk,jjj"); | 211 const Vector<const char> string_5 = CStrVector("nnn,mmm,lll,kkk,jjj"); |
| 212 CHECK(comp.Store(string_5)); | 212 CHECK(comp.Store(string_5)); |
| 213 // string_4 compressed using string_3. | 213 // string_4 compressed using string_3. |
| 214 CheckCompression(&comp, "iii,#1:0"); | 214 CheckCompression(&comp, "iii,#1"); |
| 215 const Vector<const char> string_6 = CStrVector("nnn,mmmmmm,lll,kkk,jjj"); | 215 const Vector<const char> string_6 = CStrVector("nnn,mmmmmm,lll,kkk,jjj"); |
| 216 CHECK(comp.Store(string_6)); | 216 CHECK(comp.Store(string_6)); |
| 217 // string_5 hasn't been compressed. | 217 // string_5 hasn't been compressed. |
| 218 CheckCompression(&comp, string_5); | 218 CheckCompression(&comp, string_5); |
| 219 CHECK(comp.Store(string_5)); | 219 CHECK(comp.Store(string_5)); |
| 220 // string_6 compressed using string_5. | 220 // string_6 compressed using string_5. |
| 221 CheckCompression(&comp, "nnn,mmm#1:4"); | 221 CheckCompression(&comp, "nnn,mmm#1:4"); |
| 222 const Vector<const char> string_7 = CStrVector("nnnnnn,mmm,lll,kkk,jjj"); | 222 const Vector<const char> string_7 = CStrVector("nnnnnn,mmm,lll,kkk,jjj"); |
| 223 CHECK(comp.Store(string_7)); | 223 CHECK(comp.Store(string_7)); |
| 224 // string_5 compressed using string_6. | 224 // string_5 compressed using string_6. |
| 225 CheckCompression(&comp, "nnn,#1:7"); | 225 CheckCompression(&comp, "nnn,#1:7"); |
| 226 const Vector<const char> string_8 = CStrVector("xxn,mmm,lll,kkk,jjj"); | 226 const Vector<const char> string_8 = CStrVector("xxn,mmm,lll,kkk,jjj"); |
| 227 CHECK(comp.Store(string_8)); | 227 CHECK(comp.Store(string_8)); |
| 228 // string_7 compressed using string_5. | 228 // string_7 compressed using string_5. |
| 229 CheckCompression(&comp, "nnnn#1:1"); | 229 CheckCompression(&comp, "nnn#1"); |
| 230 const Vector<const char> string_9 = | 230 const Vector<const char> string_9 = |
| 231 CStrVector("aaaaaaaaaaaaa,bbbbbbbbbbbbbbbbb"); | 231 CStrVector("aaaaaaaaaaaaa,bbbbbbbbbbbbbbbbb"); |
| 232 CHECK(comp.Store(string_9)); | 232 CHECK(comp.Store(string_9)); |
| 233 // string_8 compressed using string_7. | 233 // string_8 compressed using string_7. |
| 234 CheckCompression(&comp, "xxn,#1:7"); | 234 CheckCompression(&comp, "xx#1:5"); |
| 235 const Vector<const char> string_10 = | 235 const Vector<const char> string_10 = |
| 236 CStrVector("aaaaaaaaaaaaa,cccccccbbbbbbbbbb"); | 236 CStrVector("aaaaaaaaaaaaa,cccccccbbbbbbbbbb"); |
| 237 CHECK(comp.Store(string_10)); | 237 CHECK(comp.Store(string_10)); |
| 238 // string_9 hasn't been compressed. | 238 // string_9 hasn't been compressed. |
| 239 CheckCompression(&comp, string_9); | 239 CheckCompression(&comp, string_9); |
| 240 CHECK(comp.Store(string_1)); | 240 CHECK(comp.Store(string_1)); |
| 241 // string_10 compressed using string_9. | 241 // string_10 compressed using string_9. |
| 242 CheckCompression(&comp, "aaaaaaaaaaaaa,ccccccc#1:21"); | 242 CheckCompression(&comp, "aaaaaaaaaaaaa,ccccccc#1:21"); |
| 243 } | 243 } |
| 244 | 244 |
| 245 | 245 |
| 246 | 246 |
| 247 TEST(CompressorMultiLines) { | 247 TEST(CompressorMultiLines) { |
| 248 const int kWindowSize = 5; | 248 const int kWindowSize = 3; |
| 249 LogRecordCompressor comp(kWindowSize, strlen("xxx,")); | 249 LogRecordCompressor comp(kWindowSize); |
| 250 const Vector<const char> string_1 = CStrVector("eee,ddd,ccc,bbb,aaa"); | 250 const Vector<const char> string_1 = CStrVector("eee,ddd,ccc,bbb,aaa"); |
| 251 CHECK(comp.Store(string_1)); | 251 CHECK(comp.Store(string_1)); |
| 252 const Vector<const char> string_2 = CStrVector("iii,hhh,ggg,fff,aaa"); | 252 const Vector<const char> string_2 = CStrVector("iii,hhh,ggg,fff,aaa"); |
| 253 CHECK(comp.Store(string_2)); | 253 CHECK(comp.Store(string_2)); |
| 254 const Vector<const char> string_3 = CStrVector("mmm,lll,kkk,jjj,aaa"); | 254 const Vector<const char> string_3 = CStrVector("mmm,lll,kkk,jjj,aaa"); |
| 255 CHECK(comp.Store(string_3)); | 255 CHECK(comp.Store(string_3)); |
| 256 const Vector<const char> string_4 = CStrVector("nnn,hhh,ggg,fff,aaa"); | 256 const Vector<const char> string_4 = CStrVector("nnn,hhh,ggg,fff,aaa"); |
| 257 CHECK(comp.Store(string_4)); | 257 CHECK(comp.Store(string_4)); |
| 258 const Vector<const char> string_5 = CStrVector("ooo,lll,kkk,jjj,aaa"); | 258 const Vector<const char> string_5 = CStrVector("ooo,lll,kkk,jjj,aaa"); |
| 259 CHECK(comp.Store(string_5)); | 259 CHECK(comp.Store(string_5)); |
| 260 // string_4 compressed using string_2. | 260 // string_4 compressed using string_2. |
| 261 CheckCompression(&comp, "nnn,#2:4"); | 261 CheckCompression(&comp, "nnn#2:3"); |
| 262 CHECK(comp.Store(string_1)); | 262 CHECK(comp.Store(string_1)); |
| 263 // string_5 compressed using string_3. | 263 // string_5 compressed using string_3. |
| 264 CheckCompression(&comp, "ooo,#2:4"); | 264 CheckCompression(&comp, "ooo#2:3"); |
| 265 CHECK(comp.Store(string_4)); | 265 CHECK(comp.Store(string_4)); |
| 266 // string_1 is out of buffer by now, so it shouldn't be compressed. | 266 // string_1 is out of buffer by now, so it shouldn't be compressed. |
| 267 CHECK_GE(5, kWindowSize); | 267 CHECK_GE(3, kWindowSize); |
| 268 CheckCompression(&comp, string_1); | 268 CheckCompression(&comp, string_1); |
| 269 CHECK(comp.Store(string_2)); | 269 CHECK(comp.Store(string_2)); |
| 270 // string_4 compressed using itself. | 270 // string_4 compressed using itself. |
| 271 CheckCompression(&comp, "nnn,#3:4"); | 271 CheckCompression(&comp, "#3"); |
| 272 } | 272 } |
| 273 | 273 |
| 274 | 274 |
| 275 TEST(CompressorBestSelection) { | 275 TEST(CompressorBestSelection) { |
| 276 LogRecordCompressor comp(5, strlen("xxx,")); | 276 LogRecordCompressor comp(3); |
| 277 const Vector<const char> string_1 = CStrVector("eee,ddd,ccc,bbb,aaa"); | 277 const Vector<const char> string_1 = CStrVector("eee,ddd,ccc,bbb,aaa"); |
| 278 CHECK(comp.Store(string_1)); | 278 CHECK(comp.Store(string_1)); |
| 279 const Vector<const char> string_2 = CStrVector("ddd,ccc,bbb,aaa"); | 279 const Vector<const char> string_2 = CStrVector("ddd,ccc,bbb,aaa"); |
| 280 CHECK(comp.Store(string_2)); | 280 CHECK(comp.Store(string_2)); |
| 281 const Vector<const char> string_3 = CStrVector("fff,eee,ddd,ccc,bbb,aaa"); | 281 const Vector<const char> string_3 = CStrVector("fff,eee,ddd,ccc,bbb,aaa"); |
| 282 CHECK(comp.Store(string_3)); | 282 CHECK(comp.Store(string_3)); |
| 283 // string_2 compressed using string_1. | 283 // string_2 compressed using string_1. |
| 284 CheckCompression(&comp, "ddd,#1:8"); | 284 CheckCompression(&comp, "#1:4"); |
| 285 const Vector<const char> string_4 = CStrVector("nnn,hhh,ggg,fff,aaa"); | 285 const Vector<const char> string_4 = CStrVector("nnn,hhh,ggg,fff,aaa"); |
| 286 CHECK(comp.Store(string_4)); | 286 CHECK(comp.Store(string_4)); |
| 287 // Compressing string_3 using string_1 gives a better compression than | 287 // Compressing string_3 using string_1 gives a better compression than |
| 288 // using string_2. | 288 // using string_2. |
| 289 CheckCompression(&comp, "fff,#2:0"); | 289 CheckCompression(&comp, "fff,#2"); |
| 290 } |
| 291 |
| 292 |
| 293 TEST(CompressorCompressibility) { |
| 294 LogRecordCompressor comp(2); |
| 295 const Vector<const char> string_1 = CStrVector("eee,ddd,ccc,bbb,aaa"); |
| 296 CHECK(comp.Store(string_1)); |
| 297 const Vector<const char> string_2 = CStrVector("ccc,bbb,aaa"); |
| 298 CHECK(comp.Store(string_2)); |
| 299 const Vector<const char> string_3 = CStrVector("aaa"); |
| 300 CHECK(comp.Store(string_3)); |
| 301 // string_2 compressed using string_1. |
| 302 CheckCompression(&comp, "#1:8"); |
| 303 const Vector<const char> string_4 = CStrVector("xxx"); |
| 304 CHECK(comp.Store(string_4)); |
| 305 // string_3 can't be compressed using string_2 --- too short. |
| 306 CheckCompression(&comp, string_3); |
| 290 } | 307 } |
| 291 | 308 |
| 292 #endif // ENABLE_LOGGING_AND_PROFILING | 309 #endif // ENABLE_LOGGING_AND_PROFILING |
| OLD | NEW |