| Index: test/cctest/test-log-utils.cc
|
| diff --git a/test/cctest/test-log-utils.cc b/test/cctest/test-log-utils.cc
|
| index 861be12ce86d47c5ea53237c8938b58b9c51d480..c99d770d42a105d492d28e2580c9b094eed54fe5 100644
|
| --- a/test/cctest/test-log-utils.cc
|
| +++ b/test/cctest/test-log-utils.cc
|
| @@ -12,6 +12,7 @@
|
| using v8::internal::CStrVector;
|
| using v8::internal::EmbeddedVector;
|
| using v8::internal::LogDynamicBuffer;
|
| +using v8::internal::LogRecordCompressor;
|
| using v8::internal::MutableCStrVector;
|
| using v8::internal::ScopedVector;
|
| using v8::internal::Vector;
|
| @@ -137,4 +138,173 @@ TEST(DynaBufSealing) {
|
| CHECK_EQ(0, ReadData(&dynabuf, 100 + seal_size, &buf));
|
| }
|
|
|
| +
|
| +TEST(CompressorStore) {
|
| + LogRecordCompressor comp(2);
|
| + const Vector<const char> empty = CStrVector("");
|
| + CHECK(comp.Store(empty));
|
| + CHECK(!comp.Store(empty));
|
| + CHECK(!comp.Store(empty));
|
| + const Vector<const char> aaa = CStrVector("aaa");
|
| + CHECK(comp.Store(aaa));
|
| + CHECK(!comp.Store(aaa));
|
| + CHECK(!comp.Store(aaa));
|
| + CHECK(comp.Store(empty));
|
| + CHECK(!comp.Store(empty));
|
| + CHECK(!comp.Store(empty));
|
| +}
|
| +
|
| +
|
| +void CheckCompression(LogRecordCompressor* comp,
|
| + const Vector<const char>& after) {
|
| + EmbeddedVector<char, 100> result;
|
| + CHECK(comp->RetrievePreviousCompressed(&result));
|
| + CHECK_EQ(after, result);
|
| +}
|
| +
|
| +
|
| +void CheckCompression(LogRecordCompressor* comp,
|
| + const char* after) {
|
| + CheckCompression(comp, CStrVector(after));
|
| +}
|
| +
|
| +
|
| +TEST(CompressorNonCompressed) {
|
| + LogRecordCompressor comp(0);
|
| + CHECK(!comp.RetrievePreviousCompressed(NULL));
|
| + const Vector<const char> empty = CStrVector("");
|
| + CHECK(comp.Store(empty));
|
| + CHECK(!comp.RetrievePreviousCompressed(NULL));
|
| + const Vector<const char> a_x_20 = CStrVector("aaaaaaaaaaaaaaaaaaaa");
|
| + CHECK(comp.Store(a_x_20));
|
| + CheckCompression(&comp, empty);
|
| + CheckCompression(&comp, empty);
|
| + CHECK(comp.Store(empty));
|
| + CheckCompression(&comp, a_x_20);
|
| + CheckCompression(&comp, a_x_20);
|
| +}
|
| +
|
| +
|
| +TEST(CompressorSingleLine) {
|
| + LogRecordCompressor comp(1);
|
| + const Vector<const char> string_1 = CStrVector("eee,ddd,ccc,bbb,aaa");
|
| + CHECK(comp.Store(string_1));
|
| + const Vector<const char> string_2 = CStrVector("fff,ddd,ccc,bbb,aaa");
|
| + CHECK(comp.Store(string_2));
|
| + // string_1 hasn't been compressed.
|
| + CheckCompression(&comp, string_1);
|
| + CheckCompression(&comp, string_1);
|
| + const Vector<const char> string_3 = CStrVector("hhh,ggg,ccc,bbb,aaa");
|
| + CHECK(comp.Store(string_3));
|
| + // string_2 compressed using string_1.
|
| + CheckCompression(&comp, "fff#1:3");
|
| + CheckCompression(&comp, "fff#1:3");
|
| + CHECK(!comp.Store(string_3));
|
| + // Expecting no changes.
|
| + CheckCompression(&comp, "fff#1:3");
|
| + CHECK(!comp.Store(string_3));
|
| + // Expecting no changes.
|
| + CheckCompression(&comp, "fff#1:3");
|
| + const Vector<const char> string_4 = CStrVector("iii,hhh,ggg,ccc,bbb,aaa");
|
| + CHECK(comp.Store(string_4));
|
| + // string_3 compressed using string_2.
|
| + CheckCompression(&comp, "hhh,ggg#1:7");
|
| + const Vector<const char> string_5 = CStrVector("nnn,mmm,lll,kkk,jjj");
|
| + CHECK(comp.Store(string_5));
|
| + // string_4 compressed using string_3.
|
| + CheckCompression(&comp, "iii,#1");
|
| + const Vector<const char> string_6 = CStrVector("nnn,mmmmmm,lll,kkk,jjj");
|
| + CHECK(comp.Store(string_6));
|
| + // string_5 hasn't been compressed.
|
| + CheckCompression(&comp, string_5);
|
| + CHECK(comp.Store(string_5));
|
| + // string_6 compressed using string_5.
|
| + CheckCompression(&comp, "nnn,mmm#1:4");
|
| + const Vector<const char> string_7 = CStrVector("nnnnnn,mmm,lll,kkk,jjj");
|
| + CHECK(comp.Store(string_7));
|
| + // string_5 compressed using string_6.
|
| + CheckCompression(&comp, "nnn,#1:7");
|
| + const Vector<const char> string_8 = CStrVector("xxn,mmm,lll,kkk,jjj");
|
| + CHECK(comp.Store(string_8));
|
| + // string_7 compressed using string_5.
|
| + CheckCompression(&comp, "nnn#1");
|
| + const Vector<const char> string_9 =
|
| + CStrVector("aaaaaaaaaaaaa,bbbbbbbbbbbbbbbbb");
|
| + CHECK(comp.Store(string_9));
|
| + // string_8 compressed using string_7.
|
| + CheckCompression(&comp, "xx#1:5");
|
| + const Vector<const char> string_10 =
|
| + CStrVector("aaaaaaaaaaaaa,cccccccbbbbbbbbbb");
|
| + CHECK(comp.Store(string_10));
|
| + // string_9 hasn't been compressed.
|
| + CheckCompression(&comp, string_9);
|
| + CHECK(comp.Store(string_1));
|
| + // string_10 compressed using string_9.
|
| + CheckCompression(&comp, "aaaaaaaaaaaaa,ccccccc#1:21");
|
| +}
|
| +
|
| +
|
| +
|
| +TEST(CompressorMultiLines) {
|
| + const int kWindowSize = 3;
|
| + LogRecordCompressor comp(kWindowSize);
|
| + const Vector<const char> string_1 = CStrVector("eee,ddd,ccc,bbb,aaa");
|
| + CHECK(comp.Store(string_1));
|
| + const Vector<const char> string_2 = CStrVector("iii,hhh,ggg,fff,aaa");
|
| + CHECK(comp.Store(string_2));
|
| + const Vector<const char> string_3 = CStrVector("mmm,lll,kkk,jjj,aaa");
|
| + CHECK(comp.Store(string_3));
|
| + const Vector<const char> string_4 = CStrVector("nnn,hhh,ggg,fff,aaa");
|
| + CHECK(comp.Store(string_4));
|
| + const Vector<const char> string_5 = CStrVector("ooo,lll,kkk,jjj,aaa");
|
| + CHECK(comp.Store(string_5));
|
| + // string_4 compressed using string_2.
|
| + CheckCompression(&comp, "nnn#2:3");
|
| + CHECK(comp.Store(string_1));
|
| + // string_5 compressed using string_3.
|
| + CheckCompression(&comp, "ooo#2:3");
|
| + CHECK(comp.Store(string_4));
|
| + // string_1 is out of buffer by now, so it shouldn't be compressed.
|
| + CHECK_GE(3, kWindowSize);
|
| + CheckCompression(&comp, string_1);
|
| + CHECK(comp.Store(string_2));
|
| + // string_4 compressed using itself.
|
| + CheckCompression(&comp, "#3");
|
| +}
|
| +
|
| +
|
| +TEST(CompressorBestSelection) {
|
| + LogRecordCompressor comp(3);
|
| + const Vector<const char> string_1 = CStrVector("eee,ddd,ccc,bbb,aaa");
|
| + CHECK(comp.Store(string_1));
|
| + const Vector<const char> string_2 = CStrVector("ddd,ccc,bbb,aaa");
|
| + CHECK(comp.Store(string_2));
|
| + const Vector<const char> string_3 = CStrVector("fff,eee,ddd,ccc,bbb,aaa");
|
| + CHECK(comp.Store(string_3));
|
| + // string_2 compressed using string_1.
|
| + CheckCompression(&comp, "#1:4");
|
| + const Vector<const char> string_4 = CStrVector("nnn,hhh,ggg,fff,aaa");
|
| + CHECK(comp.Store(string_4));
|
| + // Compressing string_3 using string_1 gives a better compression than
|
| + // using string_2.
|
| + CheckCompression(&comp, "fff,#2");
|
| +}
|
| +
|
| +
|
| +TEST(CompressorCompressibility) {
|
| + LogRecordCompressor comp(2);
|
| + const Vector<const char> string_1 = CStrVector("eee,ddd,ccc,bbb,aaa");
|
| + CHECK(comp.Store(string_1));
|
| + const Vector<const char> string_2 = CStrVector("ccc,bbb,aaa");
|
| + CHECK(comp.Store(string_2));
|
| + const Vector<const char> string_3 = CStrVector("aaa");
|
| + CHECK(comp.Store(string_3));
|
| + // string_2 compressed using string_1.
|
| + CheckCompression(&comp, "#1:8");
|
| + const Vector<const char> string_4 = CStrVector("xxx");
|
| + CHECK(comp.Store(string_4));
|
| + // string_3 can't be compressed using string_2 --- too short.
|
| + CheckCompression(&comp, string_3);
|
| +}
|
| +
|
| #endif // ENABLE_LOGGING_AND_PROFILING
|
|
|