Address soundness hole in cycle prevention
This commit is contained in:
1 parent
4ad88bcd68
commit
f82205baf4
80 files changed
+730
-717
No files matched your search
@@ -9,9 +9,9 @@ use futures::FutureExt;
|
||||
async fn test_example_a_fan_out() {
|
||||
let dag = DagRunner::new();
|
||||
|
||||
let base = dag.add_task(Seed::new(10)); // Input=() → no depends_on, returns TaskHandle
|
||||
let plus1 = dag.add_task(Inc::new()).depends_on(&base); // 11
|
||||
let plus2 = dag.add_task(Inc::new()).depends_on(&base); // 11
|
||||
let base: TaskHandle<_> = dag.add_task(Seed::new(10)).into(); // Input=() → no depends_on, returns TaskHandle
|
||||
let plus1 = dag.add_task(Inc::new()).depends_on(base); // 11
|
||||
let plus2 = dag.add_task(Inc::new()).depends_on(base); // 11
|
||||
|
||||
dag.run(|fut| tokio::spawn(fut).map(Result::unwrap))
|
||||
.await
|
||||
@@ -29,7 +29,7 @@ async fn test_example_b_fan_in() {
|
||||
let n = dag.add_task(task_fn(|_: ()| async { 42usize }));
|
||||
let f = dag.add_task(task_fn(|_: ()| async { true }));
|
||||
|
||||
let output = dag.add_task(OutputResult::new()).depends_on((&s, &n, &f));
|
||||
let output = dag.add_task(OutputResult::new()).depends_on((s, n, f));
|
||||
|
||||
dag.run(|fut| tokio::spawn(fut).map(Result::unwrap))
|
||||
.await
|
||||
@@ -42,11 +42,11 @@ async fn test_example_c_many_to_many() {
|
||||
let dag = DagRunner::new();
|
||||
|
||||
let x = dag.add_task(Seed::new(2));
|
||||
let y = dag.add_task(Seed::new(3));
|
||||
let y = dag.add_task(Seed::new(3)).into();
|
||||
let z = dag.add_task(Seed::new(5));
|
||||
|
||||
let sum_xy = dag.add_task(Add::new()).depends_on((&x, &y)); // 5
|
||||
let prod_yz = dag.add_task(Mul::new()).depends_on((&y, &z)); // 15
|
||||
let sum_xy = dag.add_task(Add::new()).depends_on((x, &y)); // 5
|
||||
let prod_yz = dag.add_task(Mul::new()).depends_on((&y, z)); // 15
|
||||
let total = dag.add_task(Add::new()).depends_on((&sum_xy, &prod_yz)); // 20
|
||||
|
||||
dag.run(|fut| tokio::spawn(fut).map(Result::unwrap))
|
||||
@@ -59,12 +59,14 @@ async fn test_example_c_many_to_many() {
|
||||
async fn test_single_input_forms() {
|
||||
let dag = DagRunner::new();
|
||||
|
||||
let s = dag.add_task(task_fn(|_: ()| async { "hello".to_owned() }));
|
||||
let s = dag
|
||||
.add_task(task_fn(|_: ()| async { "hello".to_owned() }))
|
||||
.into();
|
||||
|
||||
// Preferred form: &node
|
||||
let upper1 = dag
|
||||
.add_task(task_fn(|s: String| async move { s.to_uppercase() }))
|
||||
.depends_on(&s);
|
||||
.depends_on(s);
|
||||
|
||||
// Also allowed: (&node,)
|
||||
let upper2 = dag
|
||||
|
||||
Reference in new issue
Block a user