in below/store/src/advance.rs [529:601]
fn store_operation_test_get_adjacent_sample_at_timestamp() {
let mut store = FakeStore::new();
macro_rules! check_sample {
($query:tt, $direction:expr, $expected_sample:expr) => {
let timestamp = util::get_system_time($query);
let res =
store.get_adjacent_sample_at_timestamp(timestamp, $direction, &get_logger());
assert_eq!(
store
.to_model(&res.expect("Failed to get sample"))
.expect("Failed to convert sample to model"),
$expected_sample
);
};
($query:tt, $direction:expr) => {
let timestamp = util::get_system_time($query);
let res =
store.get_adjacent_sample_at_timestamp(timestamp, $direction, &get_logger());
assert!(res.is_none());
};
}
// case 1: timestamp at the available sample
for direction in [Direction::Forward, Direction::Reverse] {
// [3, 10, 20, 50]
check_sample!(
10, /*query*/
direction,
"3_10_10_7" /*old_new_timestamp_duraion*/
);
}
// case 2: timestamp between two available samples
// [3, 10, 20, 50]
check_sample!(
7, /*query*/
Direction::Forward,
"3_10_10_7" /*old_new_timestamp_duraion*/
);
check_sample!(
7, /*query*/
Direction::Reverse,
"3_3" /*new_timestamp*/
);
check_sample!(
12, /*query*/
Direction::Reverse,
"3_10_10_7" /*old_new_timestamp_duraion*/
);
// case 3: timestamp before first sample
// [3, 10, 20, 50]
check_sample!(
0, /*query*/
Direction::Forward,
"3_3" /*new_timestamp*/
);
check_sample!(0 /*query*/, Direction::Reverse);
// case 4: timestamp after the last sample
// [3, 10, 20, 50]
check_sample!(
60, /*query*/
Direction::Reverse,
"20_50_50_30" /*old_new_timestamp_duraion*/
);
check_sample!(60 /*query*/, Direction::Forward);
}