@@ -1109,6 +1109,198 @@ function test_show()
11091109 return
11101110end
11111111
1112+ function test_add_variable ()
1113+ for mode in (MOI. Utilities. AUTOMATIC, MOI. Utilities. MANUAL)
1114+ cache = MOI. Utilities. Model {Float64} ()
1115+ optimizer = MOI. Utilities. MockOptimizer (MOI. Utilities. Model {Float64} ())
1116+ model = MOI. Utilities. CachingOptimizer (cache, mode)
1117+ MOI. Utilities. reset_optimizer (model, optimizer)
1118+ MOI. Utilities. attach_optimizer (model)
1119+ x = MOI. add_variable (model)
1120+ @test MOI. is_valid (optimizer, model. model_to_optimizer_map[x])
1121+ end
1122+ return
1123+ end
1124+
1125+ function test_add_variables ()
1126+ for mode in (MOI. Utilities. AUTOMATIC, MOI. Utilities. MANUAL)
1127+ cache = MOI. Utilities. Model {Float64} ()
1128+ optimizer = MOI. Utilities. MockOptimizer (MOI. Utilities. Model {Float64} ())
1129+ model = MOI. Utilities. CachingOptimizer (cache, mode)
1130+ MOI. Utilities. reset_optimizer (model, optimizer)
1131+ MOI. Utilities. attach_optimizer (model)
1132+ x = MOI. add_variables (model, 2 )
1133+ for xi in x
1134+ @test MOI. is_valid (optimizer, model. model_to_optimizer_map[xi])
1135+ end
1136+ end
1137+ return
1138+ end
1139+
1140+ function test_add_constrained_variable ()
1141+ for mode in (MOI. Utilities. AUTOMATIC, MOI. Utilities. MANUAL)
1142+ cache = MOI. Utilities. Model {Float64} ()
1143+ optimizer = MOI. Utilities. MockOptimizer (MOI. Utilities. Model {Float64} ())
1144+ model = MOI. Utilities. CachingOptimizer (cache, mode)
1145+ MOI. Utilities. reset_optimizer (model, optimizer)
1146+ MOI. Utilities. attach_optimizer (model)
1147+ x, c = MOI. add_constrained_variable (model, MOI. ZeroOne ())
1148+ @test MOI. is_valid (optimizer, model. model_to_optimizer_map[x])
1149+ @test MOI. is_valid (optimizer, model. model_to_optimizer_map[c])
1150+ end
1151+ return
1152+ end
1153+
1154+ function test_add_constrained_variables ()
1155+ for mode in (MOI. Utilities. AUTOMATIC, MOI. Utilities. MANUAL)
1156+ cache = MOI. Utilities. Model {Float64} ()
1157+ optimizer = MOI. Utilities. MockOptimizer (MOI. Utilities. Model {Float64} ())
1158+ model = MOI. Utilities. CachingOptimizer (cache, mode)
1159+ MOI. Utilities. reset_optimizer (model, optimizer)
1160+ MOI. Utilities. attach_optimizer (model)
1161+ x, c = MOI. add_constrained_variables (model, MOI. Zeros (2 ))
1162+ for xi in x
1163+ @test MOI. is_valid (optimizer, model. model_to_optimizer_map[xi])
1164+ end
1165+ @test MOI. is_valid (optimizer, model. model_to_optimizer_map[c])
1166+ end
1167+ return
1168+ end
1169+
1170+ function test_modify_constraint ()
1171+ for mode in (MOI. Utilities. AUTOMATIC, MOI. Utilities. MANUAL)
1172+ cache = MOI. Utilities. Model {Float64} ()
1173+ optimizer = MOI. Utilities. MockOptimizer (MOI. Utilities. Model {Float64} ())
1174+ model = MOI. Utilities. CachingOptimizer (cache, mode)
1175+ MOI. Utilities. reset_optimizer (model, optimizer)
1176+ MOI. Utilities. attach_optimizer (model)
1177+ x = MOI. add_variable (model)
1178+ c = MOI. add_constraint (model, 1.0 * x, MOI. EqualTo (1.0 ))
1179+ c_opt = model. model_to_optimizer_map[c]
1180+ f = MOI. get (optimizer, MOI. ConstraintFunction (), c_opt)
1181+ @test f ≈ 1.0 * model. model_to_optimizer_map[x]
1182+ MOI. modify (model, c, MOI. ScalarCoefficientChange (x, 2.0 ))
1183+ c_opt = model. model_to_optimizer_map[c]
1184+ f = MOI. get (optimizer, MOI. ConstraintFunction (), c_opt)
1185+ @test f ≈ 2.0 * model. model_to_optimizer_map[x]
1186+ end
1187+ return
1188+ end
1189+
1190+ function test_modify_constraint ()
1191+ for mode in (MOI. Utilities. AUTOMATIC, MOI. Utilities. MANUAL)
1192+ cache = MOI. Utilities. Model {Float64} ()
1193+ optimizer = MOI. Utilities. MockOptimizer (MOI. Utilities. Model {Float64} ())
1194+ model = MOI. Utilities. CachingOptimizer (cache, mode)
1195+ MOI. Utilities. reset_optimizer (model, optimizer)
1196+ MOI. Utilities. attach_optimizer (model)
1197+ x = MOI. add_variable (model)
1198+ f = 1.0 * x
1199+ attr = MOI. ObjectiveFunction {typeof(f)} ()
1200+ MOI. set (model, attr, f)
1201+ @test MOI. get (optimizer, attr) ≈ 1.0 * model. model_to_optimizer_map[x]
1202+ MOI. modify (model, attr, MOI. ScalarCoefficientChange (x, 2.0 ))
1203+ @test MOI. get (optimizer, attr) ≈ 2.0 * model. model_to_optimizer_map[x]
1204+ end
1205+ return
1206+ end
1207+
1208+ function test_delete_invalid_index ()
1209+ for mode in (MOI. Utilities. AUTOMATIC, MOI. Utilities. MANUAL)
1210+ cache = MOI. Utilities. Model {Float64} ()
1211+ optimizer = MOI. Utilities. MockOptimizer (MOI. Utilities. Model {Float64} ())
1212+ model = MOI. Utilities. CachingOptimizer (cache, mode)
1213+ MOI. Utilities. reset_optimizer (model, optimizer)
1214+ MOI. Utilities. attach_optimizer (model)
1215+ x = MOI. add_variable (model)
1216+ @test MOI. is_valid (optimizer, model. model_to_optimizer_map[x])
1217+ MOI. delete (model, x)
1218+ @test_throws (KeyError, model. model_to_optimizer_map[x])
1219+ @test_throws (MOI. InvalidIndex, MOI. delete (model, x))
1220+ end
1221+ return
1222+ end
1223+
1224+ function test_delete_variables ()
1225+ for mode in (MOI. Utilities. AUTOMATIC, MOI. Utilities. MANUAL)
1226+ cache = MOI. Utilities. Model {Float64} ()
1227+ optimizer = MOI. Utilities. MockOptimizer (MOI. Utilities. Model {Float64} ())
1228+ model = MOI. Utilities. CachingOptimizer (cache, mode)
1229+ MOI. Utilities. reset_optimizer (model, optimizer)
1230+ MOI. Utilities. attach_optimizer (model)
1231+ x, y = MOI. add_variables (model, 2 )
1232+ @test MOI. is_valid (optimizer, model. model_to_optimizer_map[x])
1233+ @test MOI. is_valid (optimizer, model. model_to_optimizer_map[y])
1234+ MOI. delete (model, [x])
1235+ @test_throws KeyError model. model_to_optimizer_map[x]
1236+ @test MOI. is_valid (optimizer, model. model_to_optimizer_map[y])
1237+ @test_throws (MOI. InvalidIndex, MOI. delete (model, x))
1238+ end
1239+ return
1240+ end
1241+
1242+ function test_set_attribute ()
1243+ for mode in (MOI. Utilities. AUTOMATIC, MOI. Utilities. MANUAL)
1244+ cache = MOI. Utilities. UniversalFallback (MOI. Utilities. Model {Float64} ())
1245+ optimizer = MOI. Utilities. MockOptimizer (
1246+ MOI. Utilities. UniversalFallback (MOI. Utilities. Model {Float64} ()),
1247+ )
1248+ model = MOI. Utilities. CachingOptimizer (cache, mode)
1249+ MOI. Utilities. reset_optimizer (model, optimizer)
1250+ MOI. Utilities. attach_optimizer (model)
1251+ x = MOI. add_variable (model)
1252+ @test MOI. is_valid (optimizer, model. model_to_optimizer_map[x])
1253+ attr = MOI. VariablePrimalStart ()
1254+ MOI. set (model, attr, x, 1.23 )
1255+ opt_attr = MOI. Utilities. AttributeFromOptimizer (attr)
1256+ cache_attr = MOI. Utilities. AttributeFromModelCache (attr)
1257+ @test MOI. get (model, opt_attr, x) == 1.23
1258+ @test MOI. get (model, cache_attr, x) == 1.23
1259+ end
1260+ return
1261+ end
1262+
1263+ function test_get_AttributeFromOptimizer ()
1264+ cache = MOI. Utilities. Model {Float64} ()
1265+ optimizer = MOI. Utilities. MockOptimizer (MOI. Utilities. Model {Float64} ())
1266+ model = MOI. Utilities. CachingOptimizer (cache, optimizer)
1267+ x = MOI. add_variable (model)
1268+ MOI. Utilities. attach_optimizer (model)
1269+ attr = MOI. VariableName ()
1270+ optimizer_attr = MOI. Utilities. AttributeFromOptimizer (attr)
1271+ @test MOI. supports (model, optimizer_attr, MOI. VariableIndex)
1272+ MOI. set (model, optimizer_attr, x, " x" )
1273+ @test MOI. get (model, attr, x) == " "
1274+ @test MOI. get (model, optimizer_attr, x) == " x"
1275+ @test MOI. get (model, optimizer_attr, [x]) == [" x" ]
1276+ return
1277+ end
1278+
1279+ function test_get_AttributeFromModelCache ()
1280+ cache = MOI. Utilities. Model {Float64} ()
1281+ optimizer = MOI. Utilities. MockOptimizer (MOI. Utilities. Model {Float64} ())
1282+ model = MOI. Utilities. CachingOptimizer (cache, optimizer)
1283+ x = MOI. add_variable (model)
1284+ MOI. Utilities. attach_optimizer (model)
1285+ # VariableName
1286+ attr = MOI. VariableName ()
1287+ cache_attr = MOI. Utilities. AttributeFromModelCache (attr)
1288+ MOI. set (model, cache_attr, x, " x" )
1289+ @test MOI. supports (model, cache_attr, MOI. VariableIndex)
1290+ @test MOI. get (model, attr, x) == " x"
1291+ @test MOI. get (model, cache_attr, x) == " x"
1292+ @test MOI. get (model, MOI. Utilities. AttributeFromOptimizer (attr), x) == " "
1293+ # Name
1294+ attr = MOI. Name ()
1295+ cache_attr = MOI. Utilities. AttributeFromModelCache (attr)
1296+ MOI. set (model, cache_attr, " m" )
1297+ @test MOI. supports (model, cache_attr)
1298+ @test MOI. get (model, attr) == " m"
1299+ @test MOI. get (model, cache_attr) == " m"
1300+ @test MOI. get (model, MOI. Utilities. AttributeFromOptimizer (attr)) == " "
1301+ return
1302+ end
1303+
11121304end # module
11131305
11141306TestCachingOptimizer. runtests ()
0 commit comments