Skip to content

Commit 066a109

Browse files
authored
testing: improve BloomFilterTest (#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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy