1use super::*;
2
3impl<T: ColorComponent> Rgba<T> {
4 pub const WHITE: Self = Self {
6 r: T::MAX,
7 g: T::MAX,
8 b: T::MAX,
9 a: T::MAX,
10 };
11 pub const BLACK: Self = Self {
13 r: T::ZERO,
14 g: T::ZERO,
15 b: T::ZERO,
16 a: T::MAX,
17 };
18 pub const GRAY: Self = Self {
20 r: T::HALF,
21 g: T::HALF,
22 b: T::HALF,
23 a: T::MAX,
24 };
25 pub const TRANSPARENT_WHITE: Self = Self {
27 r: T::MAX,
28 g: T::MAX,
29 b: T::MAX,
30 a: T::ZERO,
31 };
32 pub const TRANSPARENT_BLACK: Self = Self {
34 r: T::ZERO,
35 g: T::ZERO,
36 b: T::ZERO,
37 a: T::ZERO,
38 };
39 pub const RED: Self = Self {
41 r: T::MAX,
42 g: T::ZERO,
43 b: T::ZERO,
44 a: T::MAX,
45 };
46 pub const GREEN: Self = Self {
48 r: T::ZERO,
49 g: T::MAX,
50 b: T::ZERO,
51 a: T::MAX,
52 };
53 pub const BLUE: Self = Self {
55 r: T::ZERO,
56 g: T::ZERO,
57 b: T::MAX,
58 a: T::MAX,
59 };
60 pub const CYAN: Self = Self {
62 r: T::ZERO,
63 g: T::MAX,
64 b: T::MAX,
65 a: T::MAX,
66 };
67 pub const MAGENTA: Self = Self {
69 r: T::MAX,
70 g: T::ZERO,
71 b: T::MAX,
72 a: T::MAX,
73 };
74 pub const YELLOW: Self = Self {
76 r: T::MAX,
77 g: T::MAX,
78 b: T::ZERO,
79 a: T::MAX,
80 };
81}
82
83#[test]
84fn test_consts_stable() {
85 macro_rules! test_stable {
86 ($($name:ident,)*) => {
87 $(
88 assert_eq!(Rgba::<f32>::$name.convert::<u8>(), Rgba::<u8>::$name);
89 assert!(Rgba::<f32>::$name.convert::<f64>().approx_eq(&Rgba::<f64>::$name));
90 assert_eq!(Rgba::<f64>::$name.convert::<u8>(), Rgba::<u8>::$name);
91 assert!(Rgba::<f64>::$name.convert::<f32>().approx_eq(&Rgba::<f32>::$name));
92 assert!(Rgba::<u8>::$name.convert::<f32>().approx_eq_eps(&Rgba::<f32>::$name, 1.0 / 255.0));
93 assert!(Rgba::<u8>::$name.convert::<f64>().approx_eq_eps(&Rgba::<f64>::$name, 1.0 / 255.0));
94 )*
95 };
96 }
97 test_stable!(
98 WHITE,
99 BLACK,
100 GRAY,
101 TRANSPARENT_WHITE,
102 TRANSPARENT_BLACK,
103 RED,
104 GREEN,
105 BLUE,
106 CYAN,
107 MAGENTA,
108 YELLOW,
109 );
110}