Skip to content

Commit 2796def

Browse files
committed
Add some new tests from the existing examples.
1 parent 66368fa commit 2796def

File tree

2 files changed

+54
-10
lines changed

2 files changed

+54
-10
lines changed

examples/offset_multi.rs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,18 @@ fn main() {
1313
// Translate to fit in the SVG viewport
1414
let poly = polyline_translate(&poly_orig, point(250.0, 100.0));
1515

16-
let mut offset_internal = vec![];
16+
let mut offset_external = vec![];
1717
for i in 1..100 {
18-
let offset = offset_polyline_to_polyline(&poly, (i as f64), &mut cfg);
19-
offset_internal.extend(offset);
18+
let offset = offset_polyline_to_polyline(&poly, (i as f64)/2.0, &mut cfg);
19+
offset_external.extend(offset);
2020
}
2121

2222
let poly = polyline_reverse(&poly);
2323

24-
let mut offset_external = vec![];
24+
let mut offset_internal = vec![];
2525
for i in 1..100 {
26-
let offset = offset_polyline_to_polyline(&poly, (i as f64), &mut cfg);
27-
offset_external.extend(offset);
26+
let offset = offset_polyline_to_polyline(&poly, (i as f64)/2.0, &mut cfg);
27+
offset_internal.extend(offset);
2828
}
2929

3030
if let Some(svg) = cfg.svg.as_mut(){
@@ -33,11 +33,13 @@ fn main() {
3333
}
3434

3535
assert!(
36-
offset_internal.len() == 99,
37-
"Wrong number of offset arclines generated"
36+
offset_external.len() == 99,
37+
"Wrong number of external offset arclines generated: expected 99, got {}",
38+
offset_external.len()
3839
);
3940
assert!(
40-
offset_external.len() == 90,
41-
"Wrong number of offset arclines generated"
41+
offset_internal.len() == 181,
42+
"Wrong number of internal offset arclines generated: expected 181, got {}",
43+
offset_internal.len()
4244
);
4345
}

src/offset.rs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2264,4 +2264,46 @@ mod test_offset {
22642264
assert_eq!(offset_polylines2[2].len(), 7, "Third internal offset should have 7 vertices");
22652265
assert_eq!(offset_polylines2[3].len(), 8, "Fourth internal offset should have 8 vertices");
22662266
}
2267+
2268+
#[test]
2269+
fn test_offset_multi_polyline() {
2270+
use crate::prelude::{offset_polyline_to_polyline, pline_01, OffsetCfg};
2271+
use togo::prelude::*;
2272+
2273+
let mut cfg = OffsetCfg::default();
2274+
cfg.svg_orig = false;
2275+
cfg.svg_final = false;
2276+
2277+
let poly_orig = pline_01()[0].clone();
2278+
// Translate to fit in test viewport
2279+
let poly = polyline_translate(&poly_orig, point(250.0, 100.0));
2280+
2281+
// Test external offsets: 99 iterations with varying offset distances (0.5, 1.0, 1.5, ..., 49.5)
2282+
let mut offset_external = vec![];
2283+
for i in 1..100 {
2284+
let offset = offset_polyline_to_polyline(&poly, (i as f64) / 2.0, &mut cfg);
2285+
offset_external.extend(offset);
2286+
}
2287+
assert_eq!(
2288+
offset_external.len(),
2289+
99,
2290+
"Expected 99 external offset polylines (one per iteration), got {}",
2291+
offset_external.len()
2292+
);
2293+
2294+
// Test internal offsets: 99 iterations on reversed polyline
2295+
// At larger offsets, reversed polyline self-intersects and splits into multiple segments
2296+
let poly_reversed = polyline_reverse(&poly);
2297+
let mut offset_internal = vec![];
2298+
for i in 1..100 {
2299+
let offset = offset_polyline_to_polyline(&poly_reversed, (i as f64) / 2.0, &mut cfg);
2300+
offset_internal.extend(offset);
2301+
}
2302+
assert_eq!(
2303+
offset_internal.len(),
2304+
181,
2305+
"Expected 181 internal offset polylines (split due to self-intersection), got {}",
2306+
offset_internal.len()
2307+
);
2308+
}
22672309
}

0 commit comments

Comments
 (0)