layoutcss_parser/
harmonic.rs1pub fn get_harmonic(value: &str, harmonic: f64) -> String {
2 if value.starts_with("--") {
4 return format!("var({})", value);
5 }
6
7 if value == "none" {
8 return "0.0".to_string();
9 }
10
11 if let Ok(x) = value.parse::<f64>() {
12 let value = harmonic.powf(x).to_string();
13 return format!("{value:.5}rem").to_string();
14 };
15
16 value.to_string()
20}
21
22#[cfg(test)]
23mod tests {
24 use super::*; const HARMONIC: f64 = 1.618;
28
29 #[test]
30 fn test_numeric_values() {
31 assert_eq!(get_harmonic("2", HARMONIC), "2.617rem"); assert_eq!(get_harmonic("2.5", HARMONIC), "3.330rem"); }
35
36 #[test]
37 fn test_none_value() {
38 assert_eq!(get_harmonic("none", HARMONIC), "0.0");
40 }
41
42 #[test]
43 fn test_css_variable() {
44 assert_eq!(get_harmonic("--main-color", HARMONIC), "var(--main-color)");
46 assert_eq!(get_harmonic("--font-size", HARMONIC), "var(--font-size)");
47 }
48
49 #[test]
50 fn test_non_numeric_values() {
51 assert_eq!(get_harmonic("16px", HARMONIC), "16px");
53 assert_eq!(get_harmonic("1rem", HARMONIC), "1rem");
54 assert_eq!(get_harmonic("invalid", HARMONIC), "invalid");
55 }
56
57 #[test]
58 fn test_empty_string() {
59 assert_eq!(get_harmonic("", HARMONIC), "");
61 }
62}
63