use uninum::{Number, num};
#[test]
fn sqrt_of_unsigned_promotes_to_float() {
let value = Number::from(144u64);
let result = value.sqrt();
assert!(result.approx_eq(&num!(12.0), 1e-12, 0.0));
assert!(result.try_get_f64().is_some());
}
#[test]
fn sqrt_of_negative_i64_is_nan() {
let value = Number::from(-9i64);
let result = value.sqrt();
assert!(result.is_nan());
}
#[test]
fn sqrt_of_f64_matches_native_behavior() {
let value = Number::from(2.0f64);
let result = value.sqrt();
let expected = Number::from(2.0f64.sqrt());
assert!(result.approx_eq(&expected, 1e-12, 0.0));
}
#[cfg(feature = "decimal")]
#[test]
fn sqrt_of_decimal_uses_high_precision_path() {
use rust_decimal::Decimal;
let decimal = Number::from(Decimal::new(225, 2)); let result = decimal.sqrt();
let decimal_value = result.try_get_decimal().expect("expected decimal result");
assert_eq!(**decimal_value, Decimal::new(15, 1)); }
#[cfg(feature = "decimal")]
#[test]
fn sqrt_of_negative_decimal_is_nan() {
use rust_decimal::Decimal;
let decimal = Number::from(Decimal::new(-4, 0));
let result = decimal.sqrt();
assert!(result.is_nan());
}