culors 1.6.0

Rust port of the culori color library. Color spaces, CSS Color Module 4 parsing, interpolation, gamut mapping, ΔE, blending, filters.
Documentation
//! Ported tests for DIN99o Lab.

use culors::convert;
use culors::spaces::{Dlab, Rgb};
use culors::ColorSpace;

#[path = "common/mod.rs"]
mod common;

const EPS: f64 = 1e-10;

#[test]
fn dlab_metadata() {
    assert_eq!(Dlab::CHANNELS, &["l", "a", "b"]);
    assert_eq!(Dlab::MODE, "dlab");
}

#[test]
fn dlab_red() {
    let rgb = Rgb {
        r: 1.0,
        g: 0.0,
        b: 0.0,
        alpha: None,
    };
    let d: Dlab = convert(rgb);
    common::assert_close(d.l, 57.28917941426676, EPS);
    common::assert_close(d.a, 39.49797800074304, EPS);
    common::assert_close(d.b, 30.518440059252875, EPS);
}

#[test]
fn dlab_green() {
    let rgb = Rgb {
        r: 0.0,
        g: 1.0,
        b: 0.0,
        alpha: None,
    };
    let d: Dlab = convert(rgb);
    common::assert_close(d.l, 89.36631009006445, EPS);
    common::assert_close(d.a, -37.82582946463206, EPS);
    common::assert_close(d.b, 32.08625519652728, EPS);
}

#[test]
fn dlab_blue() {
    let rgb = Rgb {
        r: 0.0,
        g: 0.0,
        b: 1.0,
        alpha: None,
    };
    let d: Dlab = convert(rgb);
    common::assert_close(d.l, 36.029930076331965, EPS);
    common::assert_close(d.a, 31.935029159217553, EPS);
    common::assert_close(d.b, -40.38329666767036, EPS);
}

#[test]
fn dlab_gray() {
    let rgb = Rgb {
        r: 0.5,
        g: 0.5,
        b: 0.5,
        alpha: None,
    };
    let d: Dlab = convert(rgb);
    common::assert_close(d.l, 57.43806128457824, EPS);
    common::assert_close(d.a, 0.0, EPS);
    common::assert_close(d.b, 0.0, EPS);
}

#[test]
fn dlab_arbitrary() {
    let rgb = Rgb {
        r: 0.25,
        g: 0.4,
        b: 0.75,
        alpha: None,
    };
    let d: Dlab = convert(rgb);
    common::assert_close(d.l, 48.83929889376355, EPS);
    common::assert_close(d.a, 9.048204561515925, EPS);
    common::assert_close(d.b, -32.50039109736216, EPS);
}

#[test]
fn dlab_round_trip() {
    let original = Dlab {
        l: 50.0,
        a: 12.0,
        b: -28.0,
        alpha: Some(0.6),
    };
    let xyz = original.to_xyz65();
    let back = Dlab::from_xyz65(xyz);
    common::assert_close(back.l, 50.0, 1e-9);
    common::assert_close(back.a, 12.0, 1e-9);
    common::assert_close(back.b, -28.0, 1e-9);
    assert_eq!(back.alpha, Some(0.6));
}

#[test]
fn dlab_zero() {
    let d = Dlab {
        l: 0.0,
        a: 0.0,
        b: 0.0,
        alpha: None,
    };
    let rgb: Rgb = convert(d);
    common::assert_close(rgb.r, 0.0, 1e-9);
    common::assert_close(rgb.g, 0.0, 1e-9);
    common::assert_close(rgb.b, 0.0, 1e-9);
}

#[test]
fn dlab_white() {
    let d = Dlab {
        l: 100.0,
        a: 0.0,
        b: 0.0,
        alpha: None,
    };
    let rgb: Rgb = convert(d);
    common::assert_close(rgb.r, 1.0, 1e-9);
    common::assert_close(rgb.g, 1.0, 1e-9);
    common::assert_close(rgb.b, 1.0, 1e-9);
}