Skip to content

Commit 3fbe220

Browse files
committed
Fix range object construction in DZN parser
Fixes #18
1 parent 57e80e6 commit 3fbe220

3 files changed

Lines changed: 8 additions & 3 deletions

File tree

CHANGELOG.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ Fixed
1818
^^^^^
1919
- Close generated solver configuration before handing it to MiniZinc. This fixes the
2020
usage of generated solver configurations on Windows.
21+
- The DZN parser now constructs correct range objects. The parser was off by one due to
22+
the exclusive upper bound in Python range objects.
2123

2224
0.2.2_ - 2020-02-17
2325
-------------------

src/minizinc/dzn.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def set(s):
7171
if len(s) == 1:
7272
return set(s[0])
7373
else:
74-
return range(s[0], s[1])
74+
return range(s[0], s[1] + 1)
7575

7676
@staticmethod
7777
def string(s):

tests/test_dzn.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,11 @@ def test_dzn_set():
5151
assert parse_dzn("x = {1.2,2.1}") == {"x": {1.2, 2.1}}
5252

5353
# Set Ranges
54-
assert parse_dzn("x = 1..1") == {"x": range(1, 1)}
55-
assert parse_dzn("x = 1..3") == {"x": range(1, 3)}
54+
# note: upper range limit is exclusive in Python
55+
assert parse_dzn("x = 1..1") == {"x": range(1, 2)}
56+
assert set(parse_dzn("x = 1..1")["x"]) == {1}
57+
assert parse_dzn("x = 1..3") == {"x": range(1, 4)}
58+
assert set(parse_dzn("x = 1..3")["x"]) == {1, 2, 3}
5659

5760

5861
def test_dzn_array():

0 commit comments

Comments
 (0)