downsample 0.0.2

keep downsampled history of data over long period of time
Documentation
#![feature(test)]
#![allow(clippy::unit_arg)]
extern crate test;
use test::Bencher;

use downsample::{Algorithm, FixedFrequencyBuilder};

#[bench]
fn single_push(b: &mut Bencher) {
    let mut s = FixedFrequencyBuilder::new(100, 100)
        .level::<{ Algorithm::Average }>(59, 100)
        .level::<{ Algorithm::Average }>(59, 60)
        .level::<{ Algorithm::Average }>(23, 60)
        .build();
    b.iter(|| s.push(123.456));
}

#[bench]
fn push_1_000_000(b: &mut Bencher) {
    let mut s = FixedFrequencyBuilder::new(100, 100)
        .level::<{ Algorithm::Average }>(59, 100)
        .level::<{ Algorithm::Average }>(59, 60)
        .level::<{ Algorithm::Average }>(23, 60)
        .build();
    b.iter(|| {
        for _ in 0..1_000_000 {
            test::black_box(s.push(123.456));
        }
    });
}

#[bench]
fn read_1_000_000(b: &mut Bencher) {
    let mut s = FixedFrequencyBuilder::new(100, 100)
        .level::<{ Algorithm::Average }>(59, 100)
        .level::<{ Algorithm::Average }>(59, 60)
        .level::<{ Algorithm::Average }>(23, 60)
        .build();
    for i in 0..10000 {
        s.push(i as f32 + 7.31);
    }
    b.iter(|| {
        for _ in 0..1_000_000 {
            test::black_box(s.get_back_by_level(1, 12));
        }
    })
}