use russell_lab::*;
fn main() -> Result<(), StrError> {
#[rustfmt::skip]
let mut a = ComplexMatrix::from(&[
[cpx!(-1.34, 2.55), cpx!( 0.28, 3.17), cpx!(-6.39,-2.20), cpx!( 0.72,-0.92)],
[cpx!(-0.17,-1.41), cpx!( 3.31,-0.15), cpx!(-0.15, 1.34), cpx!( 1.29, 1.38)],
[cpx!(-3.29,-2.39), cpx!(-1.91, 4.42), cpx!(-0.14,-1.35), cpx!( 1.72, 1.35)],
[cpx!( 2.41, 0.39), cpx!(-0.56, 1.47), cpx!(-0.83,-0.69), cpx!(-1.96, 0.67)],
]);
let mut b = ComplexVector::from(&[
cpx!(26.26, 51.78),
cpx!(6.43, -8.68),
cpx!(-5.75, 25.31),
cpx!(1.16, 2.57),
]);
complex_solve_lin_sys(&mut b, &mut a).unwrap();
println!("a (after) =\n{:.3}", a);
println!("b (after) =\n{:.3}", b);
let correct = ComplexVector::from(&[
cpx!(1.0, 1.0), cpx!(2.0, -3.0), cpx!(-4.0, -5.0), cpx!(0.0, 6.0), ]);
println!("expected =\n{:.3}", correct);
complex_vec_approx_eq(&b, &correct, 1e-13);
Ok(())
}