layoutcss_parser/
harmonic.rspub fn get_harmonic(value: &str, harmonic: f64) -> String {
if value.starts_with("--") {
return format!("var({})", value);
}
if value == "none" {
return "0.0".to_string();
}
if let Ok(x) = value.parse::<f64>() {
let value = harmonic.powf(x).to_string();
return format!("{value:.5}rem").to_string();
};
value.to_string()
}
#[cfg(test)]
mod tests {
use super::*; const HARMONIC: f64 = 1.618;
#[test]
fn test_numeric_values() {
assert_eq!(get_harmonic("2", HARMONIC), "2.617rem"); assert_eq!(get_harmonic("2.5", HARMONIC), "3.330rem"); }
#[test]
fn test_none_value() {
assert_eq!(get_harmonic("none", HARMONIC), "0.0");
}
#[test]
fn test_css_variable() {
assert_eq!(get_harmonic("--main-color", HARMONIC), "var(--main-color)");
assert_eq!(get_harmonic("--font-size", HARMONIC), "var(--font-size)");
}
#[test]
fn test_non_numeric_values() {
assert_eq!(get_harmonic("16px", HARMONIC), "16px");
assert_eq!(get_harmonic("1rem", HARMONIC), "1rem");
assert_eq!(get_harmonic("invalid", HARMONIC), "invalid");
}
#[test]
fn test_empty_string() {
assert_eq!(get_harmonic("", HARMONIC), "");
}
}