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() {
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() {
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);
}