@@ -159,7 +159,7 @@ TEST(FPPTest, TestBloomFilter) {
159159
160160 std::vector<std::string> members;
161161 BlockSplitBloomFilter bloom_filter;
162- bloom_filter.Init (BlockSplitBloomFilter::OptimalNumOfBits (total_count, fpp));
162+ bloom_filter.Init (BlockSplitBloomFilter::OptimalNumOfBytes (total_count, fpp));
163163
164164 // Insert elements into the Bloom filter
165165 for (int i = 0 ; i < total_count; i++) {
@@ -249,36 +249,39 @@ TEST(CompatibilityTest, TestBloomFilter) {
249249// Also it is used to test whether OptimalNumOfBits returns value between
250250// [MINIMUM_BLOOM_FILTER_SIZE, MAXIMUM_BLOOM_FILTER_SIZE].
251251TEST (OptimalValueTest, TestBloomFilter) {
252- EXPECT_EQ (BlockSplitBloomFilter::OptimalNumOfBits (256 , 0.01 ), UINT32_C (4096 ));
253- EXPECT_EQ (BlockSplitBloomFilter::OptimalNumOfBits (512 , 0.01 ), UINT32_C (8192 ));
254- EXPECT_EQ (BlockSplitBloomFilter::OptimalNumOfBits (1024 , 0.01 ), UINT32_C (16384 ));
255- EXPECT_EQ (BlockSplitBloomFilter::OptimalNumOfBits (2048 , 0.01 ), UINT32_C (32768 ));
256-
257- EXPECT_EQ (BlockSplitBloomFilter::OptimalNumOfBits (200 , 0.01 ), UINT32_C (2048 ));
258- EXPECT_EQ (BlockSplitBloomFilter::OptimalNumOfBits (300 , 0.01 ), UINT32_C (4096 ));
259- EXPECT_EQ (BlockSplitBloomFilter::OptimalNumOfBits (700 , 0.01 ), UINT32_C (8192 ));
260- EXPECT_EQ (BlockSplitBloomFilter::OptimalNumOfBits (1500 , 0.01 ), UINT32_C (16384 ));
261-
262- EXPECT_EQ (BlockSplitBloomFilter::OptimalNumOfBits (200 , 0.025 ), UINT32_C (2048 ));
263- EXPECT_EQ (BlockSplitBloomFilter::OptimalNumOfBits (300 , 0.025 ), UINT32_C (4096 ));
264- EXPECT_EQ (BlockSplitBloomFilter::OptimalNumOfBits (700 , 0.025 ), UINT32_C (8192 ));
265- EXPECT_EQ (BlockSplitBloomFilter::OptimalNumOfBits (1500 , 0.025 ), UINT32_C (16384 ));
266-
267- EXPECT_EQ (BlockSplitBloomFilter::OptimalNumOfBits (200 , 0.05 ), UINT32_C (2048 ));
268- EXPECT_EQ (BlockSplitBloomFilter::OptimalNumOfBits (300 , 0.05 ), UINT32_C (4096 ));
269- EXPECT_EQ (BlockSplitBloomFilter::OptimalNumOfBits (700 , 0.05 ), UINT32_C (8192 ));
270- EXPECT_EQ (BlockSplitBloomFilter::OptimalNumOfBits (1500 , 0.05 ), UINT32_C (16384 ));
252+ auto testOptimalNumEstimation = [](uint32_t ndv, double fpp, uint32_t num_bits) {
253+ EXPECT_EQ (BlockSplitBloomFilter::OptimalNumOfBits (ndv, fpp), num_bits);
254+ EXPECT_EQ (BlockSplitBloomFilter::OptimalNumOfBytes (ndv, fpp), num_bits / 8 );
255+ };
256+
257+ testOptimalNumEstimation (256 , 0.01 , UINT32_C (4096 ));
258+ testOptimalNumEstimation (512 , 0.01 , UINT32_C (8192 ));
259+ testOptimalNumEstimation (1024 , 0.01 , UINT32_C (16384 ));
260+ testOptimalNumEstimation (2048 , 0.01 , UINT32_C (32768 ));
261+
262+ testOptimalNumEstimation (200 , 0.01 , UINT32_C (2048 ));
263+ testOptimalNumEstimation (300 , 0.01 , UINT32_C (4096 ));
264+ testOptimalNumEstimation (700 , 0.01 , UINT32_C (8192 ));
265+ testOptimalNumEstimation (1500 , 0.01 , UINT32_C (16384 ));
266+
267+ testOptimalNumEstimation (200 , 0.025 , UINT32_C (2048 ));
268+ testOptimalNumEstimation (300 , 0.025 , UINT32_C (4096 ));
269+ testOptimalNumEstimation (700 , 0.025 , UINT32_C (8192 ));
270+ testOptimalNumEstimation (1500 , 0.025 , UINT32_C (16384 ));
271+
272+ testOptimalNumEstimation (200 , 0.05 , UINT32_C (2048 ));
273+ testOptimalNumEstimation (300 , 0.05 , UINT32_C (4096 ));
274+ testOptimalNumEstimation (700 , 0.05 , UINT32_C (8192 ));
275+ testOptimalNumEstimation (1500 , 0.05 , UINT32_C (16384 ));
271276
272277 // Boundary check
273- EXPECT_EQ (BlockSplitBloomFilter::OptimalNumOfBits (4 , 0.01 ), UINT32_C (256 ));
274- EXPECT_EQ (BlockSplitBloomFilter::OptimalNumOfBits (4 , 0.25 ), UINT32_C (256 ));
275-
276- EXPECT_EQ (
277- BlockSplitBloomFilter::OptimalNumOfBits (std::numeric_limits<uint32_t >::max (), 0.01 ),
278- UINT32_C (1073741824 ));
279- EXPECT_EQ (
280- BlockSplitBloomFilter::OptimalNumOfBits (std::numeric_limits<uint32_t >::max (), 0.25 ),
281- UINT32_C (1073741824 ));
278+ testOptimalNumEstimation (4 , 0.01 , BlockSplitBloomFilter::kMinimumBloomFilterBytes * 8 );
279+ testOptimalNumEstimation (4 , 0.25 , BlockSplitBloomFilter::kMinimumBloomFilterBytes * 8 );
280+
281+ testOptimalNumEstimation (std::numeric_limits<uint32_t >::max (), 0.01 ,
282+ BlockSplitBloomFilter::kMaximumBloomFilterBytes * 8 );
283+ testOptimalNumEstimation (std::numeric_limits<uint32_t >::max (), 0.25 ,
284+ BlockSplitBloomFilter::kMaximumBloomFilterBytes * 8 );
282285}
283286
284287// The test below is plainly copied from parquet-mr and serves as a basic sanity
0 commit comments