neco-edge-routing 0.1.0

necosystems series 2D edge routing primitives for node graphs
Documentation
use alloc::vec;

use crate::{PathData, PathKind, RouteRequest};

pub(crate) fn route(req: &RouteRequest) -> PathData {
    PathData {
        points: vec![req.from, req.to],
        kind: PathKind::Polyline,
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use crate::RouteStyle;

    fn request(from: (f64, f64), to: (f64, f64)) -> RouteRequest {
        RouteRequest {
            from,
            to,
            from_tangent: (1.0, 2.0),
            to_tangent: (-3.0, 4.0),
            style: RouteStyle::Linear,
        }
    }

    #[test]
    fn keeps_endpoints_for_general_case() {
        let path = route(&request((-2.0, 1.5), (3.0, -4.0)));
        assert_eq!(path.kind, PathKind::Polyline);
        assert_eq!(path.points, vec![(-2.0, 1.5), (3.0, -4.0)]);
    }

    #[test]
    fn keeps_duplicate_points_for_degenerate_case() {
        let path = route(&request((1.0, 1.0), (1.0, 1.0)));
        assert_eq!(path.points, vec![(1.0, 1.0), (1.0, 1.0)]);
    }

    #[test]
    fn ignores_tangents() {
        let mut req = request((0.0, 0.0), (5.0, 7.0));
        let first = route(&req);
        req.from_tangent = (0.0, 0.0);
        req.to_tangent = (100.0, -100.0);
        let second = route(&req);
        assert_eq!(first, second);
    }
}