@@ -1109,6 +1109,198 @@ function test_show()
1109
1109
return
1110
1110
end
1111
1111
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
+
1112
1304
end # module
1113
1305
1114
1306
TestCachingOptimizer. runtests ()
0 commit comments