use russell_lab::*;
use russell_sparse::prelude::*;
#[test]
fn test_complex_umfpack() -> Result<(), StrError> {
let n = 10;
let d = (n as f64) / 10.0;
let mut coo = ComplexCooMatrix::new(n, n, n, Sym::No)?;
let mut x_correct = ComplexVector::new(n);
let mut rhs = ComplexVector::new(n);
for k in 0..n {
let akk = cpx!(10.0 + (k as f64) * d, 10.0 - (k as f64) * d);
coo.put(k, k, akk)?;
x_correct[k] = cpx!(k as f64, 0.5);
rhs[k] = akk * x_correct[k];
}
let mut x = ComplexVector::new(n);
let mut solver = ComplexSolverUMFPACK::new()?;
solver.factorize(&coo, None)?;
solver.solve(&mut x, &rhs, false)?;
complex_vec_approx_eq(&x, &x_correct, 1e-14);
Ok(())
}