cross_level/
cross_level.rs

1// Example demonstrating cross-level edges
2// Previously, edges that skipped levels were silently dropped
3// Now they render correctly
4
5use ascii_dag::graph::DAG;
6
7fn main() {
8    println!("=== Cross-Level Edge Examples ===\n");
9
10    // Example 1: Simple cross-level edge
11    println!("1. Simple cross-level (Root -> Middle -> End, plus Root -> End directly):");
12    let mut dag = DAG::new();
13    dag.add_node(1, "Root");
14    dag.add_node(2, "Middle");
15    dag.add_node(3, "End");
16
17    dag.add_edge(1, 2); // Root -> Middle
18    dag.add_edge(2, 3); // Middle -> End
19    dag.add_edge(1, 3); // Root -> End (cross-level!)
20
21    println!("{}\n", dag.render());
22
23    // Example 2: Multiple cross-level edges
24    println!("2. Multiple cross-level edges:");
25    let mut dag = DAG::new();
26    dag.add_node(1, "A");
27    dag.add_node(2, "B");
28    dag.add_node(3, "C");
29    dag.add_node(4, "D");
30
31    dag.add_edge(1, 2); // Level 0 -> 1
32    dag.add_edge(2, 3); // Level 1 -> 2
33    dag.add_edge(3, 4); // Level 2 -> 3
34    dag.add_edge(1, 4); // Level 0 -> 3 (cross-level!)
35
36    println!("{}\n", dag.render());
37
38    // Example 3: Complex with multiple paths
39    println!("3. Complex graph with shortcuts:");
40    let mut dag = DAG::new();
41    dag.add_node(1, "Start");
42    dag.add_node(2, "Parse");
43    dag.add_node(3, "Compile");
44    dag.add_node(4, "Link");
45    dag.add_node(5, "Done");
46
47    dag.add_edge(1, 2); // Normal flow
48    dag.add_edge(2, 3);
49    dag.add_edge(3, 4);
50    dag.add_edge(4, 5);
51    dag.add_edge(1, 5); // Direct shortcut from Start to Done!
52
53    println!("{}\n", dag.render());
54}