use qubit_argument::ArgumentErrorKind;
use qubit_argument::ArgumentValue;
use qubit_argument::FloatArgument;
#[test]
fn test_require_finite_preserves_finite_values() {
assert_eq!(
(-0.0_f32)
.require_finite("factor")
.expect("negative zero is finite")
.to_bits(),
(-0.0_f32).to_bits(),
);
assert_eq!(1.5_f64.require_finite("factor").expect("one and a half is finite"), 1.5,);
}
#[test]
fn test_require_finite_rejects_positive_infinity() {
let error = f32::INFINITY
.require_finite("jitter.factor")
.expect_err("positive infinity is not finite");
assert_eq!(error.path().as_str(), "jitter.factor");
assert_eq!(
error.kind(),
&ArgumentErrorKind::NotFinite {
actual: ArgumentValue::from(f32::INFINITY),
},
);
}
#[test]
fn test_require_finite_rejects_negative_infinity() {
let error = f64::NEG_INFINITY
.require_finite("multiplier")
.expect_err("negative infinity is not finite");
assert_eq!(error.path().as_str(), "multiplier");
assert_eq!(
error.kind(),
&ArgumentErrorKind::NotFinite {
actual: ArgumentValue::from(f64::NEG_INFINITY),
},
);
}
#[test]
fn test_require_finite_reports_not_a_number_for_nan() {
let error = f64::NAN.require_finite("multiplier").expect_err("NaN is not a number");
assert_eq!(error.path().as_str(), "multiplier");
assert_eq!(error.kind(), &ArgumentErrorKind::NotANumber);
}