@@ -52,12 +52,61 @@ def t_expr(expr):
5252 assert expr_value == pytest .approx (3.0 , abs = 1e-6 )
5353 model .delete_constraint (con )
5454
55+ def t_binary_expr (lhs , rhs ):
56+ expr = lhs - rhs
57+
58+ con = model .add_linear_constraint (lhs >= rhs + 1.0 )
59+ model .set_objective (expr )
60+ model .optimize ()
61+ expr_value = model .get_value (expr )
62+ assert expr_value == pytest .approx (1.0 , abs = 1e-6 )
63+ model .delete_constraint (con )
64+
65+ con = model .add_linear_constraint (lhs <= rhs + 2.0 )
66+ model .set_objective (expr , poi .ObjectiveSense .Maximize )
67+ model .optimize ()
68+ expr_value = model .get_value (expr )
69+ assert expr_value == pytest .approx (2.0 , abs = 1e-6 )
70+ model .delete_constraint (con )
71+
72+ con = model .add_linear_constraint (lhs == rhs + 3.0 )
73+ model .set_objective (expr , poi .ObjectiveSense .Maximize )
74+ model .optimize ()
75+ expr_value = model .get_value (expr )
76+ assert expr_value == pytest .approx (3.0 , abs = 1e-6 )
77+ model .delete_constraint (con )
78+
79+ con = model .add_linear_constraint (1.0 + rhs <= lhs )
80+ model .set_objective (expr )
81+ model .optimize ()
82+ expr_value = model .get_value (expr )
83+ assert expr_value == pytest .approx (1.0 , abs = 1e-6 )
84+ model .delete_constraint (con )
85+
86+ con = model .add_linear_constraint (2.0 + rhs >= lhs )
87+ model .set_objective (expr , poi .ObjectiveSense .Maximize )
88+ model .optimize ()
89+ expr_value = model .get_value (expr )
90+ assert expr_value == pytest .approx (2.0 , abs = 1e-6 )
91+ model .delete_constraint (con )
92+
93+ con = model .add_linear_constraint (3.0 + rhs == lhs )
94+ model .set_objective (expr , poi .ObjectiveSense .Maximize )
95+ model .optimize ()
96+ expr_value = model .get_value (expr )
97+ assert expr_value == pytest .approx (3.0 , abs = 1e-6 )
98+ model .delete_constraint (con )
99+
55100 expr = x + y
56101 t_expr (expr )
57102
58103 expr = poi .ExprBuilder (x + y )
59104 t_expr (expr )
60105
106+ for lhs in [x , poi .ScalarAffineFunction (x ), poi .ExprBuilder (x )]:
107+ for rhs in [y , poi .ScalarAffineFunction (y ), poi .ExprBuilder (y )]:
108+ t_binary_expr (lhs , rhs )
109+
61110 if hasattr (model , "add_quadratic_constraint" ):
62111 con_expr = x * x + y * y
63112 expr = x + y
0 commit comments