use rapid_recorder::prelude::*;
use rayon::prelude::*;
use strum_macros::EnumIter;
#[repr(u32)]
#[derive(EnumIter)]
enum TestReadings {
Reading0,
Reading1,
Reading2,
}
impl_rapid_recorder_named_usize!(TestReadings);
#[test]
fn test_parallel_add() {
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);
(0..100).into_par_iter().for_each(|i| {
let reading = match i % 3 {
0 => TestReadings::Reading0,
1 => TestReadings::Reading1,
_ => TestReadings::Reading2,
};
group.add(reading, 5.0);
});
group.start_record(2);
let event = recorder.convenient_pop().unwrap();
assert_eq!(event.id, 1);
assert!(
event.values.contains_key(&TestReadings::Reading0)
|| event.values.contains_key(&TestReadings::Reading1)
|| event.values.contains_key(&TestReadings::Reading2)
);
}
#[test]
fn test_parallel_multi_level() {
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);
(0..3).into_par_iter().for_each(|j| {
match j {
0 => {
group.add(TestReadings::Reading0, 5.0);
}
1 => {
group.add(TestReadings::Reading1, 10.0);
}
2 => {
(0..3).into_par_iter().for_each(|k| match k {
0 => {
group.add(TestReadings::Reading0, 15.0);
}
1 => {
group.add(TestReadings::Reading1, 20.0);
}
_ => {
group.add(TestReadings::Reading2, 25.0);
}
});
group.add(TestReadings::Reading2, 30.0);
}
_ => {}
}
});
group.start_record(2);
assert_eq!(recorder.raw_history().len(), 1);
}