humfmt 0.6.0

Ergonomic human-readable formatting toolkit for Rust
Documentation
use core::time::Duration;

use humfmt::{duration, DurationOptions, Humanize};

#[test]
fn formats_zero_duration() {
    assert_eq!(duration(Duration::ZERO).to_string(), "0s");
}

#[test]
fn formats_compound_durations() {
    assert_eq!(duration(Duration::from_secs(3661)).to_string(), "1h 1m");
    assert_eq!(duration(Duration::from_secs(90061)).to_string(), "1d 1h");
}

#[test]
fn formats_subsecond_durations() {
    assert_eq!(
        duration(Duration::from_millis(1500)).to_string(),
        "1s 500ms"
    );
    assert_eq!(
        duration(Duration::from_nanos(1_500)).to_string(),
        "1us 500ns"
    );
}

#[test]
fn supports_long_units() {
    let opts = DurationOptions::new().long_units();
    assert_eq!(
        humfmt::duration_with(Duration::from_millis(1500), opts).to_string(),
        "1 second 500 milliseconds"
    );
}

#[test]
fn supports_max_unit_override() {
    let opts = DurationOptions::new().max_units(3);
    assert_eq!(
        humfmt::duration_with(Duration::from_secs(3665), opts).to_string(),
        "1h 1m 5s"
    );
}

#[test]
fn supports_max_units_up_to_seven() {
    let value = Duration::from_nanos(1_001_001_001);
    let opts = DurationOptions::new().max_units(7).long_units();
    assert_eq!(
        humfmt::duration_with(value, opts).to_string(),
        "1 second 1 millisecond 1 microsecond 1 nanosecond"
    );
}

#[test]
fn max_units_clamps_to_one_at_minimum() {
    let opts = DurationOptions::new().max_units(0);
    assert_eq!(
        humfmt::duration_with(Duration::from_secs(3661), opts).to_string(),
        "1h"
    );
}

#[test]
fn supports_extension_trait_usage() {
    assert_eq!(
        Duration::from_secs(90).human_duration().to_string(),
        "1m 30s"
    );
}

#[test]
fn long_units_singular_vs_plural() {
    let opts = DurationOptions::new().long_units().max_units(3);

    assert_eq!(
        humfmt::duration_with(Duration::from_secs(60), opts).to_string(),
        "1 minute"
    );
    assert_eq!(
        humfmt::duration_with(Duration::from_secs(120), opts).to_string(),
        "2 minutes"
    );

    assert_eq!(
        humfmt::duration_with(Duration::from_secs(3600), opts).to_string(),
        "1 hour"
    );
    assert_eq!(
        humfmt::duration_with(Duration::from_secs(7200), opts).to_string(),
        "2 hours"
    );

    assert_eq!(
        humfmt::duration_with(Duration::from_secs(86_400), opts).to_string(),
        "1 day"
    );
    assert_eq!(
        humfmt::duration_with(Duration::from_secs(86_400 * 2), opts).to_string(),
        "2 days"
    );
}