ss/
ss.rs

1use std::env::args;
2use std::fs::read_to_string;
3use std::time::{Duration, Instant};
4use fermentation::ForwardDecay;
5use fermentation::g::Exponential;
6use fermentation::space_saving::BTreeSpaceSaving;
7
8fn main() {
9    let path = args().skip(1).next().expect("must pass an input file");
10    let contents = read_to_string(path.as_str()).expect("unable to open file");
11    let start = Instant::now();
12    let decay = ForwardDecay::new(start, Exponential::rate(0.001, Duration::from_secs(60)));
13    let mut ss = BTreeSpaceSaving::new(8, decay);
14
15    let mut hits = 0;
16
17    for e in contents.split_whitespace() {
18        hits += 1;
19        ss.hit(e);
20    }
21
22    let top = ss.top(2).expect("unable to guarantee top hitters");
23    let frequent = ss.frequent(0.1);
24    let end = Instant::now();
25
26    println!("Elapse: {}", (end - start).as_secs_f64());
27    println!("Top elements: {:?}", &top);
28
29    for (index, e) in top.into_iter().enumerate() {
30        println!("Element {index} is {} with {:?}", e, ss.get(e, end));
31    }
32
33    println!("Frequent elements: {:?}", frequent);
34    println!("Total hits: {}, Decayed hits: {}", hits, ss.hits(end));
35}