Move binned type, add tests

This commit is contained in:
Dominik Werder
2022-12-05 12:01:19 +01:00
parent 4a250227cd
commit aa74fd4f25
33 changed files with 1988 additions and 699 deletions

View File

@@ -1,8 +1,8 @@
pub mod api4;
pub mod histo;
pub mod query;
pub mod status;
pub mod streamext;
pub mod api4;
use crate::log::*;
use bytes::Bytes;
@@ -1399,9 +1399,9 @@ impl fmt::Debug for BinnedGridSpec {
#[derive(Clone, Debug)]
pub struct BinnedRange {
pub grid_spec: BinnedGridSpec,
pub offset: u64,
pub count: u64,
grid_spec: BinnedGridSpec,
offset: u64,
bin_count: u64,
}
impl BinnedRange {
@@ -1435,7 +1435,7 @@ impl BinnedRange {
let offset = ts1 / bl;
let ret = Self {
grid_spec,
count,
bin_count: count,
offset,
};
break Ok(ret);
@@ -1444,6 +1444,14 @@ impl BinnedRange {
}
}
pub fn bin_count(&self) -> u64 {
self.bin_count
}
pub fn grid_spec(&self) -> &BinnedGridSpec {
&self.grid_spec
}
pub fn get_range(&self, ix: u32) -> NanoRange {
NanoRange {
beg: (self.offset + ix as u64) * self.grid_spec.bin_t_len,
@@ -1454,14 +1462,14 @@ impl BinnedRange {
pub fn full_range(&self) -> NanoRange {
NanoRange {
beg: self.offset * self.grid_spec.bin_t_len,
end: (self.offset + self.count) * self.grid_spec.bin_t_len,
end: (self.offset + self.bin_count) * self.grid_spec.bin_t_len,
}
}
pub fn edges(&self) -> Vec<u64> {
let mut ret = Vec::new();
let mut t = self.offset * self.grid_spec.bin_t_len;
let end = (self.offset + self.count) * self.grid_spec.bin_t_len;
let end = (self.offset + self.bin_count) * self.grid_spec.bin_t_len;
while t <= end {
ret.push(t);
t += self.grid_spec.bin_t_len;
@@ -1470,6 +1478,36 @@ impl BinnedRange {
}
}
#[cfg(test)]
mod test_binned_range {
use super::*;
#[test]
fn binned_range_00() {
let range = NanoRange {
beg: HOUR * 72,
end: HOUR * 73,
};
let range = BinnedRange::covering_range(range, 10).unwrap();
assert_eq!(range.bin_count(), 12);
assert_eq!(range.edges()[0], HOUR * 72);
assert_eq!(range.edges()[2], HOUR * 72 + MIN * 5 * 2);
}
#[test]
fn binned_range_01() {
let range = NanoRange {
beg: MIN * 20 + SEC * 10,
end: HOUR * 10 + MIN * 20 + SEC * 30,
};
let range = BinnedRange::covering_range(range, 10).unwrap();
assert_eq!(range.bin_count(), 11);
assert_eq!(range.edges()[0], HOUR * 0);
assert_eq!(range.edges()[1], HOUR * 1);
assert_eq!(range.edges()[11], HOUR * 11);
}
}
#[derive(Clone, Serialize, Deserialize)]
pub enum AggKind {
EventBlobs,