1use ascii_dag::graph::DAG;
2
3fn main() {
4 println!("=== Stress Test: Breaking the Renderer ===\n");
5
6 println!("1. Mixed Label Lengths:");
8 let dag = DAG::from_edges(
9 &[
10 (1, "A"),
11 (2, "VeryVeryVeryLongErrorNameThatShouldBreakAlignment"),
12 (3, "B"),
13 (4, "AnotherExtremelyLongDiagnosticMessageHere"),
14 (5, "C"),
15 ],
16 &[
17 (1, 2), (2, 3), (3, 4), (4, 5), ],
22 );
23 println!("{}\n", dag.render());
24
25 println!("2. Extreme Convergence (10 errors -> 1):");
27 let mut dag = DAG::new();
28 dag.add_node(1, "E1");
29 dag.add_node(2, "E2");
30 dag.add_node(3, "E3");
31 dag.add_node(4, "E4");
32 dag.add_node(5, "E5");
33 dag.add_node(6, "E6");
34 dag.add_node(7, "E7");
35 dag.add_node(8, "E8");
36 dag.add_node(9, "E9");
37 dag.add_node(10, "E10");
38 dag.add_node(11, "Final");
39
40 for i in 1..=10 {
41 dag.add_edge(i, 11);
42 }
43 println!("{}\n", dag.render());
44
45 println!("3. Extreme Divergence (1 -> 8):");
47 let dag = DAG::from_edges(
48 &[
49 (1, "Root"),
50 (2, "Child1"),
51 (3, "Child2"),
52 (4, "Child3"),
53 (5, "Child4"),
54 (6, "Child5"),
55 (7, "Child6"),
56 (8, "Child7"),
57 (9, "Child8"),
58 ],
59 &[
60 (1, 2),
61 (1, 3),
62 (1, 4),
63 (1, 5),
64 (1, 6),
65 (1, 7),
66 (1, 8),
67 (1, 9),
68 ],
69 );
70 println!("{}\n", dag.render());
71
72 println!("4. Complex Multi-Layer DAG:");
74 let dag = DAG::from_edges(
75 &[
76 (1, "L1A"),
77 (2, "L1B"),
78 (3, "L1C"), (4, "L2A"),
80 (5, "L2B"), (6, "L3A"),
82 (7, "L3B"),
83 (8, "L3C"), (9, "Final"), ],
86 &[
87 (1, 4),
89 (2, 4),
90 (3, 5),
91 (4, 6),
93 (4, 7),
94 (5, 7),
95 (5, 8),
96 (6, 9),
98 (7, 9),
99 (8, 9),
100 ],
101 );
102 println!("{}\n", dag.render());
103
104 println!("5. Single Character Labels:");
106 let dag = DAG::from_edges(
107 &[(1, "A"), (2, "B"), (3, "C"), (4, "D"), (5, "E")],
108 &[(1, 3), (2, 3), (3, 4), (3, 5)],
109 );
110 println!("{}\n", dag.render());
111
112 println!("6. Empty/Minimal Labels:");
114 let dag = DAG::from_edges(&[(1, ""), (2, "X"), (3, "")], &[(1, 2), (2, 3)]);
115 println!("{}\n", dag.render());
116
117 println!("7. Unicode Characters in Labels:");
119 let dag = DAG::from_edges(
120 &[(1, "🔴 Error"), (2, "⚠️ Warning"), (3, "✓ Fixed")],
121 &[(1, 2), (2, 3)],
122 );
123 println!("{}\n", dag.render());
124
125 println!("8. Mixed Lengths + Convergence:");
127 let dag = DAG::from_edges(
128 &[
129 (1, "ShortError1"),
130 (2, "ThisIsAnExtremelyLongErrorMessageThatGoesOnAndOn"),
131 (3, "Err3"),
132 (4, "AnotherVeryLongDiagnosticNameHereForTesting"),
133 (5, "Result"),
134 ],
135 &[(1, 5), (2, 5), (3, 5), (4, 5)],
136 );
137 println!("{}\n", dag.render());
138
139 println!("9. Deep Nesting (10 levels):");
141 let dag = DAG::from_edges(
142 &[
143 (1, "Level1"),
144 (2, "Level2"),
145 (3, "Level3"),
146 (4, "Level4"),
147 (5, "Level5"),
148 (6, "Level6"),
149 (7, "Level7"),
150 (8, "Level8"),
151 (9, "Level9"),
152 (10, "Level10"),
153 ],
154 &[
155 (1, 2),
156 (2, 3),
157 (3, 4),
158 (4, 5),
159 (5, 6),
160 (6, 7),
161 (7, 8),
162 (8, 9),
163 (9, 10),
164 ],
165 );
166 println!("{}\n", dag.render());
167
168 println!("10. Wide Graph (5 parallel chains):");
170 let dag = DAG::from_edges(
171 &[
172 (1, "C0L0"),
173 (2, "C0L1"),
174 (3, "C0L2"),
175 (4, "C1L0"),
176 (5, "C1L1"),
177 (6, "C1L2"),
178 (7, "C2L0"),
179 (8, "C2L1"),
180 (9, "C2L2"),
181 (10, "C3L0"),
182 (11, "C3L1"),
183 (12, "C3L2"),
184 (13, "C4L0"),
185 (14, "C4L1"),
186 (15, "C4L2"),
187 ],
188 &[
189 (1, 2),
190 (2, 3),
191 (4, 5),
192 (5, 6),
193 (7, 8),
194 (8, 9),
195 (10, 11),
196 (11, 12),
197 (13, 14),
198 (14, 15),
199 ],
200 );
201 println!("{}\n", dag.render());
202
203 println!("11. Diamond within Diamond:");
205 let dag = DAG::from_edges(
206 &[
207 (1, "Root"),
208 (2, "L1"),
209 (3, "R1"),
210 (4, "L2"),
211 (5, "R2"),
212 (6, "L3"),
213 (7, "R3"),
214 (8, "Merge1"),
215 (9, "Merge2"),
216 ],
217 &[
218 (1, 2),
219 (1, 3), (2, 4),
221 (2, 5), (3, 6),
223 (3, 7), (4, 8),
225 (5, 8), (6, 9),
227 (7, 9), ],
229 );
230 println!("{}\n", dag.render());
231
232 println!("=== Stress Test Complete ===");
233}