pub const RATE_BASELINE_OFFSET: i32 = -10;
pub fn rate_percent(speed: i32) -> i32 {
((speed - 50) * 2 + RATE_BASELINE_OFFSET).clamp(-100, 100)
}
pub fn rate_string(speed: i32) -> String {
let pct = rate_percent(speed);
let sign = if pct >= 0 { "+" } else { "" };
format!("{sign}{pct}%")
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn midpoint_is_baseline_offset() {
assert_eq!(rate_percent(50), RATE_BASELINE_OFFSET);
}
#[test]
fn max_speed_is_offset_from_100() {
assert_eq!(rate_percent(100), 90);
}
#[test]
fn min_speed_clamps_to_neg_100() {
assert_eq!(rate_percent(0), -100);
}
#[test]
fn rate_string_positive_has_plus() {
assert_eq!(rate_string(100), "+90%");
}
#[test]
fn rate_string_negative_has_no_plus() {
let s = rate_string(0);
assert_eq!(s, "-100%");
}
#[test]
fn rate_string_midpoint_includes_offset() {
let s = rate_string(50);
assert!(s.contains("-10%"));
}
}