Skip to content

Commit a13a5f1

Browse files
Add tests for addConss
Compares the result of adding constraints through the new `addConss` versus the default `addCons`.
1 parent ca6fc75 commit a13a5f1

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

tests/test_model.py

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,89 @@ def test_model():
7979
assert s.getStatus() == 'unbounded'
8080

8181

82+
def test_multiple_cons_simple():
83+
def assert_conss_eq(a, b):
84+
assert a.name == b.name
85+
assert a.isInitial() == b.isInitial()
86+
assert a.isSeparated() == b.isSeparated()
87+
assert a.isEnforced() == b.isEnforced()
88+
assert a.isChecked() == b.isChecked()
89+
assert a.isPropagated() == b.isPropagated()
90+
assert a.isLocal() == b.isLocal()
91+
assert a.isModifiable() == b.isModifiable()
92+
assert a.isDynamic() == b.isDynamic()
93+
assert a.isRemovable() == b.isRemovable()
94+
assert a.isStickingAtNode() == b.isStickingAtNode()
95+
96+
s = Model()
97+
s_x = s.addVar("x", vtype = 'C', obj = 1.0)
98+
s_y = s.addVar("y", vtype = 'C', obj = 2.0)
99+
s_cons = s.addCons(s_x + 2 * s_y <= 1.0)
100+
101+
m = Model()
102+
m_x = m.addVar("x", vtype = 'C', obj = 1.0)
103+
m_y = m.addVar("y", vtype = 'C', obj = 2.0)
104+
m_conss = m.addConss([m_x + 2 * m_y <= 1.0])
105+
106+
assert len(m_conss) == 1
107+
assert_conss_eq(s_cons, m_conss[0])
108+
109+
s.freeProb()
110+
m.freeProb()
111+
112+
113+
def test_multiple_cons_names():
114+
m = Model()
115+
x = m.addVar("x", vtype = 'C', obj = 1.0)
116+
y = m.addVar("y", vtype = 'C', obj = 2.0)
117+
118+
names = list("abcdef")
119+
conss = m.addConss([x + 2 * y <= 1 for i in range(len(names))], names)
120+
121+
assert len(conss) == len(names)
122+
assert all([c.name == n for c, n in zip(conss, names)])
123+
124+
m.freeProb()
125+
126+
m = Model()
127+
x = m.addVar("x", vtype = 'C', obj = 1.0)
128+
y = m.addVar("y", vtype = 'C', obj = 2.0)
129+
130+
name = "abcdef"
131+
conss = m.addConss([x + 2 * y <= 1 for i in range(5)], name)
132+
133+
assert len(conss) == 5
134+
assert all([c.name.startswith(name + "_") for c in conss])
135+
136+
137+
def test_multiple_cons_params():
138+
"""Test if setting the remaining parameters works as expected"""
139+
def assert_conss_neq(a, b):
140+
assert a.isInitial() != b.isInitial()
141+
assert a.isSeparated() != b.isSeparated()
142+
assert a.isEnforced() != b.isEnforced()
143+
assert a.isChecked() != b.isChecked()
144+
assert a.isPropagated() != b.isPropagated()
145+
assert a.isModifiable() != b.isModifiable()
146+
assert a.isDynamic() != b.isDynamic()
147+
assert a.isRemovable() != b.isRemovable()
148+
assert a.isStickingAtNode() != b.isStickingAtNode()
149+
150+
kwargs = dict(initial=True, separate=True,
151+
enforce=True, check=True, propagate=True, local=False,
152+
modifiable=False, dynamic=False, removable=False,
153+
stickingatnode=False)
154+
155+
m = Model()
156+
x = m.addVar("x", vtype = 'C', obj = 1.0)
157+
y = m.addVar("y", vtype = 'C', obj = 2.0)
158+
159+
conss = m.addConss([x + 2 * y <= 1], **kwargs)
160+
conss += m.addConss([x + 2 * y <= 1], **{k: not v for k, v in kwargs.items()})
161+
162+
assert_conss_neq(conss[0], conss[1])
163+
164+
82165
def test_model_ptr():
83166
model1 = Model()
84167
ptr1 = model1.to_ptr(give_ownership=True)

0 commit comments

Comments
 (0)