cross_level_test/
cross_level_test.rs

1// Clear test case for cross-level edges
2use ascii_dag::graph::DAG;
3
4fn main() {
5    println!("=== Testing Cross-Level Edge Rendering ===\n");
6
7    // What we want to see:
8    // Level 0: A
9    // Level 1: B (A->B)
10    // Level 2: C (B->C AND A->C directly)
11    //
12    // Expected: A should have TWO edges - one to B, one to C
13
14    println!("Graph structure:");
15    println!("  A (level 0)");
16    println!("  ├─→ B (level 1) - normal edge");
17    println!("  │   └─→ C (level 2) - normal edge");
18    println!("  └─────→ C (level 2) - CROSS-LEVEL edge (skips level 1)\n");
19
20    let mut dag = DAG::new();
21    dag.add_node(1, "A");
22    dag.add_node(2, "B");
23    dag.add_node(3, "C");
24
25    dag.add_edge(1, 2); // A -> B (level 0 -> 1)
26    dag.add_edge(2, 3); // B -> C (level 1 -> 2)
27    dag.add_edge(1, 3); // A -> C (level 0 -> 2, CROSS-LEVEL!)
28
29    println!("Actual rendering:");
30    println!("{}", dag.render());
31
32    println!("\n---\n");
33
34    // Another clear example
35    println!("Second test - three levels with cross-level:");
36    println!("  Root (level 0)");
37    println!("  ├─→ Mid (level 1)");
38    println!("  │   └─→ End (level 2)");
39    println!("  └─────→ End (level 2) - CROSS-LEVEL\n");
40
41    let mut dag2 = DAG::new();
42    dag2.add_node(1, "Root");
43    dag2.add_node(2, "Mid");
44    dag2.add_node(3, "End");
45
46    dag2.add_edge(1, 2); // Root -> Mid
47    dag2.add_edge(2, 3); // Mid -> End
48    dag2.add_edge(1, 3); // Root -> End (CROSS-LEVEL)
49
50    println!("Actual rendering:");
51    println!("{}", dag2.render());
52
53    println!("\nDoes 'End' show TWO incoming edges (one from Mid, one from Root)?");
54}