math2 0.0.2

Geometry, layout and rasterization utilities powering the Grida canvas
Documentation
use math2::{
    RGBA8888, RGBAf, hex_to_rgba8888, rgba_to_unit8_chunk, rgba8888_to_hex, rgbaf_to_rgba8888,
};

#[test]
fn hex_short() {
    let c = hex_to_rgba8888("#F80");
    assert_eq!(
        c,
        RGBA8888 {
            r: 255,
            g: 136,
            b: 0,
            a: 1.0
        }
    );
}

#[test]
fn hex_long() {
    let c = hex_to_rgba8888("#00ff0080");
    assert_eq!(c.r, 0);
    assert_eq!(c.g, 255);
    assert_eq!(c.b, 0);
    assert!((c.a - 0.5019608).abs() < 0.00001);
}

#[test]
fn rgba_to_hex_roundtrip() {
    let c = RGBA8888 {
        r: 10,
        g: 20,
        b: 30,
        a: 0.5,
    };
    let hex = rgba8888_to_hex(c);
    assert_eq!(hex, "#0a141e80");
    let out = hex_to_rgba8888(&hex);
    assert_eq!(out.r, c.r);
    assert_eq!(out.g, c.g);
    assert_eq!(out.b, c.b);
    assert!((out.a - c.a).abs() < 0.01);
}

#[test]
fn rgbaf_conversion() {
    let c = RGBAf {
        r: 1.0,
        g: 0.5,
        b: 0.0,
        a: 0.75,
    };
    let i = rgbaf_to_rgba8888(c);
    assert_eq!(
        i,
        RGBA8888 {
            r: 255,
            g: 128,
            b: 0,
            a: 0.75
        }
    );
    let v = rgba_to_unit8_chunk(i);
    assert_eq!(v, [255.0, 128.0, 0.0, 191.0]);
}