Commafy



examples/other/commafy/Cargo.toml
[package]
name = "commafy"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

examples/other/commafy/src/lib.rs
pub fn commafy<Integer: Into<i64> +  Copy + std::fmt::Debug + std::fmt::Display>(num: Integer) -> String {
//pub fn commafy(num: i32) -> String {
    let num = format!("{num}");
    let mut ix = 0;
    let num = num.chars().rev().map(|chr| {
        ix += 1;
        if ix % 3 == 1 && ix > 1 { format!(",{chr}") } else { format!("{chr}") }
    }).collect::<String>();
    num.chars().rev().collect::<String>()
}

#[cfg(test)]
mod tests {
    use super::commafy;

    #[test]
    fn test_commafy() {
        assert_eq!("1", commafy(1));
        assert_eq!("12", commafy(12));
        assert_eq!("123", commafy(123));
        assert_eq!("1,234", commafy(1234));
        assert_eq!("12,345", commafy(12345));
        assert_eq!("123,456", commafy(123456));
        assert_eq!("1,234,567", commafy(1234567));

        assert_eq!("1,234", commafy(1234i16));
        assert_eq!("254", commafy(254u8));
        assert_eq!("1,254", commafy(1254u16));
    }
}