This commit is contained in:
TechnoPorg committed 2026-02-11 22:29:54 +01:00
1 parent 86787b3a0d
commit 6f7a58e4c5
10 files changed
+53 -57

No files matched your search

+21 -21
View File
@@ -12,7 +12,7 @@ pub fn bench_dag_execution(c: &mut Criterion) {
rt.block_on(async {
let dag = DagRunner::new();
for i in 0..10 {
dag.add_task(task_fn::<(), _, _>(move |_: ()| { i }));
dag.add_task(task_fn::<(), _, _>(move |_: ()| i));
}
dag.run(|fut| tokio::spawn(fut).map(Result::unwrap))
.await
@@ -26,7 +26,7 @@ pub fn bench_dag_execution(c: &mut Criterion) {
rt.block_on(async {
let dag = DagRunner::new();
for i in 0..100 {
dag.add_task(task_fn::<(), _, _>(move |_: ()| { i }));
dag.add_task(task_fn::<(), _, _>(move |_: ()| i));
}
dag.run(|fut| tokio::spawn(fut).map(Result::unwrap))
.await
@@ -51,61 +51,61 @@ pub fn bench_dag_execution(c: &mut Criterion) {
let t0 = dag.add_task(Value(0));
let t1 = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x + 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x + 1))
.depends_on(t0);
let t2 = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x + 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x + 1))
.depends_on(t1);
let t3 = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x + 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x + 1))
.depends_on(t2);
let t4 = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x + 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x + 1))
.depends_on(t3);
let t5 = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x + 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x + 1))
.depends_on(t4);
let t6 = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x + 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x + 1))
.depends_on(t5);
let t7 = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x + 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x + 1))
.depends_on(t6);
let t8 = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x + 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x + 1))
.depends_on(t7);
let t9 = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x + 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x + 1))
.depends_on(t8);
let t10 = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x + 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x + 1))
.depends_on(t9);
let t11 = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x + 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x + 1))
.depends_on(t10);
let t12 = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x + 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x + 1))
.depends_on(t11);
let t13 = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x + 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x + 1))
.depends_on(t12);
let t14 = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x + 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x + 1))
.depends_on(t13);
let t15 = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x + 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x + 1))
.depends_on(t14);
let t16 = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x + 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x + 1))
.depends_on(t15);
let t17 = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x + 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x + 1))
.depends_on(t16);
let t18 = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x + 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x + 1))
.depends_on(t17);
let _t19 = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x + 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x + 1))
.depends_on(t18);
dag.run(|fut| tokio::spawn(fut).map(Result::unwrap))
+1 -1
View File
@@ -17,7 +17,7 @@ pub fn bench_dag_scaling(c: &mut Criterion) {
rt.block_on(async {
let dag = DagRunner::new();
for i in 0..size {
dag.add_task(task_fn::<(), _, _>(move |_: ()| { i }));
dag.add_task(task_fn::<(), _, _>(move |_: ()| i));
}
dag.run(|fut| tokio::spawn(fut).map(Result::unwrap))
.await
+3 -3
View File
@@ -18,14 +18,14 @@ pub fn bench_deep_chain(c: &mut Criterion) {
let dag = DagRunner::new();
let first: TaskHandle<_> = dag.add_task(task_fn::<(), _, _>(|_: ()| { 0 })).into();
let first: TaskHandle<_> = dag.add_task(task_fn::<(), _, _>(|_: ()| 0)).into();
let mut prev = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x + 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x + 1))
.depends_on(first);
for i in 2..100 {
prev = dag
.add_task(task_fn::<i32, _, _>(move |&x: &i32| { x + i }))
.add_task(task_fn::<i32, _, _>(move |&x: &i32| x + i))
.depends_on(prev);
}
+4 -4
View File
@@ -25,19 +25,19 @@ pub fn bench_etl_pipeline(c: &mut Criterion) {
// Transform each source
let transform1 = dag
.add_task(task_fn::<Vec<_>, _, _>(|data: &Vec<i32>| {
data.into_iter().map(|x| x * 2).collect::<Vec<_>>()
data.iter().map(|x| x * 2).collect::<Vec<_>>()
}))
.depends_on(source1);
let transform2 = dag
.add_task(task_fn::<Vec<_>, _, _>(|data: &Vec<i32>| {
data.into_iter().map(|x| x * 2).collect::<Vec<_>>()
data.iter().map(|x| x * 2).collect::<Vec<_>>()
}))
.depends_on(source2);
let transform3 = dag
.add_task(task_fn::<Vec<_>, _, _>(|data: &Vec<i32>| {
data.into_iter().map(|x| x * 2).collect::<Vec<_>>()
data.iter().map(|x| x * 2).collect::<Vec<_>>()
}))
.depends_on(source3);
@@ -66,7 +66,7 @@ pub fn bench_etl_pipeline(c: &mut Criterion) {
// Load (compute sum)
let load = dag
.add_task(task_fn::<Vec<_>, _, _>(|data: &Vec<i32>| {
data.into_iter().sum::<i32>()
data.iter().sum::<i32>()
}))
.depends_on(validate);
+1 -1
View File
@@ -19,7 +19,7 @@ pub fn bench_large_scale(c: &mut Criterion) {
let dag = DagRunner::new();
for i in 0..10_000 {
dag.add_task(task_fn::<(), _, _>(move |_: ()| { i * 2 }));
dag.add_task(task_fn::<(), _, _>(move |_: ()| i * 2));
}
dag.run(|fut| tokio::spawn(fut).map(Result::unwrap))
+5 -5
View File
@@ -17,18 +17,18 @@ pub fn bench_linear_pipeline(c: &mut Criterion) {
let dag = DagRunner::new();
let a = dag.add_task(task_fn::<(), _, _>(|_: ()| { 1 }));
let a = dag.add_task(task_fn::<(), _, _>(|_: ()| 1));
let b = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x + 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x + 1))
.depends_on(a);
let c = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x * 2 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x * 2))
.depends_on(b);
let d = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x - 1 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x - 1))
.depends_on(c);
let e = dag
.add_task(task_fn::<i32, _, _>(|&x: &i32| { x * 3 }))
.add_task(task_fn::<i32, _, _>(|&x: &i32| x * 3))
.depends_on(d);
dag.run(|fut| tokio::spawn(fut).map(Result::unwrap))
+2 -2
View File
@@ -17,11 +17,11 @@ pub fn bench_wide_fanout(c: &mut Criterion) {
use dagx::{task_fn, DagRunner};
let dag = DagRunner::new();
let source: TaskHandle<_> = dag.add_task(task_fn::<(), _, _>(|_: ()| { 42 })).into();
let source: TaskHandle<_> = dag.add_task(task_fn::<(), _, _>(|_: ()| 42)).into();
// Create 100 tasks that all depend on source
for i in 0..100 {
dag.add_task(task_fn::<i32, _, _>(move |&x: &i32| { x + i }))
dag.add_task(task_fn::<i32, _, _>(move |&x: &i32| x + i))
.depends_on(source);
}
+3 -3
View File
@@ -14,7 +14,7 @@ pub fn bench_10k_breakdown(c: &mut Criterion) {
b.iter(|| {
let dag = DagRunner::new();
for i in 0..10_000 {
dag.add_task(task_fn::<(), _, _>(move |_: ()| { i }));
dag.add_task(task_fn::<(), _, _>(move |_: ()| i));
}
});
});
@@ -25,7 +25,7 @@ pub fn bench_10k_breakdown(c: &mut Criterion) {
rt.block_on(async {
let dag = DagRunner::new();
for i in 0..10_000 {
dag.add_task(task_fn::<(), _, _>(move |_: ()| { i }));
dag.add_task(task_fn::<(), _, _>(move |_: ()| i));
}
dag.run(|fut| tokio::spawn(fut).map(Result::unwrap))
.await
@@ -39,7 +39,7 @@ pub fn bench_10k_breakdown(c: &mut Criterion) {
// Pre-build the DAG outside the measurement
let dag = DagRunner::new();
for i in 0..10_000 {
dag.add_task(task_fn::<(), _, _>(move |_: ()| { i }));
dag.add_task(task_fn::<(), _, _>(move |_: ()| i));
}
b.iter(|| {
+1 -2
View File
@@ -113,11 +113,10 @@ async fn main() {
// Step 7: Retrieve results
//
// Use .get() with a TaskHandle to retrieve the output.
// Results are cloned, so you can retrieve them multiple times.
// Results are not cloned, so you can only retrieve them once.
println!("\nResult: {}", dag.get(sum).unwrap());
// Note: You can also retrieve intermediate results
assert_eq!(dag.get(x).unwrap(), 2);
assert_eq!(dag.get(y).unwrap(), 3);
assert_eq!(dag.get(sum).unwrap(), 5);
}
+12 -15
View File
@@ -17,7 +17,7 @@ async fn test_task_fn_creation_and_execution() {
// Test the Task trait implementation
let result = task
.run(TaskInput::new(
vec![Arc::new(42) as Arc<dyn Any + Send + Sync + 'static>].iter(),
[Arc::new(42) as Arc<dyn Any + Send + Sync + 'static>].iter(),
))
.await;
assert_eq!(result, 84);
@@ -30,7 +30,7 @@ async fn test_task_fn_with_unit_input() {
let result = task
.run(TaskInput::new(
vec![Arc::new(()) as Arc<dyn Any + Send + Sync + 'static>].iter(),
[Arc::new(()) as Arc<dyn Any + Send + Sync + 'static>].iter(),
))
.await;
assert_eq!(result, 100);
@@ -43,7 +43,7 @@ async fn test_task_fn_with_tuple_input() {
let result = task
.run(TaskInput::new(
vec![
[
Arc::new(10) as Arc<dyn Any + Send + Sync + 'static>,
Arc::new(20) as Arc<dyn Any + Send + Sync + 'static>,
]
@@ -56,15 +56,12 @@ async fn test_task_fn_with_tuple_input() {
#[tokio::test]
async fn test_task_fn_with_string_input() {
// Test task_fn with String input
let task = task_fn::<String, _, _>(|input: &String| {
let len = input.len();
len
});
let task = task_fn::<String, _, _>(|input: &String| input.len());
let test_string = String::from("hello");
let result = task
.run(TaskInput::new(
vec![Arc::new(test_string) as Arc<dyn Any + Send + Sync + 'static>].iter(),
[Arc::new(test_string) as Arc<dyn Any + Send + Sync + 'static>].iter(),
))
.await;
assert_eq!(result, 5);
@@ -77,7 +74,7 @@ async fn test_task_fn_with_complex_output() {
let result = task
.run(TaskInput::new(
vec![Arc::new(5) as Arc<dyn Any + Send + Sync + 'static>].iter(),
[Arc::new(5) as Arc<dyn Any + Send + Sync + 'static>].iter(),
))
.await;
assert_eq!(result, vec![5, 10, 15]);
@@ -91,7 +88,7 @@ async fn test_task_fn_stateful_closure() {
let result = task
.run(TaskInput::new(
vec![Arc::new(7) as Arc<dyn Any + Send + Sync + 'static>].iter(),
[Arc::new(7) as Arc<dyn Any + Send + Sync + 'static>].iter(),
))
.await;
assert_eq!(result, 21);
@@ -124,7 +121,7 @@ async fn test_custom_task_implementation() {
let result1 = task
.run(TaskInput::new(
vec![Arc::new(5) as Arc<dyn Any + Send + Sync + 'static>].iter(),
[Arc::new(5) as Arc<dyn Any + Send + Sync + 'static>].iter(),
))
.await;
assert_eq!(result1, 15);
@@ -160,7 +157,7 @@ async fn test_task_fn_single_call() {
assert_eq!(
task.run(TaskInput::new(
vec![Arc::new(1) as Arc<dyn Any + Send + Sync + 'static>].iter()
[Arc::new(1) as Arc<dyn Any + Send + Sync + 'static>].iter()
))
.await,
2
@@ -180,7 +177,7 @@ async fn test_task_fn_with_result_type() {
assert_eq!(
task.run(TaskInput::new(
vec![Arc::new(5) as Arc<dyn Any + Send + Sync + 'static>].iter()
[Arc::new(5) as Arc<dyn Any + Send + Sync + 'static>].iter()
))
.await,
Ok(10)
@@ -194,7 +191,7 @@ async fn test_task_fn_with_option_type() {
assert_eq!(
task.run(TaskInput::new(
vec![Arc::new(5) as Arc<dyn Any + Send + Sync + 'static>].iter()
[Arc::new(5) as Arc<dyn Any + Send + Sync + 'static>].iter()
))
.await,
Some(10)
@@ -210,7 +207,7 @@ async fn test_task_fn_explicit_trait_call() {
// Explicitly call the Task trait's run method
let result = Task::run(
task,
TaskInput::new(vec![Arc::new(10) as Arc<dyn Any + Send + Sync + 'static>].iter()),
TaskInput::new([Arc::new(10) as Arc<dyn Any + Send + Sync + 'static>].iter()),
)
.await;
assert_eq!(result, 30);