use crate::hct::hct_color::Hct;
pub struct DislikeAnalyzer;
impl DislikeAnalyzer {
#[must_use]
pub fn is_disliked(hct: &Hct) -> bool {
let hue_passes = hct.hue().round() >= 90.0 && hct.hue().round() <= 111.0;
let chroma_passes = hct.chroma().round() > 16.0;
let tone_passes = hct.tone().round() < 65.0;
hue_passes && chroma_passes && tone_passes
}
#[must_use]
pub fn fix_if_disliked(hct: Hct) -> Hct {
if Self::is_disliked(&hct) {
Hct::new(hct.hue(), hct.chroma(), 70.0)
} else {
hct
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_is_disliked() {
let disliked = Hct::new(100.0, 50.0, 50.0);
assert!(DislikeAnalyzer::is_disliked(&disliked));
let liked = Hct::new(250.0, 50.0, 50.0);
assert!(!DislikeAnalyzer::is_disliked(&liked));
let light = Hct::new(100.0, 50.0, 80.0);
assert!(!DislikeAnalyzer::is_disliked(&light));
}
#[test]
fn test_fix_if_disliked() {
let disliked = Hct::new(100.0, 50.0, 50.0);
let fixed = DislikeAnalyzer::fix_if_disliked(disliked);
assert!(!DislikeAnalyzer::is_disliked(&fixed));
assert!((fixed.tone() - 70.0).abs() < 1.0);
}
}