@Test
public void computeUpdate_positiveDefinite() {
double radius = 2;
MockOwner owner = new MockOwner(null);
TrustRegionUpdateCauchy_F64<DMatrixRMaj> alg = new TrustRegionUpdateCauchy_F64<>();
alg.initialize(owner,2,-1);
DMatrixRMaj p = new DMatrixRMaj(2,1);
owner.hessian().set(new double[][]{{2,0.1},{0.1,1.5}});
owner.gradientNorm = 1000;
setGradient(owner.gradient,0.1,0.4,owner.gradientNorm);
CommonOps_DDRM.divide(owner.gradient,owner.gradientNorm,alg.direction);
alg.gBg = owner.hessian.innerVectorHessian(alg.direction);
alg.computeUpdate(p,radius);
assertEquals(owner.computePredictedReduction(p),alg.getPredictedReduction(),UtilEjml.TEST_F64);
assertEquals(radius, alg.getStepLength(), UtilEjml.TEST_F64);
assertEquals(radius, NormOps_DDRM.normF(p), UtilEjml.TEST_F64);
owner.gradientNorm = 0.1;
setGradient(owner.gradient,0.1,0.4,owner.gradientNorm);
alg.computeUpdate(p,radius);
double n = NormOps_DDRM.normF(p);
assertTrue(n > 0 && n < radius);
double expectedRadius = owner.gradientNorm/alg.gBg;
assertEquals(owner.computePredictedReduction(p),alg.getPredictedReduction(),UtilEjml.TEST_F64);
assertEquals(expectedRadius, alg.getStepLength(), UtilEjml.TEST_F64);
assertEquals(expectedRadius, NormOps_DDRM.normF(p), UtilEjml.TEST_F64);
}