Skip to content

Commit 066a109

Browse files
authored
testing: improve BloomFilterTest (TheAlgorithms#6443)
* testing: improve BloomFilterTest * style: fix formatting
1 parent 2b18008 commit 066a109

File tree

1 file changed

+143
-0
lines changed

1 file changed

+143
-0
lines changed

src/test/java/com/thealgorithms/datastructures/bloomfilter/BloomFilterTest.java

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
package com.thealgorithms.datastructures.bloomfilter;
22

3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.HashMap;
6+
import java.util.HashSet;
7+
import java.util.List;
8+
import java.util.Map;
9+
import java.util.Set;
310
import org.junit.jupiter.api.Assertions;
411
import org.junit.jupiter.api.BeforeEach;
512
import org.junit.jupiter.api.Test;
@@ -113,4 +120,140 @@ void testBoundaryConditions() {
113120
Assertions.assertTrue(filter.contains("d"), "Filter should contain 'd'");
114121
Assertions.assertFalse(filter.contains("e"), "Filter should not contain 'e' which was not inserted");
115122
}
123+
124+
@Test
125+
void testLongDataType() {
126+
BloomFilter<Long> filter = new BloomFilter<>(5, 1000);
127+
Long[] values = {Long.MIN_VALUE, Long.MAX_VALUE};
128+
129+
for (Long value : values) {
130+
filter.insert(value);
131+
}
132+
133+
for (Long value : values) {
134+
Assertions.assertTrue(filter.contains(value), "Filter should contain " + value);
135+
}
136+
}
137+
138+
@Test
139+
void testFloatDataType() {
140+
BloomFilter<Float> filter = new BloomFilter<>(3, 200);
141+
Float[] values = {1.5f, -3.7f, 0.0f, Float.MAX_VALUE, Float.MIN_VALUE};
142+
143+
for (Float value : values) {
144+
filter.insert(value);
145+
}
146+
147+
for (Float value : values) {
148+
Assertions.assertTrue(filter.contains(value), "Filter should contain " + value);
149+
}
150+
151+
Assertions.assertFalse(filter.contains(88.88f), "Filter should not contain uninserted value");
152+
}
153+
154+
@Test
155+
void testBooleanDataType() {
156+
BloomFilter<Boolean> filter = new BloomFilter<>(2, 50);
157+
filter.insert(Boolean.TRUE);
158+
filter.insert(Boolean.FALSE);
159+
160+
Assertions.assertTrue(filter.contains(Boolean.TRUE), "Filter should contain true");
161+
Assertions.assertTrue(filter.contains(Boolean.FALSE), "Filter should contain false");
162+
}
163+
164+
@Test
165+
void testListDataType() {
166+
BloomFilter<List<String>> filter = new BloomFilter<>(4, 200);
167+
List<String> list1 = Arrays.asList("apple", "banana");
168+
List<String> list2 = Arrays.asList("cat", "dog");
169+
List<String> emptyList = new ArrayList<>();
170+
171+
filter.insert(list1);
172+
filter.insert(list2);
173+
filter.insert(emptyList);
174+
175+
Assertions.assertTrue(filter.contains(list1), "Filter should contain list1");
176+
Assertions.assertTrue(filter.contains(list2), "Filter should contain list2");
177+
Assertions.assertTrue(filter.contains(emptyList), "Filter should contain empty list");
178+
Assertions.assertFalse(filter.contains(Arrays.asList("elephant", "tiger")), "Filter should not contain uninserted list");
179+
}
180+
181+
@Test
182+
void testMapDataType() {
183+
BloomFilter<Map<String, Integer>> filter = new BloomFilter<>(3, 150);
184+
Map<String, Integer> map1 = new HashMap<>();
185+
map1.put("key1", 1);
186+
map1.put("key2", 2);
187+
188+
Map<String, Integer> map2 = new HashMap<>();
189+
map2.put("key3", 3);
190+
191+
Map<String, Integer> emptyMap = new HashMap<>();
192+
193+
filter.insert(map1);
194+
filter.insert(map2);
195+
filter.insert(emptyMap);
196+
197+
Assertions.assertTrue(filter.contains(map1), "Filter should contain map1");
198+
Assertions.assertTrue(filter.contains(map2), "Filter should contain map2");
199+
Assertions.assertTrue(filter.contains(emptyMap), "Filter should contain empty map");
200+
}
201+
202+
@Test
203+
void testSetDataType() {
204+
BloomFilter<Set<Integer>> filter = new BloomFilter<>(3, 100);
205+
Set<Integer> set1 = new HashSet<>(Arrays.asList(1, 2, 3));
206+
Set<Integer> set2 = new HashSet<>(Arrays.asList(4, 5));
207+
Set<Integer> emptySet = new HashSet<>();
208+
209+
filter.insert(set1);
210+
filter.insert(set2);
211+
filter.insert(emptySet);
212+
213+
Assertions.assertTrue(filter.contains(set1), "Filter should contain set1");
214+
Assertions.assertTrue(filter.contains(set2), "Filter should contain set2");
215+
Assertions.assertTrue(filter.contains(emptySet), "Filter should contain empty set");
216+
Assertions.assertFalse(filter.contains(new HashSet<>(Arrays.asList(6, 7, 8))), "Filter should not contain uninserted set");
217+
}
218+
219+
@Test
220+
void testArrayDataType() {
221+
BloomFilter<int[]> filter = new BloomFilter<>(3, 100);
222+
int[] array1 = {1, 2, 3};
223+
int[] array2 = {4, 5};
224+
int[] emptyArray = {};
225+
226+
filter.insert(array1);
227+
filter.insert(array2);
228+
filter.insert(emptyArray);
229+
230+
Assertions.assertTrue(filter.contains(array1), "Filter should contain array1");
231+
Assertions.assertTrue(filter.contains(array2), "Filter should contain array2");
232+
Assertions.assertTrue(filter.contains(emptyArray), "Filter should contain empty array");
233+
Assertions.assertFalse(filter.contains(new int[] {6, 7, 8}), "Filter should not contain different array");
234+
}
235+
236+
@Test
237+
void testSpecialFloatingPointValues() {
238+
BloomFilter<Double> filter = new BloomFilter<>(3, 100);
239+
Double[] specialValues = {Double.NaN, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, -0.0, 0.0};
240+
241+
for (Double value : specialValues) {
242+
filter.insert(value);
243+
}
244+
245+
for (Double value : specialValues) {
246+
Assertions.assertTrue(filter.contains(value), "Filter should contain " + value);
247+
}
248+
}
249+
250+
@Test
251+
void testVerySmallBloomFilter() {
252+
BloomFilter<String> smallFilter = new BloomFilter<>(1, 5);
253+
smallFilter.insert("test1");
254+
smallFilter.insert("test2");
255+
256+
Assertions.assertTrue(smallFilter.contains("test1"));
257+
Assertions.assertTrue(smallFilter.contains("test2"));
258+
}
116259
}

0 commit comments

Comments
 (0)