affine-rs 0.1.0

Two-dimensional affine transformations for Rust
Documentation
#![allow(clippy::float_cmp)]

use affine_rs::{Affine, AffineError};

#[test]
fn converts_gdal_coefficients() {
    let coefficients = [-237_481.5, 425.0, 0.0, 237_536.4, 0.0, -425.0];
    let transform = Affine::from_gdal(coefficients);
    assert_eq!(transform.to_gdal(), coefficients);
    assert_eq!(
        transform.to_shapely(),
        [425.0, 0.0, 0.0, -425.0, -237_481.5, 237_536.4]
    );
}

#[test]
fn world_file_round_trip_accounts_for_pixel_center() {
    let text = "1.0\n0.0\n0.0\n-1.0\n100.5\n199.5\n";
    let transform = Affine::from_world_file(text).unwrap();
    assert_eq!(transform, Affine::new(1.0, 0.0, 100.0, 0.0, -1.0, 200.0));
    assert_eq!(transform.to_world_file(), text);
}

#[test]
fn rejects_invalid_world_files() {
    assert_eq!(
        Affine::from_world_file("1\n2\n3"),
        Err(AffineError::InvalidWorldFile)
    );
    assert_eq!(
        Affine::from_world_file("1\n0\n0\n1\nNaN\n0"),
        Err(AffineError::InvalidWorldFile)
    );
}