garb 0.2.7

Dress your pixels for the occasion — SIMD-optimized pixel format conversions
Documentation
//! Validates the code examples from README.md compile and behave correctly.

#[test]
fn readme_core_api() {
    use garb::bytes::{rgb_to_bgra, rgba_to_bgra_inplace};

    let mut pixels = vec![255u8, 0, 128, 255, 0, 200, 100, 255];
    rgba_to_bgra_inplace(&mut pixels).unwrap();
    assert_eq!(pixels, [128, 0, 255, 255, 100, 200, 0, 255]);

    let rgb = vec![255u8, 0, 128];
    let mut bgra = vec![0u8; 4];
    rgb_to_bgra(&rgb, &mut bgra).unwrap();
    assert_eq!(bgra, [128, 0, 255, 255]);
}

#[test]
fn readme_strided() {
    use garb::bytes::rgba_to_bgra_inplace_strided;

    let mut buf = vec![0u8; 256 * 100];
    rgba_to_bgra_inplace_strided(&mut buf, 60, 100, 256).unwrap();
}

#[cfg(feature = "rgb")]
#[test]
fn readme_typed_rgb() {
    use garb::convert_inplace;
    use rgb::{Bgra, Rgba};

    let mut pixels: Vec<Rgba<u8>> = vec![Rgba::new(255, 0, 128, 255); 100];
    let bgra: &mut [Bgra<u8>] = convert_inplace(&mut pixels);
    assert_eq!(
        bgra[0],
        Bgra {
            b: 128,
            g: 0,
            r: 255,
            a: 255
        }
    );
}

#[cfg(feature = "imgref")]
#[test]
fn readme_imgref() {
    use ::imgref::ImgVec;
    use garb::convert_imgref_inplace;
    use rgb::{Bgra, Rgba};

    let rgba_img = ImgVec::new(vec![Rgba::new(255, 0, 128, 200); 640 * 480], 640, 480);
    let bgra_img: ImgVec<Bgra<u8>> = convert_imgref_inplace(rgba_img);
    assert_eq!(bgra_img.width(), 640);
    assert_eq!(bgra_img.height(), 480);
}