|
1 | 1 | package com.thealgorithms.datastructures.bloomfilter;
|
2 | 2 |
|
| 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; |
3 | 10 | import org.junit.jupiter.api.Assertions;
|
4 | 11 | import org.junit.jupiter.api.BeforeEach;
|
5 | 12 | import org.junit.jupiter.api.Test;
|
@@ -113,4 +120,140 @@ void testBoundaryConditions() {
|
113 | 120 | Assertions.assertTrue(filter.contains("d"), "Filter should contain 'd'");
|
114 | 121 | Assertions.assertFalse(filter.contains("e"), "Filter should not contain 'e' which was not inserted");
|
115 | 122 | }
|
| 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 | + } |
116 | 259 | }
|
0 commit comments