use super::*;
use geo_svg::*;
use geo_types::{Coord, LineString, Polygon};
mod fixtures;
#[test]
fn test_edge() {
let edge = Edge::new(&(0.0, 0.0).into(), &(0.0, 5.0).into());
assert_eq!(geo_types::Coord::from((0.0, 0.0)), edge.current);
assert_eq!(geo_types::Coord::from((0.0, 5.0)), edge.next);
assert_eq!(
geo_types::Coord::from((-1.0, 0.0)),
edge.inwards_normal().unwrap()
);
assert_eq!(
geo_types::Coord::from((1.0, 0.0)),
edge.outwards_normal().unwrap()
);
}
#[test]
fn test_point_offset() {
let point = geo_types::Point::new(0.0, 0.0);
let result = point.offset_with_arc_segments(1.0, 5).unwrap();
let expected = geo_types::MultiPolygon(vec![Polygon::new(
LineString(vec![
Coord {
x: 0.841_253_532_831_181_2,
y: 0.540_640_817_455_597_6,
},
Coord {
x: 0.415_415_013_001_886_44,
y: 0.909_631_995_354_518_3,
},
Coord {
x: -0.142_314_838_273_285,
y: 0.989_821_441_880_932_8,
},
Coord {
x: -0.654_860_733_945_285,
y: 0.755_749_574_354_258_3,
},
Coord {
x: -0.959_492_973_614_497_4,
y: 0.281_732_556_841_429_67,
},
Coord {
x: -0.959_492_973_614_497_4,
y: -0.281_732_556_841_429_84,
},
Coord {
x: -0.654_860_733_945_284_9,
y: -0.755_749_574_354_258_5,
},
Coord {
x: -0.142_314_838_273_285_23,
y: -0.989_821_441_880_932_7,
},
Coord {
x: 0.415_415_013_001_886_05,
y: -0.909_631_995_354_518_6,
},
Coord {
x: 0.841_253_532_831_180_8,
y: -0.540_640_817_455_598_2,
},
Coord {
x: 1.0,
y: -0.000_000_000_000_001_133_107_779_529_596,
},
Coord {
x: 0.841_253_532_831_181_2,
y: 0.540_640_817_455_597_6,
},
]),
Vec::new(),
)]);
println!("{}", result.to_svg().and(point.to_svg()).with_margin(10.0));
assert_eq!(expected, result);
}
#[test]
fn test_segment_offset() {
let p1 = geo_types::Coord::from((0.0, 0.0));
let p2 = geo_types::Coord::from((0.0, 8.0));
let segment = geo_types::Line::new(p1, p2);
let result = segment.offset(5.0).unwrap();
println!(
"{}",
result.to_svg().and(segment.to_svg()).with_margin(10.0)
);
}
#[test]
fn test_polygon_offset() {
use geo_types::polygon;
let polygon = polygon![
(x: -10., y: 10.),
(x: 10., y: 10.),
(x: 10., y: -10.),
(x: -10., y: -10.),
];
let result = polygon.offset(5.0).unwrap();
println!(
"{}",
result.to_svg().and(polygon.to_svg()).with_margin(10.0)
);
}
#[test]
fn test_polygon_with_hole_offset() {
use geo_types::polygon;
let polygon = polygon![
exterior: [
(x: -15., y: 15.),
(x: 15., y: 15.),
(x: 15., y: -15.),
(x: -15., y: -15.),],
interiors: [[
(x: -10., y: 10.),
(x: 10., y: 10.),
(x: 10., y: -10.),
(x: -10., y: -10.),
]]];
let result = polygon.offset(1.0).unwrap();
println!("{}", result.to_svg().and(polygon.to_svg()).with_margin(5.0));
}
#[test]
fn test_demo_offset() {
let result = fixtures::DEMO.offset_with_arc_segments(0.0001, 5).unwrap();
println!(
"{}",
result
.clone()
.to_svg()
.and(fixtures::DEMO.to_svg())
.with_margin(0.001)
);
}