1use crate::data_structure::link_graph::{LinkDart, LinkGraph, LinkVertex};
3
4pub fn three_ring_graph() -> (LinkGraph, Vec<LinkVertex>, Vec<LinkDart>) {
9 let mut g = LinkGraph::new();
10 let vertexes = (0..13).map(|_| g.new_vertex()).collect::<Vec<_>>();
11
12 let edge_definition = [
13 (1, 2, None, None),
14 (2, 3, Some(1), None),
15 (3, 1, Some(2), None),
16 (1, 3, None, Some(3)),
17 (3, 4, Some(4), None),
18 (4, 1, Some(5), None),
19 (1, 4, None, Some(6)),
20 (4, 5, Some(7), None),
21 (5, 1, Some(8), None),
22 (1, 5, None, Some(9)),
23 (5, 2, Some(10), None),
24 (2, 1, Some(11), Some(1)),
25 (2, 6, None, None),
26 (6, 7, Some(13), None),
27 (7, 2, Some(14), None),
28 (2, 7, None, Some(15)),
29 (7, 3, Some(16), None),
30 (3, 2, Some(17), Some(2)),
31 (3, 7, None, Some(17)),
32 (7, 8, Some(19), None),
33 (8, 3, Some(20), None),
34 (3, 8, None, Some(21)),
35 (8, 9, Some(22), None),
36 (9, 3, Some(23), None),
37 (3, 9, None, Some(24)),
38 (9, 4, Some(25), None),
39 (4, 3, Some(26), Some(5)),
40 (4, 9, None, Some(26)),
41 (9, 10, Some(28), None),
42 (10, 4, Some(29), None),
43 (4, 10, None, Some(30)),
44 (10, 11, Some(31), None),
45 (11, 4, Some(32), None),
46 (4, 11, None, Some(33)),
47 (11, 5, Some(34), None),
48 (5, 4, Some(35), Some(8)),
49 (5, 11, None, Some(35)),
50 (11, 12, Some(37), None),
51 (12, 5, Some(38), None),
52 (5, 12, None, Some(39)),
53 (12, 13, Some(40), None),
54 (13, 5, Some(41), None),
55 (5, 13, None, Some(42)),
56 (13, 2, Some(43), None),
57 (2, 5, Some(44), Some(11)),
58 (2, 13, None, Some(44)),
59 (13, 6, Some(46), None),
60 (6, 2, Some(47), Some(13)),
61 (7, 6, None, Some(14)),
62 (8, 7, Some(49), Some(20)),
63 (9, 8, Some(50), Some(23)),
64 (10, 9, Some(51), Some(29)),
65 (11, 10, Some(52), Some(32)),
66 (12, 11, Some(53), Some(38)),
67 (13, 12, Some(54), Some(41)),
68 (6, 13, Some(55), Some(47)),
69 ];
70 let mut edges: Vec<LinkDart> = Vec::with_capacity(edge_definition.len());
71 for (from, to, prev, twin) in edge_definition {
72 edges.push(g.new_dart(
73 vertexes[from - 1].clone(),
74 vertexes[to - 1].clone(),
75 prev.map(|p| edges[p - 1].clone()),
76 None,
77 twin.map(|t| edges[t - 1].clone()),
78 None,
79 ));
80 }
81 g.auto_face();
82 (g, vertexes, edges)
83}
84
85#[cfg(test)]
86mod test {
87 use crate::data_structure::link_graph::example::three_ring_graph;
88
89 #[test]
90 pub fn validate_three_ring_graph() {
91 let (g, _, _) = three_ring_graph();
92 g.validate();
93 }
94}