From efee8a14b0c8c6f781f0ea18a5b9069c6eb47adf Mon Sep 17 00:00:00 2001 From: LettuceLeaves <2878506229@qq.com> Date: Fri, 21 Nov 2025 01:50:34 +0800 Subject: [PATCH] =?UTF-8?q?test(core):=E6=B7=BB=E5=8A=A0=E5=8D=95=E5=B8=83?= =?UTF-8?q?=E9=9A=86=E8=BF=87=E6=BB=A4=E5=99=A8=E5=A4=9A=E5=93=88=E5=B8=8C?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E7=9A=84=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../text/bloom/BitMapBloomFilterTest.java | 70 +++++++++++++++++-- 1 file changed, 66 insertions(+), 4 deletions(-) diff --git a/hutool-core/src/test/java/cn/hutool/v7/core/text/bloom/BitMapBloomFilterTest.java b/hutool-core/src/test/java/cn/hutool/v7/core/text/bloom/BitMapBloomFilterTest.java index 2a06d7a89..a6851654f 100644 --- a/hutool-core/src/test/java/cn/hutool/v7/core/text/bloom/BitMapBloomFilterTest.java +++ b/hutool-core/src/test/java/cn/hutool/v7/core/text/bloom/BitMapBloomFilterTest.java @@ -20,15 +20,14 @@ import cn.hutool.v7.core.codec.hash.HashUtil; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import java.util.BitSet; - public class BitMapBloomFilterTest { + private static final int SIZE = 2 * 1024 * 1024 * 8; + @Test public void filterTest() { - final int size = 2 * 1024 * 1024 * 8; - final CombinedBloomFilter filter = new CombinedBloomFilter(FuncFilter.of(size, HashUtil::rsHash)); + final CombinedBloomFilter filter = new CombinedBloomFilter(FuncFilter.of(SIZE, HashUtil::rsHash)); filter.add("123"); filter.add("abc"); filter.add("ddd"); @@ -37,5 +36,68 @@ public class BitMapBloomFilterTest { Assertions.assertTrue(filter.contains("ddd")); Assertions.assertTrue(filter.contains("123")); } + @Test + public void multiHashFuncTest() { + final FuncFilter filter = FuncFilter.of(SIZE, + HashUtil::rsHash, + HashUtil::jsHash, + HashUtil::pjwHash, + HashUtil::elfHash, + HashUtil::bkdrHash, + HashUtil::sdbmHash, + HashUtil::djbHash, + HashUtil::dekHash, + HashUtil::apHash, + HashUtil::javaDefaultHash + ); + filter.add("Hutool"); + filter.add("BloomFilter"); + filter.add("Java"); + + Assertions.assertTrue(filter.contains("Hutool")); + Assertions.assertTrue(filter.contains("BloomFilter")); + Assertions.assertTrue(filter.contains("Java")); + Assertions.assertFalse(filter.contains("Python")); + Assertions.assertFalse(filter.contains("Go")); + Assertions.assertFalse(filter.contains("hutool")); + } + + @Test + public void combinedMultiHashTest() { + FuncFilter multiHashFuncFilter = FuncFilter.of(SIZE, + HashUtil::bkdrHash, + HashUtil::apHash, + HashUtil::djbHash + ); + final CombinedBloomFilter filter = new CombinedBloomFilter(multiHashFuncFilter); + filter.add("123123WASD-WASD"); + Assertions.assertTrue(filter.contains("123123WASD-WASD")); + Assertions.assertFalse(filter.contains("123123WASD-WASD-false")); + } + + @Test + public void chineseStringWithThreeHashesTest() { + final FuncFilter filter = FuncFilter.of(SIZE, + HashUtil::bkdrHash, + HashUtil::apHash, + HashUtil::djbHash + ); + + String s1 = "你好世界"; + String s2 = "双亲委派"; + String s3 = "测试工程师"; + + filter.add(s1); + filter.add(s2); + filter.add(s3); + Assertions.assertTrue(filter.contains(s1), "应包含: " + s1); + Assertions.assertTrue(filter.contains(s2), "应包含: " + s2); + Assertions.assertTrue(filter.contains(s3), "应包含: " + s3); + Assertions.assertFalse(filter.contains("我好世界"), "多字"); + Assertions.assertFalse(filter.contains("父亲委派"), "改字"); + Assertions.assertFalse(filter.contains("测试"), "子串"); + Assertions.assertFalse(filter.contains(""), "空串"); + Assertions.assertFalse(filter.contains("👍"), "未添加的"); + } }