simple/
simple.rs

1use bloomlib::BloomFilter;
2
3fn main() {
4    // Configuration
5    let expected_elements = 100_000;
6
7    // You can initialize with a false positive rate
8    let fp_rate = 0.01;
9    let mut filter = BloomFilter::new(expected_elements, fp_rate);
10
11    // OR initialize using a specific hash count (commented out example)
12    // let hashes = 7u32;
13    // let mut filter = BloomFilter::new(expected_elements, hashes);
14
15    println!("Initializing Bloom Filter...");
16    println!("Expected elements: {}", expected_elements);
17    println!("Target False Positive Rate: {}", fp_rate);
18    println!("Actual Hash Count (k): {}", filter.hash_count());
19
20    // Insert data
21    println!("Inserting values 0 to {}...", expected_elements);
22    for i in 0..expected_elements {
23        filter.insert(&i);
24    }
25
26    // Check true positives
27    println!("Checking 10 known values...");
28    let mut present_count = 0;
29    for i in 0..10 {
30        if filter.contains(&i) {
31            present_count += 1;
32        }
33    }
34    println!("Found {}/10 known values (Should be 10)", present_count);
35
36    // Check false positives
37    // We check numbers outside the inserted range.
38    let check_range_start = expected_elements;
39    let check_range_end = expected_elements + 10_000;
40    println!(
41        "Checking range {} to {} for false positives...",
42        check_range_start, check_range_end
43    );
44
45    let mut fp_count = 0;
46    for i in check_range_start..check_range_end {
47        if filter.contains(&i) {
48            fp_count += 1;
49        }
50    }
51
52    let actual_fp_rate = fp_count as f64 / 10_000.0;
53    println!("False Positives found: {}", fp_count);
54    println!(
55        "Actual FP Rate: {:.4} (Target: {})",
56        actual_fp_rate, actual_fp_rate
57    );
58}