use crate::{task, DagRunner, TaskHandle};
#[tokio::test]
async fn test_unit_struct_with_state() {
struct StatefulTask {
value: i32,
}
impl StatefulTask {
fn new(value: i32) -> Self {
Self { value }
}
}
#[task]
impl StatefulTask {
async fn run(&self) -> i32 {
self.value * 2
}
}
let mut dag = DagRunner::new();
let builder = dag.add_task(StatefulTask::new(21));
let handle = builder;
let mut output = dag
.run(|fut| async move { tokio::spawn(fut).await.unwrap() })
.await
.unwrap();
assert_eq!(output.get(handle), 42);
}
#[test]
fn test_taskbuilder_conversion_without_running() {
struct TestTask;
#[task]
impl TestTask {
async fn run(&self) -> String {
"test".to_string()
}
}
let mut dag = DagRunner::new();
let builder = dag.add_task(TestTask);
let builder_id = builder.id;
let handle: TaskHandle<String> = builder;
assert_eq!(handle.id, builder_id);
}