@@ -1051,6 +1051,35 @@ function test_constraint_gradient()
1051
1051
return
1052
1052
end
1053
1053
1054
+ function test_hessian_length ()
1055
+ x = MOI. VariableIndex (1 )
1056
+ model = Nonlinear. Model ()
1057
+ Nonlinear. set_objective (model, :(log ($ x)))
1058
+ evaluator = Nonlinear. Evaluator (model, Nonlinear. SparseReverseMode (), [x])
1059
+ MOI. initialize (evaluator, [:Hess ])
1060
+ H = Float64[]
1061
+ got, want = 0 , 1
1062
+ @test_throws (
1063
+ ErrorException (
1064
+ " Vector provided for Hessian storage has too few elements. Got " *
1065
+ " $got , want $want ." ,
1066
+ ),
1067
+ MOI. eval_hessian_lagrangian (evaluator, H, [1.0 ], 1.0 , [1.0 ]),
1068
+ )
1069
+ return
1070
+ end
1071
+
1072
+ function test_jacobian_length ()
1073
+ x = MOI. VariableIndex (1 )
1074
+ model = Nonlinear. Model ()
1075
+ Nonlinear. add_constraint (model, :(sin ($ x)), MOI. LessThan (0.5 ))
1076
+ evaluator = Nonlinear. Evaluator (model, Nonlinear. SparseReverseMode (), [x])
1077
+ MOI. initialize (evaluator, [:Jac ])
1078
+ J = Float64[]
1079
+ @test_throws BoundsError MOI. eval_constraint_jacobian (evaluator, J, [1.0 ])
1080
+ return
1081
+ end
1082
+
1054
1083
function test_timers ()
1055
1084
x = MOI. VariableIndex (1 )
1056
1085
model = Nonlinear. Model ()
@@ -1064,10 +1093,14 @@ function test_timers()
1064
1093
MOI. eval_constraint (evaluator, g, y)
1065
1094
MOI. eval_objective_gradient (evaluator, g, y)
1066
1095
MOI. eval_constraint_gradient (evaluator, g, y, 1 )
1067
- MOI. eval_constraint_jacobian (evaluator, g, y)
1068
- MOI. eval_hessian_objective (evaluator, g, y)
1069
- MOI. eval_hessian_constraint (evaluator, g, y, 1 )
1070
- MOI. eval_hessian_lagrangian (evaluator, g, y, 1.0 , [1.0 ])
1096
+ J = zeros (length (MOI. jacobian_structure (evaluator)))
1097
+ MOI. eval_constraint_jacobian (evaluator, J, y)
1098
+ H = zeros (length (MOI. hessian_objective_structure (evaluator)))
1099
+ MOI. eval_hessian_objective (evaluator, H, y)
1100
+ H = zeros (length (MOI. hessian_constraint_structure (evaluator, 1 )))
1101
+ MOI. eval_hessian_constraint (evaluator, H, y, 1 )
1102
+ H = zeros (length (MOI. hessian_lagrangian_structure (evaluator)))
1103
+ MOI. eval_hessian_lagrangian (evaluator, H, y, 1.0 , [1.0 ])
1071
1104
timers = [
1072
1105
evaluator. initialize_timer,
1073
1106
evaluator. eval_objective_timer,
0 commit comments