clipper2_sys/
poly_path.rs1define_poly_cxx_preorder_64!();
7define_poly_cxx_preorder_d!();
8
9#[cfg(test)]
10mod tests {
11 use crate::{
12 ClipType, Clipper64, ClipperD, FillRule, Path64, PathD, Paths64, PathsD, Point64, PointD,
13 };
14
15 fn square_i(x0: i64, y0: i64, s: i64) -> Path64 {
16 Path64::new(vec![
17 Point64::new(x0, y0),
18 Point64::new(x0 + s, y0),
19 Point64::new(x0 + s, y0 + s),
20 Point64::new(x0, y0 + s),
21 ])
22 }
23
24 fn square_f(x0: f64, y0: f64, s: f64) -> PathD {
25 PathD::new(vec![
26 PointD::new(x0, y0),
27 PointD::new(x0 + s, y0),
28 PointD::new(x0 + s, y0 + s),
29 PointD::new(x0, y0 + s),
30 ])
31 }
32
33 #[test]
34 fn poly_preorder_64_root_depth_zero_when_tree_exists() {
35 let mut c = Clipper64::new();
36 c.add_subject(&Paths64::new(vec![square_i(0, 0, 100)]));
37 c.add_clip(&Paths64::new(vec![square_i(50, 50, 100)]));
38 let sol = c.execute_tree(ClipType::Union, FillRule::NonZero);
39 if !sol.has_poly_tree() {
40 return;
41 }
42 let (_, mut iter) = sol.into_open_and_poly_preorder();
43 let root = iter.next().expect("non-empty poly tree");
44 assert_eq!(root.depth, 0);
45 }
46
47 #[test]
48 fn poly_preorder_d_root_depth_zero_when_tree_exists() {
49 let mut c = ClipperD::new(4);
50 c.add_subject(&PathsD::new(vec![square_f(0.0, 0.0, 100.0)]));
51 c.add_clip(&PathsD::new(vec![square_f(50.0, 50.0, 100.0)]));
52 let sol = c.execute_tree(ClipType::Union, FillRule::NonZero);
53 if !sol.has_poly_tree() {
54 return;
55 }
56 let (_, mut iter) = sol.into_open_and_poly_preorder();
57 let root = iter.next().expect("non-empty poly tree");
58 assert_eq!(root.depth, 0);
59 }
60}