use std::time::Duration;
use qubit_argument::ArgumentValue;
#[test]
fn test_from_preserves_signed_integers() {
assert_eq!(ArgumentValue::from(i8::MIN), ArgumentValue::Signed(-128));
assert_eq!(
ArgumentValue::from(i16::MIN),
ArgumentValue::Signed(-32_768)
);
assert_eq!(
ArgumentValue::from(i32::MIN),
ArgumentValue::Signed(-2_147_483_648)
);
assert_eq!(
ArgumentValue::from(i64::MIN),
ArgumentValue::Signed(i128::from(i64::MIN))
);
assert_eq!(
ArgumentValue::from(i128::MIN),
ArgumentValue::Signed(i128::MIN)
);
assert_eq!(
ArgumentValue::from(isize::MIN),
ArgumentValue::Signed(isize::MIN as i128)
);
}
#[test]
fn test_from_preserves_unsigned_integers() {
assert_eq!(ArgumentValue::from(u8::MAX), ArgumentValue::Unsigned(255));
assert_eq!(
ArgumentValue::from(u16::MAX),
ArgumentValue::Unsigned(65_535)
);
assert_eq!(
ArgumentValue::from(u32::MAX),
ArgumentValue::Unsigned(4_294_967_295)
);
assert_eq!(
ArgumentValue::from(u64::MAX),
ArgumentValue::Unsigned(u128::from(u64::MAX))
);
assert_eq!(
ArgumentValue::from(u128::MAX),
ArgumentValue::Unsigned(u128::MAX)
);
assert_eq!(
ArgumentValue::from(usize::MAX),
ArgumentValue::Unsigned(usize::MAX as u128)
);
}
#[test]
fn test_argument_value_preserves_float_bits() {
let negative_zero = ArgumentValue::from(-0.0_f64);
let positive_zero = ArgumentValue::from(0.0_f64);
assert_ne!(negative_zero, positive_zero);
assert_eq!(negative_zero.to_string(), "-0");
}
#[test]
fn test_from_preserves_float32_bits() {
let value = -0.0_f32;
assert_eq!(
ArgumentValue::from(value),
ArgumentValue::Float32(value.to_bits())
);
}
#[test]
fn test_fmt_debug_reconstructs_special_floats() {
assert_eq!(
format!("{:?}", ArgumentValue::from(-0.0_f32)),
"Float32(-0.0)"
);
assert_eq!(
format!("{:?}", ArgumentValue::from(f64::INFINITY)),
"Float64(inf)"
);
assert_eq!(
format!("{:?}", ArgumentValue::from(f64::NAN)),
"Float64(NaN)"
);
}
#[test]
fn test_fmt_display_reconstructs_special_floats() {
assert_eq!(ArgumentValue::from(f32::NEG_INFINITY).to_string(), "-inf");
assert_eq!(ArgumentValue::from(f64::NAN).to_string(), "NaN");
}
#[test]
fn test_fmt_formats_integer_variants() {
let signed = ArgumentValue::from(-7_i32);
assert_eq!(format!("{signed:?}"), "Signed(-7)");
assert_eq!(signed.to_string(), "-7");
let unsigned = ArgumentValue::from(7_u32);
assert_eq!(format!("{unsigned:?}"), "Unsigned(7)");
assert_eq!(unsigned.to_string(), "7");
}
#[test]
fn test_from_preserves_duration() {
let duration = Duration::new(12, 345);
assert_eq!(
ArgumentValue::from(duration),
ArgumentValue::Duration(duration),
);
}
#[test]
fn test_fmt_formats_duration() {
let duration = Duration::from_millis(1_500);
let value = ArgumentValue::from(duration);
assert_eq!(format!("{value:?}"), "Duration(1.5s)");
assert_eq!(value.to_string(), "1.5s");
}