#[cfg(feature = "plotting")]
use eunoia::geometry::shapes::Circle;
#[cfg(feature = "plotting")]
use eunoia::spec::{DiagramSpecBuilder, InputType};
#[cfg(feature = "plotting")]
use eunoia::Fitter;
#[test]
#[cfg(feature = "plotting")]
fn test_region_decomposition_two_sets() {
let spec = DiagramSpecBuilder::new()
.set("A", 10.0)
.set("B", 8.0)
.intersection(&["A", "B"], 2.0)
.input_type(InputType::Exclusive)
.build()
.unwrap();
let layout = Fitter::<Circle>::new(&spec).seed(42).fit().unwrap();
let regions = layout.region_polygons(&spec, 64);
assert!(regions.len() >= 2);
let total_area: f64 = regions.areas().values().sum();
let expected_total: f64 = spec.exclusive_areas().values().sum();
assert!(
(total_area - expected_total).abs() < 1.0,
"Total area {:.3} should be close to expected {:.3}",
total_area,
expected_total
);
}
#[test]
#[cfg(feature = "plotting")]
fn test_region_decomposition_three_sets() {
let spec = DiagramSpecBuilder::new()
.set("A", 5.0)
.set("B", 5.0)
.set("C", 5.0)
.intersection(&["A", "B"], 1.0)
.intersection(&["B", "C"], 1.0)
.intersection(&["A", "C"], 1.0)
.intersection(&["A", "B", "C"], 0.5)
.input_type(InputType::Exclusive)
.build()
.unwrap();
let layout = Fitter::<Circle>::new(&spec).seed(123).fit().unwrap();
let regions = layout.region_polygons(&spec, 128);
assert!(regions.len() >= 3);
for (combo, pieces) in regions.iter() {
assert!(!pieces.is_empty(), "Region {:?} should have pieces", combo);
for piece in pieces {
assert!(
piece.outer.vertices().len() >= 3,
"Outer ring should have at least 3 vertices"
);
}
}
}
#[test]
#[cfg(feature = "plotting")]
fn test_region_polygons_with_ellipses() {
use eunoia::geometry::shapes::Ellipse;
let spec = DiagramSpecBuilder::new()
.set("A", 8.0)
.set("B", 6.0)
.intersection(&["A", "B"], 2.0)
.input_type(InputType::Exclusive)
.build()
.unwrap();
let layout = Fitter::<Ellipse>::new(&spec).seed(42).fit().unwrap();
let regions = layout.region_polygons(&spec, 96);
assert!(regions.len() >= 2);
let areas = regions.areas();
for (_, &area) in areas.iter() {
assert!(area > 0.0, "All regions should have positive area");
}
}