use super::*;
#[test]
fn test1() {
let ck = 1.091414141414142;
let suppressalg = 0;
let kk = 5;
#[rustfmt::skip]
let ida_phi = array![
[ 3.634565317158998e-05, 1.453878335134203e-10, 0.9999636542014404, ],
[ -6.530333550677049e-06, -2.612329458968465e-11, 6.530359673556191e-06, ],
[ 1.946442728026142e-06, 7.786687275994346e-12, -1.946450515496441e-06, ],
[ -8.097632208221231e-07, -3.239585549038764e-12, 8.097664556005615e-07, ],
[ 3.718130977075839e-07, 1.487573462300438e-12, -3.71814615793545e-07, ],
[ -3.24421895454213e-07, -1.297915245220823e-12, 3.244230624265827e-07, ],
];
let ida_ee = array![
2.65787533317467e-07,
1.063275845801634e-12,
-2.657884288386138e-07,
];
let ida_ewt = array![73343005.56993243, 999999.985461217, 9901.346408259429];
let ida_sigma = array![
1.0,
0.6666666666666666,
0.6666666666666666,
0.888888888888889,
1.422222222222222,
2.585858585858586,
];
let knew = 4;
let err_k = 29.10297975314245;
let err_km1 = 3.531162835377502;
let problem = Dummy {};
let mut ida: Ida<_, linear::Dense<_>, nonlinear::Newton<_>, _> = Ida::new(
problem,
array![0., 0., 0.],
array![0., 0., 0.],
TolControlSS::new(1e-4, 1e-4),
);
ida.ida_kk = kk;
ida.ida_suppressalg = suppressalg > 0;
ida.ida_phi.assign(&ida_phi);
ida.ida_ee.assign(&ida_ee);
ida.nlp.ida_ewt.assign(&ida_ewt);
ida.ida_sigma.assign(&ida_sigma);
let (err_k_new, err_km1_new, _) = ida.test_error(ck).expect_err("Should be TestFail");
assert_eq!(ida.ida_knew, knew);
assert_nearly_eq!(err_k_new, err_k);
assert_nearly_eq!(err_km1_new, err_km1);
}
#[test]
fn test2() {
let ck = 0.2025812352167927;
let suppressalg = 0;
let kk = 4;
#[rustfmt::skip]
let ida_phi = array![
[ 3.051237735052657e-05, 1.220531905117091e-10, 0.9999694875005963, ],
[ -2.513114849098281e-06, -1.005308974226734e-11, 2.513124902721765e-06, ],
[ 4.500284453718991e-07, 1.800291970640913e-12, -4.500302448499092e-07, ],
[ -1.366709389821433e-07, -5.467603693902342e-13, 1.366714866794709e-07, ],
[ 7.278821769100639e-08, 2.911981566628798e-13, -7.278850816613011e-08, ],
[ -8.304741244343501e-09, -3.324587131187576e-14, 8.304772990651073e-09, ],
];
let ida_ee = array![
-2.981302228744271e-08,
-1.192712676406388e-13,
2.981313872620108e-08,
];
let ida_ewt = array![76621085.31777237, 999999.9877946811, 9901.289220872719,];
let ida_sigma = array![
1.0,
0.5,
0.3214285714285715,
0.2396514200444849,
0.1941955227762807,
2.585858585858586,
];
let knew = 4;
let err_k = 0.2561137489433976;
let err_km1 = 0.455601916633899;
let nflag = true;
let problem = Dummy {};
let mut ida: Ida<_, linear::Dense<_>, nonlinear::Newton<_>, _> = Ida::new(
problem,
array![0., 0., 0.],
array![0., 0., 0.],
TolControlSS::new(1e-4, 1e-4),
);
ida.ida_kk = kk;
ida.ida_suppressalg = suppressalg > 0;
ida.ida_phi.assign(&ida_phi);
ida.ida_ee.assign(&ida_ee);
ida.nlp.ida_ewt.assign(&ida_ewt);
ida.ida_sigma.assign(&ida_sigma);
let (err_k_new, err_km1_new, nflag_new) = ida.test_error(ck).unwrap();
assert_eq!(ida.ida_knew, knew);
assert_nearly_eq!(err_k_new, err_k);
assert_nearly_eq!(err_km1_new, err_km1);
assert_eq!(nflag_new, nflag);
}