use ratatui::style::Color;
pub fn density_to_color(ball_count: u16) -> Option<Color> {
match ball_count {
0..=1 => None,
2..=3 => Some(Color::Rgb(30, 30, 45)),
4..=6 => Some(Color::Rgb(45, 45, 65)),
7..=10 => Some(Color::Rgb(60, 60, 90)),
11..=15 => Some(Color::Rgb(80, 80, 115)),
16..=25 => Some(Color::Rgb(100, 100, 140)),
26..=40 => Some(Color::Rgb(125, 125, 165)),
41..=60 => Some(Color::Rgb(150, 150, 190)),
_ => Some(Color::Rgb(175, 175, 210)),
}
}
pub fn density_to_foreground(ball_count: u16) -> Color {
match ball_count {
0..=1 => Color::White,
2..=5 => Color::Rgb(220, 220, 255),
6..=15 => Color::Rgb(240, 240, 255),
_ => Color::Rgb(255, 255, 255),
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_no_background_for_sparse() {
assert!(density_to_color(0).is_none());
assert!(density_to_color(1).is_none());
}
#[test]
fn test_background_for_dense() {
assert!(density_to_color(2).is_some());
assert!(density_to_color(10).is_some());
assert!(density_to_color(100).is_some());
}
#[test]
fn test_color_gradient_increasing() {
let color_low = density_to_color(3).unwrap();
let color_high = density_to_color(50).unwrap();
if let (Color::Rgb(r1, g1, b1), Color::Rgb(r2, g2, b2)) = (color_low, color_high) {
assert!(r2 > r1);
assert!(g2 > g1);
assert!(b2 > b1);
} else {
panic!("Expected RGB colors");
}
}
}