tessellations 0.3.0

Library to create and draw periodic tilings of the plane.
Documentation
#[cfg(test)]
mod tests {
    use tessellations::tessellationline::{Point, PointIndexPath, TessellationLine};

    #[test]
    fn test_breakline() {
        let mut l1: TessellationLine = TessellationLine::new(1.0, 0.0, 0.0);
        l1.append(Point::new(0.0, 0.0));
        l1.append(Point::new(0.0, 1.0));

        assert_eq!(
            l1.hitline(Point::new(0.0, 0.5), 0.01),
            Some(PointIndexPath {
                line_index: 0,
                point_index: 0,
                corrp: false
            })
        );
    }

    #[test]
    fn test_breakline_not() {
        let mut l1: TessellationLine = TessellationLine::new(1.0, 0.0, 0.0);
        l1.append(Point::new(0.0, 0.0));
        l1.append(Point::new(0.0, 1.0));

        assert_eq!(l1.hitline(Point::new(0.0, 1.5), 0.01), None);
    }

    #[test]
    fn test_breakline_corrp() {
        let mut l1: TessellationLine = TessellationLine::new(1.0, 0.0, 0.0);
        l1.append(Point::new(0.0, 0.0));
        l1.append(Point::new(0.0, 1.0));

        assert_eq!(
            l1.hitline(Point::new(1.0, 0.5), 0.01),
            Some(PointIndexPath {
                line_index: 0,
                point_index: 0,
                corrp: true
            })
        );
    }

    #[test]
    fn test_breakline_corrp_not() {
        let mut l1: TessellationLine = TessellationLine::new(1.0, 0.0, 0.0);
        l1.append(Point::new(0.0, 0.0));
        l1.append(Point::new(0.0, 1.0));

        assert_eq!(l1.hitline(Point::new(1.1, 0.5), 0.01), None);
    }

    #[test]
    fn test_hitpoint() {
        let mut l1: TessellationLine = TessellationLine::new(1.0, 0.0, 0.0);
        l1.append(Point::new(0.0, 0.0));
        l1.append(Point::new(0.0, 0.5));
        l1.append(Point::new(0.0, 1.0));

        assert_eq!(
            l1.hitpoint(Point::new(0.0, 0.5), 0.01),
            Some(PointIndexPath {
                line_index: 0,
                point_index: 1,
                corrp: false
            })
        );
    }

    #[test]
    fn test_hitpoint_not() {
        let mut l1: TessellationLine = TessellationLine::new(1.0, 0.0, 0.0);
        l1.append(Point::new(0.0, 0.0));
        l1.append(Point::new(0.0, 0.5));
        l1.append(Point::new(0.0, 1.0));

        assert_eq!(l1.hitpoint(Point::new(0.0, 0.4), 0.01), None);
    }
    #[test]
    fn test_hitpoint_corrp() {
        let mut l1: TessellationLine = TessellationLine::new(1.0, 0.0, 0.0);
        l1.append(Point::new(0.0, 0.0));
        l1.append(Point::new(0.0, 0.5));
        l1.append(Point::new(0.0, 1.0));

        assert_eq!(
            l1.hitpoint(Point::new(1.0, 0.5), 0.01),
            Some(PointIndexPath {
                line_index: 0,
                point_index: 1,
                corrp: true
            })
        );
    }

    #[test]
    fn test_hitpoint_not_corrp() {
        let mut l1: TessellationLine = TessellationLine::new(1.0, 0.0, 0.0);
        l1.append(Point::new(0.0, 0.0));
        l1.append(Point::new(0.0, 0.5));
        l1.append(Point::new(0.0, 1.0));

        assert_eq!(l1.hitpoint(Point::new(1.0, 0.4), 0.01), None);
    }

    #[test]
    fn test_line_save_json() {
        let mut l1: TessellationLine = TessellationLine::new(1.0, 0.0, 0.0);
        l1.append(Point::new(0.0, 0.0));
        l1.append(Point::new(0.0, 0.5));
        l1.append(Point::new(0.0, 1.0));
        let j = "{\"points\":[{\"x\":0.0,\"y\":0.0},{\"x\":0.0,\"y\":0.5},{\"x\":0.0,\"y\":1.0}],\"transform\":[1.0,0.0,0.0,1.0,1.0,0.0],\"ci\":[1.0,0.0,0.0,1.0,-1.0,0.0],\"angle\":0.0,\"tx\":1.0,\"ty\":0.0}";
        assert_eq!(serde_json::to_string(&l1).expect(""), j);
    }

    #[test]
    fn test_line_load_json() {
        let mut l1: TessellationLine = TessellationLine::new(1.0, 0.0, 0.0);
        l1.append(Point::new(0.0, 0.0));
        l1.append(Point::new(0.0, 0.5));
        l1.append(Point::new(0.0, 1.0));

        let j = "{\"points\":[{\"x\":0.0,\"y\":0.0},{\"x\":0.0,\"y\":0.5},{\"x\":0.0,\"y\":1.0}],\"transform\":[1.0,0.0,0.0,1.0,1.0,0.0],\"ci\":[1.0,0.0,0.0,1.0,-1.0,0.0],\"angle\":0.0,\"tx\":1.0,\"ty\":0.0}";

        let l2 = serde_json::from_str::<TessellationLine>(j).expect("parse error");
        assert_eq!(l1, l2);
    }
}