glifparser 2.0.1

A parser and writer for UFO `.glif` files
Documentation
use glifparser::outline::{Contour, Outline};
use glifparser::outline::Reverse as _;
use glifparser::outline::FromKurbo as _;
use kurbo::Shape as _;

#[macro_use] extern crate lazy_static;

lazy_static! {
    static ref CIRCLE: Outline::<()> = Outline::<()>::from_kurbo(&kurbo::BezPath::from_vec(kurbo::Circle::new(kurbo::Point::new(0.0, 0.0), 50.0).path_elements(f64::EPSILON).collect()));
}
static ITERATIONS: usize = 5_000;

#[test]
fn test_rev_outline() {
    let gcircle = CIRCLE.clone();
    let mut gcircle2 = CIRCLE.clone();
    for _ in 0 .. ITERATIONS {
        gcircle2.reverse();
    }
    assert_eq!(gcircle, gcircle2);
    let mut gcircle2 = CIRCLE.clone();
    for _ in 0 .. ITERATIONS - 1 {
        gcircle2.reverse();
    }
    assert_ne!(gcircle, gcircle2);
}

#[test]
fn test_rev_contour() {
    let gcircle = &*CIRCLE;
    let gcircle_contour: Contour<()> = gcircle.clone().pop().unwrap();
    let mut gcircle2_contour: Contour<()> = gcircle_contour.clone();
    for _ in 0 .. ITERATIONS {
        gcircle2_contour.reverse();
    }
    assert_eq!(gcircle_contour, gcircle2_contour);
    let mut gcircle2_contour: Contour<()> = gcircle_contour.clone();
    for _ in 0 .. ITERATIONS - 1 {
        gcircle2_contour.reverse();
    }
    assert_ne!(gcircle_contour, gcircle2_contour);
}