use human_format::{Formatter, Scales};
#[test]
fn time_month_and_year_parsing_and_formatting() {
let mut f = Formatter::new();
f.with_scales(Scales::Time());
let year_secs = 365.2425 * 86400.0;
let month_secs = year_secs / 12.0;
f.with_suffix("mo");
let s = f.format(month_secs);
assert!(s.contains("1.00") && s.contains("mo"));
let parsed = f.try_parse("1.0 mo").unwrap();
assert!((parsed / month_secs - 1.0).abs() < 1e-12);
}
#[test]
fn quarters_are_three_months_and_parse() {
let mut f = Formatter::new();
f.with_scales(Scales::Time());
let year_secs = 365.2425 * 86400.0;
let qtr_secs = 3.0 * (year_secs / 12.0);
f.with_suffix("qtr");
let s = f.format(qtr_secs);
assert!(s.contains("1.00") && s.contains("qtr"));
let parsed = f.try_parse("1 qtr").unwrap();
assert!((parsed / qtr_secs - 1.0).abs() < 1e-12);
}
#[test]
fn time_parsing_is_case_sensitive_for_explicit_map() {
let mut ft = Formatter::new();
ft.with_scales(Scales::Time());
assert!(ft.try_parse("1 mo").is_ok());
assert!(ft.try_parse("1 Mo").is_err());
}
#[test]
fn parse_or_clamp_uses_explicit_map_largest_for_time() {
let mut f = Formatter::new();
f.with_scales(Scales::Time());
let parsed = f.parse_or_clamp("2.0 unknown", true).unwrap();
let year_secs = 365.2425 * 86400.0;
let gyr = 1.0e9 * year_secs;
assert_eq!(parsed, 2.0 * gyr);
}