1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
pub mod cmyk;
pub mod hsl;
pub mod rgb;

pub use cmyk::{Cmyk, CmykInt};
pub use hsl::{Hsl, HslInt};
pub use rgb::{Rgb, RgbScaled};

#[cfg(test)]
mod tests {
    use test_case::test_case;

    use super::*;

    #[test_case(Rgb {r: 80, g: 191, b: 100} => CmykInt {c : 58, m: 0, y: 48, k: 25}; "no_m")]
    #[test_case(Rgb {r: 255, g: 255, b: 255} => CmykInt {c : 0, m: 0, y: 0, k: 0}; "white")]
    #[test_case(Rgb {r: 0, g: 0, b: 0} => CmykInt {c : 0, m: 0, y: 0, k: 100}; "black")]
    fn test_rgb_to_cmyk(rgb: Rgb) -> CmykInt {
        CmykInt::from(Cmyk::from(rgb))
    }

    #[test_case(Cmyk {c : 0.58, m: 0.0, y: 0.47, k: 0.25} => Rgb {r: 80, g: 191, b: 101} ; "no_m")]
    #[test_case(Cmyk {c : 0.0, m: 0.0, y: 0.0, k: 0.0} => Rgb {r: 255, g: 255, b: 255}; "white")]
    #[test_case( Cmyk {c : 0.0, m: 0.0, y: 0.0, k: 1.0} => Rgb {r: 0, g: 0, b: 0}; "black")]
    fn test_cmyk_to_rgb(cmyk: Cmyk) -> Rgb {
        cmyk.into()
    }

    #[test_case(Hsl {h: 131.0, s: 0.46, l: 0.53} => Rgb {r: 80, g: 190, b: 100} ; "1")]
    #[test_case(Hsl {h: 0.0, s: 0.0, l: 1.0} => Rgb {r: 255, g: 255, b: 255}; "white")]
    #[test_case( Hsl {h: 0.0, s: 0.0, l: 0.0} => Rgb {r: 0, g: 0, b: 0}; "black")]
    fn test_hsl_to_rgb(hsl: Hsl) -> Rgb {
        hsl.into()
    }

    #[test_case(Rgb {r: 80, g: 190, b: 100} => HslInt {h: 131, s: 46, l: 53}  ; "11")]
    #[test_case(Rgb {r: 255, g: 255, b: 255} => HslInt {h: 0, s: 0, l: 100} ; "white")]
    #[test_case(Rgb {r: 0, g: 0, b: 0} => HslInt {h: 0, s: 0, l: 0}; "black")]
    fn test_rgb_to_hsl(rgb: Rgb) -> HslInt {
        HslInt::from(Hsl::from(rgb))
    }
}