netspd 0.1.7

A beautiful, modern, minimalistic network speed testing terminal application
Documentation
//! Unit tests for human-readable formatting.

use std::time::Duration;

use netspd::utils::format::{
    format_bps, format_bytes, format_duration, format_eta, format_millis, split_bps,
    split_bps_unit, SpeedUnit,
};

#[test]
fn bps_scales_units() {
    assert_eq!(format_bps(500.0), "500.0 bps");
    assert_eq!(format_bps(1_500.0), "1.5 Kbps");
    assert_eq!(format_bps(142_500_000.0), "142.5 Mbps");
    assert_eq!(format_bps(2_400_000_000.0), "2.4 Gbps");
}

#[test]
fn bps_never_negative() {
    assert_eq!(format_bps(-10.0), "0.0 bps");
}

#[test]
fn split_bps_separates_value_and_unit() {
    let (value, unit) = split_bps(142_500_000.0);
    assert_eq!(value, "142.5");
    assert_eq!(unit, "Mbps");
}

#[test]
fn bytes_scale_units() {
    assert_eq!(format_bytes(512), "512 B");
    assert_eq!(format_bytes(1_500), "1.50 KB");
    assert_eq!(format_bytes(1_240_000_000), "1.24 GB");
}

#[test]
fn durations_render_as_minutes_seconds() {
    assert_eq!(format_duration(Duration::from_secs(0)), "00:00");
    assert_eq!(format_duration(Duration::from_secs(83)), "01:23");
}

#[test]
fn eta_renders_compactly() {
    assert_eq!(format_eta(Duration::from_secs(8)), "8s");
    assert_eq!(format_eta(Duration::from_secs(65)), "1m 05s");
}

#[test]
fn millis_adapt_precision() {
    assert_eq!(format_millis(12.44), "12.4 ms");
    assert_eq!(format_millis(234.6), "235 ms");
}

#[test]
fn split_bps_unit_bits_same_as_split_bps() {
    let (v1, u1) = split_bps(142_500_000.0);
    let (v2, u2) = split_bps_unit(142_500_000.0, SpeedUnit::Bits);
    assert_eq!(v1, v2);
    assert_eq!(u1, u2);
}

#[test]
fn split_bps_unit_bytes_converts_correctly() {
    // 800 Mbps = 100 MB/s
    let (value, unit) = split_bps_unit(800_000_000.0, SpeedUnit::Bytes);
    assert_eq!(unit, "MB/s");
    assert_eq!(value, "100.0");
}

#[test]
fn split_bps_unit_bytes_sub_megabyte() {
    // 800 Kbps = 100 KB/s
    let (value, unit) = split_bps_unit(800_000.0, SpeedUnit::Bytes);
    assert_eq!(unit, "KB/s");
    assert_eq!(value, "100.0");
}

#[test]
fn speed_unit_toggle_cycles() {
    assert_eq!(SpeedUnit::Bits.toggle(), SpeedUnit::Bytes);
    assert_eq!(SpeedUnit::Bytes.toggle(), SpeedUnit::Bits);
}