use super::*;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn currency_percent_java_baseline() {
let n = TNumber::Double(1234.56);
assert_eq!(
format_number_with("currency", "en_US", &n).unwrap(),
"$1,234.56"
);
assert_eq!(
format_number_with("currency", "de_DE", &n).unwrap(),
"1.234,56 €"
);
assert_eq!(
format_number_with("currency", "zh_CN", &n).unwrap(),
"¥1,234.56"
);
assert_eq!(
format_number_with("currency", "ja_JP", &n).unwrap(),
"¥1,235"
);
assert_eq!(
format_number_with("currency", "fr_FR", &n).unwrap(),
"1\u{202F}234,56 €"
);
assert_eq!(
format_number_with("percent", "en_US", &n).unwrap(),
"123,456%"
);
assert_eq!(
format_number_with("percent", "de_DE", &n).unwrap(),
"123.456 %"
);
assert_eq!(
format_number_with("percent", "fr_FR", &n).unwrap(),
"123\u{202F}456 %"
);
assert_eq!(
format_number_with("percent", "zh_CN", &n).unwrap(),
"123,456%"
);
assert_eq!(
format_number_with("integer", "en_US", &n).unwrap(),
"integer1235"
);
}
#[test]
fn c_format_integers_and_decimals() {
assert_eq!(
format_c_number(&TNumber::Int(1), CFormatKind::JavaScriptOrJson),
"1"
);
assert_eq!(
format_c_number(&TNumber::Long(-5), CFormatKind::JavaScriptOrJson),
"-5"
);
assert_eq!(
format_c_number(&TNumber::from_i64(1234567), CFormatKind::JavaScriptOrJson),
"1234567"
);
assert_eq!(
format_c_number(
&TNumber::Decimal(BigDecimal::from_str("1.5").unwrap()),
CFormatKind::JavaScriptOrJson
),
"1.5"
);
assert_eq!(
format_c_number(
&TNumber::Decimal(BigDecimal::from_str("1.50").unwrap()),
CFormatKind::JavaScriptOrJson
),
"1.5"
);
assert_eq!(
format_c_number(
&TNumber::Decimal(BigDecimal::from_str("1E-16").unwrap()),
CFormatKind::JavaScriptOrJson
),
"1E-16"
);
}
#[test]
fn c_format_double_java_style() {
assert_eq!(
format_c_number(&TNumber::Double(1e-16), CFormatKind::JavaScriptOrJson),
"1E-16"
);
assert_eq!(
format_c_number(&TNumber::Double(-1e-16), CFormatKind::JavaScriptOrJson),
"-1E-16"
);
assert_eq!(
format_c_number(&TNumber::Double(0.05), CFormatKind::JavaScriptOrJson),
"0.05"
);
assert_eq!(
format_c_number(&TNumber::Double(100000.5), CFormatKind::JavaScriptOrJson),
"100000.5"
);
assert_eq!(
format_c_number(&TNumber::Double(1.0), CFormatKind::JavaScriptOrJson),
"1"
);
assert_eq!(
format_c_number(&TNumber::Double(1e21), CFormatKind::JavaScriptOrJson),
"1E21"
);
assert_eq!(
format_c_number(
&TNumber::Double(f64::INFINITY),
CFormatKind::JavaScriptOrJson
),
"Infinity"
);
assert_eq!(
format_c_number(
&TNumber::Double(f64::NEG_INFINITY),
CFormatKind::JavaScriptOrJson
),
"-Infinity"
);
assert_eq!(
format_c_number(&TNumber::Double(f64::NAN), CFormatKind::JavaScriptOrJson),
"NaN"
);
}
#[test]
fn c_format_variants() {
assert_eq!(
format_c_string("a'b\"c", CFormatKind::JavaScriptOrJson),
"\"a'b\\\"c\""
);
assert_eq!(format_c_string("a'b", CFormatKind::JavaScript), "\"a'b\"");
assert_eq!(format_c_string("<x>", CFormatKind::Java), "\"<x>\"");
assert_eq!(format_c_string("<x>", CFormatKind::Xs), "<x>");
let d = TNumber::Double(f64::INFINITY);
assert_eq!(
format_c_number(&d, CFormatKind::JavaScriptOrJson),
"Infinity"
);
assert_eq!(
format_c_number(&d, CFormatKind::Java),
"Double.POSITIVE_INFINITY"
);
assert_eq!(format_c_number(&d, CFormatKind::Xs), "INF");
let f = TNumber::Float(f32::NAN);
assert_eq!(format_c_number(&f, CFormatKind::JavaScriptOrJson), "NaN");
assert_eq!(format_c_number(&f, CFormatKind::Java), "Float.NaN");
assert_eq!(CFormatKind::parse("Java"), Some(CFormatKind::Java));
assert_eq!(CFormatKind::parse("XS"), Some(CFormatKind::Xs));
assert_eq!(CFormatKind::parse("legacy"), Some(CFormatKind::Legacy));
assert_eq!(
CFormatKind::parse("JavaScript or JSON"),
Some(CFormatKind::JavaScriptOrJson)
);
assert_eq!(CFormatKind::parse("bogus"), None);
assert_eq!(CFormatKind::JavaScriptOrJson.name(), "JavaScript or JSON");
}
#[test]
fn decimal_format_subset() {
let fmt = parse_decimal_format("0.00", "en_US").unwrap();
assert_eq!(format_decimal(&fmt, &TNumber::Int(1)), "1.00");
assert_eq!(
format_decimal(&fmt, &TNumber::from_i64(1234567)),
"1234567.00"
);
assert_eq!(
format_decimal(
&fmt,
&TNumber::Decimal(BigDecimal::from_str("1234567.886").unwrap())
),
"1234567.89"
);
let fmt = parse_decimal_format(",##0.##", "fr_FR").unwrap();
assert_eq!(format_decimal(&fmt, &TNumber::Int(1)), "1");
assert_eq!(
format_decimal(
&fmt,
&TNumber::Decimal(BigDecimal::from_str("1234567.886").unwrap())
),
"1\u{202f}234\u{202f}567,89"
);
let fmt = parse_decimal_format(",000.##", "fr_FR").unwrap();
assert_eq!(
format_decimal(
&fmt,
&TNumber::Decimal(BigDecimal::from_str("100000.5").unwrap())
),
"100\u{202f}000,5"
);
let fmt = parse_decimal_format("'f'#", "en_US").unwrap();
assert_eq!(format_decimal(&fmt, &TNumber::Int(1)), "f1");
}
}