@@ -135,6 +135,7 @@ TEST(CuckooBuilderTest, SuccessWithEmptyFile) {
135
135
CuckooTableBuilder builder (writable_file.get (), kHashTableRatio ,
136
136
4 , 100 , BytewiseComparator (), 1 , GetSliceHash);
137
137
ASSERT_OK (builder.status ());
138
+ ASSERT_EQ (0UL , builder.FileSize ());
138
139
ASSERT_OK (builder.Finish ());
139
140
ASSERT_OK (writable_file->Close ());
140
141
CheckFileContents ({}, {}, {}, " " , 0 , 2 , false );
@@ -155,6 +156,7 @@ TEST(CuckooBuilderTest, WriteSuccessNoCollisionFullKey) {
155
156
for (auto & user_key : user_keys) {
156
157
keys.push_back (GetInternalKey (user_key, false ));
157
158
}
159
+ uint32_t expected_table_size = NextPowOf2 (keys.size () / kHashTableRatio );
158
160
159
161
unique_ptr<WritableFile> writable_file;
160
162
fname = test::TmpDir () + " /NoCollisionFullKey" ;
@@ -167,10 +169,12 @@ TEST(CuckooBuilderTest, WriteSuccessNoCollisionFullKey) {
167
169
ASSERT_EQ (builder.NumEntries (), i + 1 );
168
170
ASSERT_OK (builder.status ());
169
171
}
172
+ uint32_t bucket_size = keys[0 ].size () + values[0 ].size ();
173
+ ASSERT_LE (expected_table_size * bucket_size, builder.FileSize ());
170
174
ASSERT_OK (builder.Finish ());
171
175
ASSERT_OK (writable_file->Close ());
176
+ ASSERT_LE (expected_table_size * bucket_size, builder.FileSize ());
172
177
173
- uint32_t expected_table_size = NextPowOf2 (keys.size () / kHashTableRatio );
174
178
std::string expected_unused_bucket = GetInternalKey (" key00" , true );
175
179
expected_unused_bucket += std::string (values[0 ].size (), ' a' );
176
180
CheckFileContents (keys, values, expected_locations,
@@ -192,6 +196,7 @@ TEST(CuckooBuilderTest, WriteSuccessWithCollisionFullKey) {
192
196
for (auto & user_key : user_keys) {
193
197
keys.push_back (GetInternalKey (user_key, false ));
194
198
}
199
+ uint32_t expected_table_size = NextPowOf2 (keys.size () / kHashTableRatio );
195
200
196
201
unique_ptr<WritableFile> writable_file;
197
202
fname = test::TmpDir () + " /WithCollisionFullKey" ;
@@ -204,10 +209,12 @@ TEST(CuckooBuilderTest, WriteSuccessWithCollisionFullKey) {
204
209
ASSERT_EQ (builder.NumEntries (), i + 1 );
205
210
ASSERT_OK (builder.status ());
206
211
}
212
+ uint32_t bucket_size = keys[0 ].size () + values[0 ].size ();
213
+ ASSERT_LE (expected_table_size * bucket_size, builder.FileSize ());
207
214
ASSERT_OK (builder.Finish ());
208
215
ASSERT_OK (writable_file->Close ());
216
+ ASSERT_LE (expected_table_size * bucket_size, builder.FileSize ());
209
217
210
- uint32_t expected_table_size = NextPowOf2 (keys.size () / kHashTableRatio );
211
218
std::string expected_unused_bucket = GetInternalKey (" key00" , true );
212
219
expected_unused_bucket += std::string (values[0 ].size (), ' a' );
213
220
CheckFileContents (keys, values, expected_locations,
@@ -229,6 +236,7 @@ TEST(CuckooBuilderTest, WriteSuccessWithCollisionAndCuckooBlock) {
229
236
for (auto & user_key : user_keys) {
230
237
keys.push_back (GetInternalKey (user_key, false ));
231
238
}
239
+ uint32_t expected_table_size = NextPowOf2 (keys.size () / kHashTableRatio );
232
240
233
241
unique_ptr<WritableFile> writable_file;
234
242
uint32_t cuckoo_block_size = 2 ;
@@ -242,10 +250,12 @@ TEST(CuckooBuilderTest, WriteSuccessWithCollisionAndCuckooBlock) {
242
250
ASSERT_EQ (builder.NumEntries (), i + 1 );
243
251
ASSERT_OK (builder.status ());
244
252
}
253
+ uint32_t bucket_size = keys[0 ].size () + values[0 ].size ();
254
+ ASSERT_LE (expected_table_size * bucket_size, builder.FileSize ());
245
255
ASSERT_OK (builder.Finish ());
246
256
ASSERT_OK (writable_file->Close ());
257
+ ASSERT_LE (expected_table_size * bucket_size, builder.FileSize ());
247
258
248
- uint32_t expected_table_size = NextPowOf2 (keys.size () / kHashTableRatio );
249
259
std::string expected_unused_bucket = GetInternalKey (" key00" , true );
250
260
expected_unused_bucket += std::string (values[0 ].size (), ' a' );
251
261
CheckFileContents (keys, values, expected_locations,
@@ -272,6 +282,7 @@ TEST(CuckooBuilderTest, WithCollisionPathFullKey) {
272
282
for (auto & user_key : user_keys) {
273
283
keys.push_back (GetInternalKey (user_key, false ));
274
284
}
285
+ uint32_t expected_table_size = NextPowOf2 (keys.size () / kHashTableRatio );
275
286
276
287
unique_ptr<WritableFile> writable_file;
277
288
fname = test::TmpDir () + " /WithCollisionPathFullKey" ;
@@ -284,10 +295,12 @@ TEST(CuckooBuilderTest, WithCollisionPathFullKey) {
284
295
ASSERT_EQ (builder.NumEntries (), i + 1 );
285
296
ASSERT_OK (builder.status ());
286
297
}
298
+ uint32_t bucket_size = keys[0 ].size () + values[0 ].size ();
299
+ ASSERT_LE (expected_table_size * bucket_size, builder.FileSize ());
287
300
ASSERT_OK (builder.Finish ());
288
301
ASSERT_OK (writable_file->Close ());
302
+ ASSERT_LE (expected_table_size * bucket_size, builder.FileSize ());
289
303
290
- uint32_t expected_table_size = NextPowOf2 (keys.size () / kHashTableRatio );
291
304
std::string expected_unused_bucket = GetInternalKey (" key00" , true );
292
305
expected_unused_bucket += std::string (values[0 ].size (), ' a' );
293
306
CheckFileContents (keys, values, expected_locations,
@@ -311,6 +324,7 @@ TEST(CuckooBuilderTest, WithCollisionPathFullKeyAndCuckooBlock) {
311
324
for (auto & user_key : user_keys) {
312
325
keys.push_back (GetInternalKey (user_key, false ));
313
326
}
327
+ uint32_t expected_table_size = NextPowOf2 (keys.size () / kHashTableRatio );
314
328
315
329
unique_ptr<WritableFile> writable_file;
316
330
fname = test::TmpDir () + " /WithCollisionPathFullKeyAndCuckooBlock" ;
@@ -323,10 +337,12 @@ TEST(CuckooBuilderTest, WithCollisionPathFullKeyAndCuckooBlock) {
323
337
ASSERT_EQ (builder.NumEntries (), i + 1 );
324
338
ASSERT_OK (builder.status ());
325
339
}
340
+ uint32_t bucket_size = keys[0 ].size () + values[0 ].size ();
341
+ ASSERT_LE (expected_table_size * bucket_size, builder.FileSize ());
326
342
ASSERT_OK (builder.Finish ());
327
343
ASSERT_OK (writable_file->Close ());
344
+ ASSERT_LE (expected_table_size * bucket_size, builder.FileSize ());
328
345
329
- uint32_t expected_table_size = NextPowOf2 (keys.size () / kHashTableRatio );
330
346
std::string expected_unused_bucket = GetInternalKey (" key00" , true );
331
347
expected_unused_bucket += std::string (values[0 ].size (), ' a' );
332
348
CheckFileContents (keys, values, expected_locations,
@@ -344,6 +360,7 @@ TEST(CuckooBuilderTest, WriteSuccessNoCollisionUserKey) {
344
360
{user_keys[3 ], {3 , 4 , 5 , 6 }}
345
361
};
346
362
std::vector<uint64_t > expected_locations = {0 , 1 , 2 , 3 };
363
+ uint32_t expected_table_size = NextPowOf2 (user_keys.size () / kHashTableRatio );
347
364
348
365
unique_ptr<WritableFile> writable_file;
349
366
fname = test::TmpDir () + " /NoCollisionUserKey" ;
@@ -356,10 +373,12 @@ TEST(CuckooBuilderTest, WriteSuccessNoCollisionUserKey) {
356
373
ASSERT_EQ (builder.NumEntries (), i + 1 );
357
374
ASSERT_OK (builder.status ());
358
375
}
376
+ uint32_t bucket_size = user_keys[0 ].size () + values[0 ].size ();
377
+ ASSERT_LE (expected_table_size * bucket_size, builder.FileSize ());
359
378
ASSERT_OK (builder.Finish ());
360
379
ASSERT_OK (writable_file->Close ());
380
+ ASSERT_LE (expected_table_size * bucket_size, builder.FileSize ());
361
381
362
- uint32_t expected_table_size = NextPowOf2 (user_keys.size () / kHashTableRatio );
363
382
std::string expected_unused_bucket = " key00" ;
364
383
expected_unused_bucket += std::string (values[0 ].size (), ' a' );
365
384
CheckFileContents (user_keys, values, expected_locations,
@@ -377,6 +396,7 @@ TEST(CuckooBuilderTest, WriteSuccessWithCollisionUserKey) {
377
396
{user_keys[3 ], {0 , 1 , 2 , 3 }},
378
397
};
379
398
std::vector<uint64_t > expected_locations = {0 , 1 , 2 , 3 };
399
+ uint32_t expected_table_size = NextPowOf2 (user_keys.size () / kHashTableRatio );
380
400
381
401
unique_ptr<WritableFile> writable_file;
382
402
fname = test::TmpDir () + " /WithCollisionUserKey" ;
@@ -389,10 +409,12 @@ TEST(CuckooBuilderTest, WriteSuccessWithCollisionUserKey) {
389
409
ASSERT_EQ (builder.NumEntries (), i + 1 );
390
410
ASSERT_OK (builder.status ());
391
411
}
412
+ uint32_t bucket_size = user_keys[0 ].size () + values[0 ].size ();
413
+ ASSERT_LE (expected_table_size * bucket_size, builder.FileSize ());
392
414
ASSERT_OK (builder.Finish ());
393
415
ASSERT_OK (writable_file->Close ());
416
+ ASSERT_LE (expected_table_size * bucket_size, builder.FileSize ());
394
417
395
- uint32_t expected_table_size = NextPowOf2 (user_keys.size () / kHashTableRatio );
396
418
std::string expected_unused_bucket = " key00" ;
397
419
expected_unused_bucket += std::string (values[0 ].size (), ' a' );
398
420
CheckFileContents (user_keys, values, expected_locations,
@@ -412,6 +434,7 @@ TEST(CuckooBuilderTest, WithCollisionPathUserKey) {
412
434
{user_keys[4 ], {0 , 2 }},
413
435
};
414
436
std::vector<uint64_t > expected_locations = {0 , 1 , 3 , 4 , 2 };
437
+ uint32_t expected_table_size = NextPowOf2 (user_keys.size () / kHashTableRatio );
415
438
416
439
unique_ptr<WritableFile> writable_file;
417
440
fname = test::TmpDir () + " /WithCollisionPathUserKey" ;
@@ -424,10 +447,12 @@ TEST(CuckooBuilderTest, WithCollisionPathUserKey) {
424
447
ASSERT_EQ (builder.NumEntries (), i + 1 );
425
448
ASSERT_OK (builder.status ());
426
449
}
450
+ uint32_t bucket_size = user_keys[0 ].size () + values[0 ].size ();
451
+ ASSERT_LE (expected_table_size * bucket_size, builder.FileSize ());
427
452
ASSERT_OK (builder.Finish ());
428
453
ASSERT_OK (writable_file->Close ());
454
+ ASSERT_LE (expected_table_size * bucket_size, builder.FileSize ());
429
455
430
- uint32_t expected_table_size = NextPowOf2 (user_keys.size () / kHashTableRatio );
431
456
std::string expected_unused_bucket = " key00" ;
432
457
expected_unused_bucket += std::string (values[0 ].size (), ' a' );
433
458
CheckFileContents (user_keys, values, expected_locations,
0 commit comments