pub const ILLUMINANT_A_XYZ: [f64; 3] = [1.09850, 1.00000, 0.35585];
pub const ILLUMINANT_A_CHROMATICITY: [f64; 2] = [0.44757, 0.40745];
pub const ILLUMINANT_B_XYZ: [f64; 3] = [0.99072, 1.00000, 0.85223];
pub const ILLUMINANT_B_CHROMATICITY: [f64; 2] = [0.34842, 0.35161];
pub const ILLUMINANT_C_XYZ: [f64; 3] = [0.98074, 1.00000, 1.18232];
pub const ILLUMINANT_C_CHROMATICITY: [f64; 2] = [0.31006, 0.31616];
pub const ILLUMINANT_D50_XYZ: [f64; 3] = [0.96422, 1.00000, 0.82521];
pub const ILLUMINANT_D50_CHROMATICITY: [f64; 2] = [0.34567, 0.35850];
pub const ILLUMINANT_D55_XYZ: [f64; 3] = [0.95682, 1.00000, 0.92149];
pub const ILLUMINANT_D55_CHROMATICITY: [f64; 2] = [0.33242, 0.34743];
pub const ILLUMINANT_D65_XYZ: [f64; 3] = [0.95047, 1.00000, 1.08883];
pub const ILLUMINANT_D65_CHROMATICITY: [f64; 2] = [0.31271, 0.32902];
pub const ILLUMINANT_D75_XYZ: [f64; 3] = [0.94972, 1.00000, 1.22638];
pub const ILLUMINANT_D75_CHROMATICITY: [f64; 2] = [0.29902, 0.31485];
pub const ILLUMINANT_E_XYZ: [f64; 3] = [1.00000, 1.00000, 1.00000];
pub const ILLUMINANT_E_CHROMATICITY: [f64; 2] = [1.0/3.0, 1.0/3.0];
pub const ILLUMINANT_F2_XYZ: [f64; 3] = [0.99186, 1.00000, 0.67393];
pub const ILLUMINANT_F2_CHROMATICITY: [f64; 2] = [0.37208, 0.37529];
pub const ILLUMINANT_F7_XYZ: [f64; 3] = [0.95041, 1.00000, 1.08747];
pub const ILLUMINANT_F7_CHROMATICITY: [f64; 2] = [0.31292, 0.32933];
pub const ILLUMINANT_F11_XYZ: [f64; 3] = [1.00962, 1.00000, 0.64350];
pub const ILLUMINANT_F11_CHROMATICITY: [f64; 2] = [0.38052, 0.37713];
pub const ILLUMINANT_C: [f64; 2] = ILLUMINANT_C_CHROMATICITY;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_illuminant_c_consistency() {
assert_eq!(ILLUMINANT_C, ILLUMINANT_C_CHROMATICITY);
}
#[test]
fn test_chromaticity_validity() {
let illuminants = [
ILLUMINANT_A_CHROMATICITY,
ILLUMINANT_B_CHROMATICITY,
ILLUMINANT_C_CHROMATICITY,
ILLUMINANT_D50_CHROMATICITY,
ILLUMINANT_D55_CHROMATICITY,
ILLUMINANT_D65_CHROMATICITY,
ILLUMINANT_D75_CHROMATICITY,
ILLUMINANT_E_CHROMATICITY,
ILLUMINANT_F2_CHROMATICITY,
ILLUMINANT_F7_CHROMATICITY,
ILLUMINANT_F11_CHROMATICITY,
];
for (i, chromaticity) in illuminants.iter().enumerate() {
assert!(chromaticity[0] >= 0.0 && chromaticity[0] <= 1.0,
"Invalid x coordinate for illuminant {}: {}", i, chromaticity[0]);
assert!(chromaticity[1] >= 0.0 && chromaticity[1] <= 1.0,
"Invalid y coordinate for illuminant {}: {}", i, chromaticity[1]);
assert!(chromaticity[0] + chromaticity[1] <= 1.0,
"Invalid chromaticity sum for illuminant {}: {}", i, chromaticity[0] + chromaticity[1]);
}
}
#[test]
fn test_xyz_validity() {
let illuminants = [
ILLUMINANT_A_XYZ,
ILLUMINANT_B_XYZ,
ILLUMINANT_C_XYZ,
ILLUMINANT_D50_XYZ,
ILLUMINANT_D55_XYZ,
ILLUMINANT_D65_XYZ,
ILLUMINANT_D75_XYZ,
ILLUMINANT_E_XYZ,
ILLUMINANT_F2_XYZ,
ILLUMINANT_F7_XYZ,
ILLUMINANT_F11_XYZ,
];
for (i, xyz) in illuminants.iter().enumerate() {
assert!(xyz[0] > 0.0, "Invalid X coordinate for illuminant {}: {}", i, xyz[0]);
assert!((xyz[1] - 1.0).abs() < 1e-10, "Y coordinate should be 1.0 for illuminant {}: {}", i, xyz[1]);
assert!(xyz[2] > 0.0, "Invalid Z coordinate for illuminant {}: {}", i, xyz[2]);
}
}
}