use rapid_recorder::{RRDuplicateEventIdHandling, prelude::*};
use std::thread;
use std::time::Duration;
use strum_macros::EnumIter;
#[repr(u32)]
#[derive(EnumIter)]
enum TestReadings {
Reading0,
Reading1,
Reading2,
}
impl_rapid_recorder_named_usize!(TestReadings);
#[test]
fn test_basic_recording() {
let recorder: RapidRecorder<_, TestReadings> = RapidRecorder::new(1000, 3);
let mut group = recorder.add_group(
RapidRecorderGroup::new()
.sample_rate(DefaultSamplingFrequency::EveryOne)
.index_type(DefaultIndexDimmension::Step),
);
group.start_record(1);
group.add(TestReadings::Reading0, 10.0);
group.add(TestReadings::Reading1, 20.0);
group.start_record(2);
let event = recorder.convenient_pop().unwrap();
assert_eq!(event.id, 1);
assert_eq!(event.values.get(&TestReadings::Reading0), Some(&10.0));
assert_eq!(event.values.get(&TestReadings::Reading1), Some(&20.0));
}
#[test]
fn test_sampling_frequency() {
let recorder: RapidRecorder<_, TestReadings> = RapidRecorder::new(1000, 3);
let mut every_one = recorder.add_group(
RapidRecorderGroup::new()
.sample_rate(DefaultSamplingFrequency::EveryOne)
.index_type(DefaultIndexDimmension::Step),
);
let mut every_ten = recorder.add_group(
RapidRecorderGroup::new()
.sample_rate(DefaultSamplingFrequency::EveryTen)
.index_type(DefaultIndexDimmension::Step),
);
for i in 0..20 {
every_one.start_record(i);
every_one.add(TestReadings::Reading0, i as f64);
every_ten.start_record(i);
every_ten.add(TestReadings::Reading0, i as f64);
}
every_one._save_record();
every_ten._save_record();
let sorted =
recorder.sorted_history_with_duplicate_handling(RRDuplicateEventIdHandling::KeepOnlyFirst);
let mut one_count = 0;
let mut ten_count = 0;
for (_, events) in sorted {
for event in events {
if event.id < 20 {
if event.id % 10 == 0 {
ten_count += 1;
}
one_count += 1;
}
}
}
assert_eq!(one_count, 20);
assert_eq!(ten_count, 2);
}