WIP
This commit is contained in:
20
streams/src/boxed.rs
Normal file
20
streams/src/boxed.rs
Normal file
@@ -0,0 +1,20 @@
|
||||
use futures_util::stream::StreamExt;
|
||||
use futures_util::Stream;
|
||||
use items_0::on_sitemty_data;
|
||||
use items_0::streamitem::Sitemty;
|
||||
use items_0::transform::EventStream;
|
||||
use items_0::Events;
|
||||
|
||||
pub fn boxed_event_stream<T, S>(inp: S) -> EventStream
|
||||
where
|
||||
T: Events,
|
||||
S: Stream<Item = Sitemty<T>> + Send + 'static,
|
||||
{
|
||||
let stream = inp.map(|x| {
|
||||
let x = on_sitemty_data!(x, |x| Ok(StreamItem::DataItem(RangeCompletableItem::Data(
|
||||
Box::new(x) as Box<dyn Events>
|
||||
))));
|
||||
x
|
||||
});
|
||||
EventStream(Box::pin(stream))
|
||||
}
|
||||
@@ -3,7 +3,9 @@ use futures_util::FutureExt;
|
||||
use futures_util::Stream;
|
||||
use items_0::container::ByteEstimate;
|
||||
use items_0::streamitem::sitem_data;
|
||||
use items_0::streamitem::RangeCompletableItem;
|
||||
use items_0::streamitem::Sitemty;
|
||||
use items_0::streamitem::StreamItem;
|
||||
use items_0::Appendable;
|
||||
use items_0::Empty;
|
||||
use items_2::channelevents::ChannelEvents;
|
||||
@@ -21,6 +23,8 @@ pub struct GenerateI32 {
|
||||
#[allow(unused)]
|
||||
c1: u64,
|
||||
timeout: Option<Pin<Box<dyn Future<Output = ()> + Send>>>,
|
||||
done: bool,
|
||||
done_range_final: bool,
|
||||
}
|
||||
|
||||
impl GenerateI32 {
|
||||
@@ -38,6 +42,8 @@ impl GenerateI32 {
|
||||
tsend,
|
||||
c1: 0,
|
||||
timeout: None,
|
||||
done: false,
|
||||
done_range_final: false,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,8 +73,12 @@ impl Stream for GenerateI32 {
|
||||
fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll<Option<Self::Item>> {
|
||||
use Poll::*;
|
||||
loop {
|
||||
break if self.ts >= self.tsend {
|
||||
break if self.done_range_final {
|
||||
Ready(None)
|
||||
} else if self.ts >= self.tsend {
|
||||
self.done = true;
|
||||
self.done_range_final = true;
|
||||
Ready(Some(Ok(StreamItem::DataItem(RangeCompletableItem::RangeComplete))))
|
||||
} else if false {
|
||||
// To use the generator without throttling, use this scope
|
||||
Ready(Some(self.make_batch()))
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
pub mod boxed;
|
||||
pub mod collect;
|
||||
pub mod dtflags;
|
||||
pub mod filechunkread;
|
||||
|
||||
@@ -16,12 +16,14 @@ use items_2::binsdim0::BinsDim0;
|
||||
use items_2::channelevents::ChannelEvents;
|
||||
use items_2::channelevents::ConnStatus;
|
||||
use items_2::channelevents::ConnStatusEvent;
|
||||
use items_2::eventsdim0::EventsDim0;
|
||||
use items_2::testgen::make_some_boxed_d0_f32;
|
||||
use netpod::range::evrange::NanoRange;
|
||||
use netpod::range::evrange::SeriesRange;
|
||||
use netpod::timeunits::MS;
|
||||
use netpod::timeunits::SEC;
|
||||
use netpod::BinnedRangeEnum;
|
||||
use query::transform::TransformQuery;
|
||||
use serde_json::Value as JsValue;
|
||||
use std::collections::VecDeque;
|
||||
use std::time::Duration;
|
||||
@@ -209,6 +211,10 @@ fn time_bin_02() -> Result<(), Error> {
|
||||
let s = String::from_utf8_lossy(&d);
|
||||
eprintln!("{s}");
|
||||
let jsval: JsValue = serde_json::from_slice(&d)?;
|
||||
{
|
||||
let ts_anchor = jsval.get("tsAnchor").unwrap().as_u64().unwrap();
|
||||
assert_eq!(ts_anchor, 1200);
|
||||
}
|
||||
{
|
||||
let counts = jsval.get("counts").unwrap().as_array().unwrap();
|
||||
assert_eq!(counts.len(), expected_bin_count);
|
||||
@@ -232,6 +238,10 @@ fn time_bin_02() -> Result<(), Error> {
|
||||
assert_eq!((40 + ts1ms.as_u64().unwrap() / 100) % 1000, max.as_u64().unwrap());
|
||||
}
|
||||
}
|
||||
{
|
||||
let range_final = jsval.get("rangeFinal").unwrap().as_bool().unwrap();
|
||||
assert_eq!(range_final, true);
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
};
|
||||
@@ -239,3 +249,12 @@ fn time_bin_02() -> Result<(), Error> {
|
||||
}
|
||||
|
||||
// TODO add test case to observe RangeComplete after binning.
|
||||
|
||||
#[test]
|
||||
fn transform_chain_correctness_01() -> Result<(), Error> {
|
||||
type STY = f32;
|
||||
let tq = TransformQuery::default_time_binned();
|
||||
let empty = EventsDim0::<STY>::empty();
|
||||
tq.build_event_transform(empty.into())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user