|
@ -853,12 +853,20 @@ TEST(TableTest, ApproximateOffsetOfCompressed) { |
|
|
options.compression = kSnappyCompression; |
|
|
options.compression = kSnappyCompression; |
|
|
c.Finish(options, &keys, &kvmap); |
|
|
c.Finish(options, &keys, &kvmap); |
|
|
|
|
|
|
|
|
ASSERT_TRUE(Between(c.ApproximateOffsetOf("abc"), 0, 0)); |
|
|
|
|
|
ASSERT_TRUE(Between(c.ApproximateOffsetOf("k01"), 0, 0)); |
|
|
|
|
|
ASSERT_TRUE(Between(c.ApproximateOffsetOf("k02"), 0, 0)); |
|
|
|
|
|
ASSERT_TRUE(Between(c.ApproximateOffsetOf("k03"), 2000, 3000)); |
|
|
|
|
|
ASSERT_TRUE(Between(c.ApproximateOffsetOf("k04"), 2000, 3000)); |
|
|
|
|
|
ASSERT_TRUE(Between(c.ApproximateOffsetOf("xyz"), 4000, 6000)); |
|
|
|
|
|
|
|
|
// Expected upper and lower bounds of space used by compressible strings.
|
|
|
|
|
|
static const int kSlop = 1000; // Compressor effectiveness varies.
|
|
|
|
|
|
const int expected = 2500; // 10000 * compression ratio (0.25)
|
|
|
|
|
|
const int min_z = expected - kSlop; |
|
|
|
|
|
const int max_z = expected + kSlop; |
|
|
|
|
|
|
|
|
|
|
|
ASSERT_TRUE(Between(c.ApproximateOffsetOf("abc"), 0, kSlop)); |
|
|
|
|
|
ASSERT_TRUE(Between(c.ApproximateOffsetOf("k01"), 0, kSlop)); |
|
|
|
|
|
ASSERT_TRUE(Between(c.ApproximateOffsetOf("k02"), 0, kSlop)); |
|
|
|
|
|
// Have now emitted a large compressible string, so adjust expected offset.
|
|
|
|
|
|
ASSERT_TRUE(Between(c.ApproximateOffsetOf("k03"), min_z, max_z)); |
|
|
|
|
|
ASSERT_TRUE(Between(c.ApproximateOffsetOf("k04"), min_z, max_z)); |
|
|
|
|
|
// Have now emitted two large compressible strings, so adjust expected offset.
|
|
|
|
|
|
ASSERT_TRUE(Between(c.ApproximateOffsetOf("xyz"), 2 * min_z, 2 * max_z)); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
} // namespace leveldb
|
|
|
} // namespace leveldb
|
|
|