use oxinum_complex::native::{BigComplex, RoundingMode};
use proptest::prelude::*;
const PREC: u32 = 80;
const MODE: RoundingMode = RoundingMode::HalfEven;
const NEAR_ZERO: f64 = 1e-6;
proptest! {
#[test]
fn exp_ln_round_trip(a in -5.0f64..5.0, b in -5.0f64..5.0) {
let mag = a.hypot(b);
prop_assume!(mag > NEAR_ZERO);
let z = BigComplex::from_f64(a, b, PREC).expect("finite parts");
let back = z
.ln(PREC, MODE)
.expect("ln")
.exp(PREC, MODE)
.expect("exp");
let (re, im) = back.to_f64_parts();
let tol = 1e-12 * mag.max(1.0);
prop_assert!((re - a).abs() < tol, "re: {re} vs {a} (tol {tol})");
prop_assert!((im - b).abs() < tol, "im: {im} vs {b} (tol {tol})");
}
#[test]
fn conj_conj_is_identity(a in -5.0f64..5.0, b in -5.0f64..5.0) {
let z = BigComplex::from_f64(a, b, PREC).expect("finite parts");
prop_assert!(z.conj().conj() == z);
}
}