use geometry_strategy::{EqualsPairStrategy, EqualsStrategy};
use geometry_trait::Geometry;
#[inline]
#[must_use]
pub fn equals<A, B>(a: &A, b: &B) -> bool
where
A: Geometry,
B: Geometry,
A::Kind: EqualsPairStrategy<B::Kind>,
<A::Kind as EqualsPairStrategy<B::Kind>>::S: EqualsStrategy<A, B>,
{
<<A::Kind as EqualsPairStrategy<B::Kind>>::S as Default>::default().equals(a, b)
}
#[cfg(test)]
mod tests {
use super::equals;
use geometry_cs::Cartesian;
use geometry_model::{Point2D, Polygon, polygon};
type P = Point2D<f64, Cartesian>;
fn pt(x: f64, y: f64) -> P {
Point2D::new(x, y)
}
#[test]
fn equals_same_point() {
assert!(equals(&pt(1.0, 2.0), &pt(1.0, 2.0)));
assert!(!equals(&pt(1.0, 2.0), &pt(1.0, 2.1)));
}
#[test]
fn equals_polygon_rotated_and_reversed() {
let a: Polygon<P> = polygon![[(0.0, 0.0), (4.0, 0.0), (4.0, 4.0), (0.0, 4.0), (0.0, 0.0)]];
let b: Polygon<P> = polygon![[(4.0, 4.0), (0.0, 4.0), (0.0, 0.0), (4.0, 0.0), (4.0, 4.0)]];
assert!(equals(&a, &b));
}
}