Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
e8cd4fd
Implement parsing of integer literals
maartenflippo Mar 9, 2026
d35b8b4
Parsing float literals
maartenflippo Mar 9, 2026
4167f15
Parse booleans
maartenflippo Mar 9, 2026
bea428d
Parse set literals
maartenflippo Mar 9, 2026
cd27615
Parse annotations
maartenflippo Mar 10, 2026
10a8d25
Start working on the parser entrypoint
maartenflippo Mar 10, 2026
2cedd32
Finalize simple doc test on fzn::parse
maartenflippo Mar 10, 2026
e9232d8
Basic int variable
maartenflippo Mar 10, 2026
c6805a2
Parse bounded int domains
maartenflippo Mar 10, 2026
da14ebf
Parse named variable domains
maartenflippo Mar 10, 2026
696d9ca
Parse float domains
maartenflippo Mar 10, 2026
fd06696
Parse int set
maartenflippo Mar 10, 2026
a9f1b67
Parse assigned variables
maartenflippo Mar 10, 2026
ff2d4fa
Parse annotations in variable decls
maartenflippo Mar 10, 2026
0c5b74e
Complete parsing of variables
maartenflippo Mar 10, 2026
bd5e41b
Parse basic constraint items
maartenflippo Mar 10, 2026
5f38efb
Parse array constraint arguments
maartenflippo Mar 10, 2026
fe58471
Get the basic example to fully parse
maartenflippo Mar 10, 2026
1946e12
Hide imports in example
maartenflippo Mar 10, 2026
0ebd841
Split out primitive parsers into separate file
maartenflippo Mar 10, 2026
835612b
Split out annotation parsers into a separate file
maartenflippo Mar 10, 2026
cf215b2
Fix warnings
maartenflippo Mar 10, 2026
4fcbd3c
Setup tests to include all fzn files from libminizinc spec
maartenflippo Mar 10, 2026
feffc26
Add first expectation files
maartenflippo Mar 11, 2026
2475b2c
Don't parse expectation files
maartenflippo Mar 11, 2026
c2b53b4
Implement parsing of predicate statements
maartenflippo Mar 11, 2026
c78c73a
Implement parsing of variable arrays
maartenflippo Mar 11, 2026
047eb9f
Parse arrays and determine variable is introduced
maartenflippo Mar 11, 2026
6721524
Update more expected files for fzn parsing
maartenflippo Mar 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions crates/flatzinc-serde/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ edition = "2021"
[dependencies]
serde = { version = "1.0", features = ["derive"] }
rangelist = { path = "../rangelist", version = "0.4.0" }
winnow = { version = "0.7.15" }

[dev-dependencies]
serde_json = "1.0"
Expand Down
6 changes: 6 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/aggregation.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
array [1..2] of int: X_INTRODUCED_3_ = [1,1];
var 1..4: X_INTRODUCED_0_;
var 1..4: X_INTRODUCED_1_;
array [1..2] of var int: xs:: output_array([1..2]) = [X_INTRODUCED_0_,X_INTRODUCED_1_];
constraint int_lin_le(X_INTRODUCED_3_,[X_INTRODUCED_0_,X_INTRODUCED_1_],5);
solve satisfy;
4 changes: 4 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/annotate_from_array.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
var 1..2: X_INTRODUCED_1_ ::var_is_introduced :: one;
var 1..2: X_INTRODUCED_2_ ::var_is_introduced :: two;
array [1..2] of var int: X_INTRODUCED_0_:: output_array([1..2]) = [X_INTRODUCED_1_,X_INTRODUCED_2_];
solve satisfy;
10 changes: 10 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/bug_629.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
array [1..2] of int: X_INTRODUCED_3_ = [1,1];
array [1..2] of int: X_INTRODUCED_7_ = [-1,1];
array [1..2] of int: X_INTRODUCED_9_ = [-1,-1];
var 0..1: X_INTRODUCED_4_ ::var_is_introduced ;
var 0..1: X_INTRODUCED_5_ ::var_is_introduced ;
var 0..1: X_INTRODUCED_6_ ::var_is_introduced :: output_var;
constraint int_lin_le(X_INTRODUCED_7_,[X_INTRODUCED_4_,X_INTRODUCED_6_],0);
constraint int_lin_le(X_INTRODUCED_9_,[X_INTRODUCED_6_,X_INTRODUCED_5_],-1);
constraint int_lin_eq(X_INTRODUCED_3_,[X_INTRODUCED_4_,X_INTRODUCED_5_],1);
solve satisfy;
2 changes: 2 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/call_root_ctx.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
var 1..2: y ::output_var;
solve satisfy;
2 changes: 2 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/call_root_ctx.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
var 1..2: y:: output_var;
solve satisfy;
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
var bool: a ::output_var;
var bool: b ::output_var;
var bool: c ::output_var;
var bool: r ::output_var;
constraint bool_clause([a], [b, r]);
constraint bool_clause([a], [c, r]);
solve satisfy;
7 changes: 7 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/chain_compr_mult_clause.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
var bool: a:: output_var;
var bool: b:: output_var;
var bool: c:: output_var;
var bool: r:: output_var;
constraint bool_clause([a],[b,r]);
constraint bool_clause([a],[c,r]);
solve satisfy;
12 changes: 12 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/clause_disable_hr.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
predicate int_le_imp(var int: a,var int: b,var bool: r);
predicate bool_clause_reif(array [int] of var bool: as,array [int] of var bool: bs,var bool: b);
var -10..10: x:: output_var;
var bool: c:: output_var;
var bool: d:: output_var;
var bool: X_INTRODUCED_1_ ::var_is_introduced :: is_defined_var;
var bool: X_INTRODUCED_2_ ::var_is_introduced :: is_defined_var;
constraint bool_clause([X_INTRODUCED_2_],[c]);
constraint int_le_imp(0,x,c);
constraint int_le_imp(x,0,X_INTRODUCED_1_):: defines_var(X_INTRODUCED_1_);
constraint bool_clause_reif([X_INTRODUCED_1_],[d],X_INTRODUCED_2_):: defines_var(X_INTRODUCED_2_);
solve satisfy;
9 changes: 9 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/commutative_cse.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
var 1..5: X_INTRODUCED_0_ ::is_defined_var ::var_is_introduced ::var_is_introduced ::is_defined_var;
var 1..5: X_INTRODUCED_2_ ::is_defined_var ::var_is_introduced ::var_is_introduced ::is_defined_var;
var 1..5: x ::output_var;
var 1..5: y ::output_var;
var 1..5: z ::output_var;
array[1..3] of var int: X_INTRODUCED_1_ ::var_is_introduced ::var_is_introduced = [x, y, z];
constraint int_max(x, y, X_INTRODUCED_0_) ::defines_var(X_INTRODUCED_0_);
constraint array_int_minimum(X_INTRODUCED_2_, X_INTRODUCED_1_) ::defines_var(X_INTRODUCED_2_);
solve satisfy;
10 changes: 10 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/commutative_cse.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
predicate array_int_minimum(var int: m,array [int] of var int: x);
var 1..5: x:: output_var;
var 1..5: y:: output_var;
var 1..5: z:: output_var;
var 1..5: X_INTRODUCED_0_ ::var_is_introduced :: is_defined_var;
var 1..5: X_INTRODUCED_2_ ::var_is_introduced :: is_defined_var;
array [1..3] of var int: X_INTRODUCED_1_ ::var_is_introduced = [x,y,z];
constraint int_max(x,y,X_INTRODUCED_0_):: defines_var(X_INTRODUCED_0_);
constraint array_int_minimum(X_INTRODUCED_2_,X_INTRODUCED_1_):: defines_var(X_INTRODUCED_2_);
solve satisfy;
14 changes: 14 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/comp_domain_ann.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
array [1..5] of int: X_INTRODUCED_13_ = [1,1,1,1,-1];
var 1..4: X_INTRODUCED_0_;
var 1..4: X_INTRODUCED_1_;
var 1..4: X_INTRODUCED_2_;
var 1..4: X_INTRODUCED_3_;
var 1..16: X_INTRODUCED_10_ ::var_is_introduced :: computed_domain:: is_defined_var;
var 1..64: X_INTRODUCED_11_ ::var_is_introduced :: computed_domain:: is_defined_var;
var 4..16: X_INTRODUCED_12_ ::var_is_introduced :: is_defined_var;
array [1..4] of var int: x:: output_array([1..4]) = [X_INTRODUCED_0_,X_INTRODUCED_1_,X_INTRODUCED_2_,X_INTRODUCED_3_];
constraint int_lin_eq(X_INTRODUCED_13_,[X_INTRODUCED_0_,X_INTRODUCED_1_,X_INTRODUCED_2_,X_INTRODUCED_3_,X_INTRODUCED_12_],0):: defines_var(X_INTRODUCED_12_);
constraint int_times(X_INTRODUCED_0_,X_INTRODUCED_1_,X_INTRODUCED_10_):: defines_var(X_INTRODUCED_10_);
constraint int_times(X_INTRODUCED_10_,X_INTRODUCED_2_,X_INTRODUCED_11_):: defines_var(X_INTRODUCED_11_);
constraint int_times(X_INTRODUCED_11_,X_INTRODUCED_3_,X_INTRODUCED_12_);
solve satisfy;
12 changes: 12 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/count_rewrite.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
predicate fzn_count_eq(array [int] of var int: x,var int: y,var int: c);
array [1..2] of int: X_INTRODUCED_4_ = [-1,1];
var 1..10: X_INTRODUCED_0_;
var 1..10: X_INTRODUCED_1_;
var 1..10: X_INTRODUCED_2_;
var 1..10: y:: output_var;
var 1..3: c:: output_var;
var 0..3: X_INTRODUCED_3_ ::var_is_introduced :: is_defined_var;
array [1..3] of var int: x:: output_array([1..3]) = [X_INTRODUCED_0_,X_INTRODUCED_1_,X_INTRODUCED_2_];
constraint fzn_count_eq(x,y,X_INTRODUCED_3_):: defines_var(X_INTRODUCED_3_);
constraint int_lin_le(X_INTRODUCED_4_,[X_INTRODUCED_3_,c],0);
solve satisfy;
5 changes: 5 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/cse_array_lit.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
array [1..2] of int: X_INTRODUCED_0_ = [1,-1];
var 1..10: x:: output_var;
var 1..10: y:: output_var;
constraint int_lin_le(X_INTRODUCED_0_,[x,y],-1);
solve satisfy;
10 changes: 10 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/defines_var_cycle_breaking.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
array [1..3] of int: X_INTRODUCED_2_ = [1,-1,-1];
var int: w;
var int: x:: is_defined_var;
var int: y;
var int: z;
constraint int_lin_eq(X_INTRODUCED_2_,[w,x,y],0);
constraint int_lin_eq(X_INTRODUCED_2_,[x,y,z],0):: defines_var(x);
constraint int_lin_eq(X_INTRODUCED_2_,[y,z,w],0);
constraint int_lin_eq(X_INTRODUCED_2_,[z,w,x],0);
solve satisfy;
12 changes: 12 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/float_inf_range_dom.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
var float: x:: output_var;
var bool: X_INTRODUCED_2_ ::var_is_introduced :: is_defined_var;
var bool: X_INTRODUCED_3_ ::var_is_introduced :: is_defined_var;
var bool: X_INTRODUCED_4_ ::var_is_introduced :: is_defined_var;
var bool: X_INTRODUCED_6_ ::var_is_introduced :: is_defined_var;
constraint float_le(1.0,x);
constraint bool_clause([X_INTRODUCED_4_,X_INTRODUCED_6_],[]);
constraint float_le_reif(1.0,x,X_INTRODUCED_2_):: defines_var(X_INTRODUCED_2_);
constraint float_le_reif(x,2.0,X_INTRODUCED_3_):: defines_var(X_INTRODUCED_3_);
constraint array_bool_and([X_INTRODUCED_2_,X_INTRODUCED_3_],X_INTRODUCED_4_):: defines_var(X_INTRODUCED_4_);
constraint float_le_reif(3.0,x,X_INTRODUCED_6_):: defines_var(X_INTRODUCED_6_);
solve satisfy;
3 changes: 3 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/github_768a.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
var 1..2: X_INTRODUCED_1_;
array [1..1] of var int: X_INTRODUCED_0_:: output_array([1..1]) = [X_INTRODUCED_1_];
solve :: seq_search([int_search([X_INTRODUCED_1_],input_order,indomain_min,complete),warm_start([X_INTRODUCED_1_],[1])]) satisfy;
5 changes: 5 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/github_768b.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
var 1..3: x:: output_var;
var bool: X_INTRODUCED_0_ ::var_is_introduced :: is_defined_var;
array [1..1] of var bool: X_INTRODUCED_1_ ::var_is_introduced = [X_INTRODUCED_0_];
constraint int_eq_reif(x,1,X_INTRODUCED_0_):: defines_var(X_INTRODUCED_0_);
solve :: bool_search(X_INTRODUCED_1_,input_order,indomain_max,complete) minimize x;
3 changes: 3 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/github_773.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
int: X_INTRODUCED_2_ = 2;
array [1..1] of var int: X_INTRODUCED_1_ ::var_is_introduced = [2];
solve :: int_search(X_INTRODUCED_1_,input_order,indomain_min,complete) minimize X_INTRODUCED_2_;
7 changes: 7 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/implied_exists_chain.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
var bool: a:: output_var;
var bool: b:: output_var;
var bool: c:: output_var;
var bool: r:: output_var;
constraint bool_clause([a,c],[r]);
constraint bool_clause([b,c],[r]);
solve satisfy;
9 changes: 9 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/implied_hr.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
predicate int_le_imp(var int: a,var int: b,var bool: r);
var int: x:: output_var;
var int: y:: output_var;
var bool: X_INTRODUCED_0_ ::var_is_introduced :: is_defined_var;
var bool: X_INTRODUCED_1_ ::var_is_introduced :: is_defined_var;
constraint bool_clause([X_INTRODUCED_0_,X_INTRODUCED_1_],[]);
constraint int_le_imp(5,x,X_INTRODUCED_0_):: defines_var(X_INTRODUCED_0_);
constraint int_le_imp(5,y,X_INTRODUCED_1_):: defines_var(X_INTRODUCED_1_);
solve satisfy;
3 changes: 3 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/int_inf_dom.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
var int: x:: output_var;
constraint int_le(0,x);
solve satisfy;
15 changes: 15 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/most_specific_reif.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
predicate my_pred_reif(var int: x,int: y,var bool: r);
predicate my_pred_imp(var int: x,var int: y,var bool: r);
predicate my_pred_reif(var int: x,var int: y,var bool: r);
var 1..10: x:: output_var;
var bool: b:: is_defined_var:: output_var;
var bool: X_INTRODUCED_0_ ::var_is_introduced :: is_defined_var;
var bool: X_INTRODUCED_1_ ::var_is_introduced :: is_defined_var;
var bool: X_INTRODUCED_2_ ::var_is_introduced :: is_defined_var;
constraint bool_clause([b,X_INTRODUCED_0_],[]);
constraint bool_clause([b,X_INTRODUCED_1_],[]);
constraint bool_not(X_INTRODUCED_2_,b):: defines_var(b);
constraint my_pred_reif(x,1,X_INTRODUCED_0_):: defines_var(X_INTRODUCED_0_);
constraint my_pred_imp(1,x,X_INTRODUCED_1_):: defines_var(X_INTRODUCED_1_);
constraint my_pred_reif(2,x,X_INTRODUCED_2_):: defines_var(X_INTRODUCED_2_);
solve satisfy;
30 changes: 30 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/optimization_0.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
var bool: X_INTRODUCED_0_ ::is_defined_var ::var_is_introduced ::var_is_introduced ::is_defined_var;
var bool: X_INTRODUCED_10_ ::is_defined_var ::var_is_introduced ::var_is_introduced ::is_defined_var;
var bool: X_INTRODUCED_11_ ::is_defined_var ::var_is_introduced ::var_is_introduced ::is_defined_var;
var bool: X_INTRODUCED_1_ ::is_defined_var ::var_is_introduced ::var_is_introduced ::is_defined_var;
var bool: X_INTRODUCED_2_ ::is_defined_var ::var_is_introduced ::var_is_introduced ::is_defined_var;
var bool: X_INTRODUCED_3_ ::is_defined_var ::var_is_introduced ::var_is_introduced ::is_defined_var;
var bool: X_INTRODUCED_4_ ::is_defined_var ::var_is_introduced ::var_is_introduced ::is_defined_var;
var bool: X_INTRODUCED_5_ ::is_defined_var ::var_is_introduced ::var_is_introduced ::is_defined_var;
var bool: X_INTRODUCED_6_ ::is_defined_var ::var_is_introduced ::var_is_introduced ::is_defined_var;
var bool: X_INTRODUCED_7_ ::is_defined_var ::var_is_introduced ::var_is_introduced ::is_defined_var;
var bool: X_INTRODUCED_8_ ::is_defined_var ::var_is_introduced ::var_is_introduced ::is_defined_var;
var bool: X_INTRODUCED_9_ ::is_defined_var ::var_is_introduced ::var_is_introduced ::is_defined_var;
var 1..10: x ::output_var;
var 1..10: y ::output_var;
constraint array_bool_and([true, X_INTRODUCED_1_, true, X_INTRODUCED_3_, true, X_INTRODUCED_5_, true, X_INTRODUCED_7_, true, X_INTRODUCED_9_], true);
constraint set_in_reif(x, y, X_INTRODUCED_10_);
constraint bool_clause([X_INTRODUCED_11_], [true]);
constraint bool_not(X_INTRODUCED_0_, X_INTRODUCED_1_) ::defines_var(X_INTRODUCED_1_);
constraint bool_not(X_INTRODUCED_2_, X_INTRODUCED_3_) ::defines_var(X_INTRODUCED_3_);
constraint bool_not(X_INTRODUCED_4_, X_INTRODUCED_5_) ::defines_var(X_INTRODUCED_5_);
constraint bool_not(X_INTRODUCED_6_, X_INTRODUCED_7_) ::defines_var(X_INTRODUCED_7_);
constraint bool_not(X_INTRODUCED_8_, X_INTRODUCED_9_) ::defines_var(X_INTRODUCED_9_);
constraint set_in_reif(2, y, X_INTRODUCED_0_) ::defines_var(X_INTRODUCED_0_);
constraint set_in_reif(4, y, X_INTRODUCED_2_) ::defines_var(X_INTRODUCED_2_);
constraint set_in_reif(6, y, X_INTRODUCED_4_) ::defines_var(X_INTRODUCED_4_);
constraint set_in_reif(8, y, X_INTRODUCED_6_) ::defines_var(X_INTRODUCED_6_);
constraint set_in_reif(10, y, X_INTRODUCED_8_) ::defines_var(X_INTRODUCED_8_);
constraint int_le_reif(5, x, X_INTRODUCED_10_) ::defines_var(X_INTRODUCED_10_);
constraint int_le_imp(x, 2, X_INTRODUCED_11_) ::defines_var(X_INTRODUCED_11_);
solve satisfy;
31 changes: 31 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/optimization_0.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
predicate int_le_imp(var int: a,var int: b,var bool: r);
var 1..10: x:: output_var;
var set of 1..10: y:: output_var;
var bool: X_INTRODUCED_0_ ::var_is_introduced :: is_defined_var;
var bool: X_INTRODUCED_1_ ::var_is_introduced :: is_defined_var;
var bool: X_INTRODUCED_2_ ::var_is_introduced :: is_defined_var;
var bool: X_INTRODUCED_3_ ::var_is_introduced :: is_defined_var;
var bool: X_INTRODUCED_4_ ::var_is_introduced :: is_defined_var;
var bool: X_INTRODUCED_5_ ::var_is_introduced :: is_defined_var;
var bool: X_INTRODUCED_6_ ::var_is_introduced :: is_defined_var;
var bool: X_INTRODUCED_7_ ::var_is_introduced :: is_defined_var;
var bool: X_INTRODUCED_8_ ::var_is_introduced :: is_defined_var;
var bool: X_INTRODUCED_9_ ::var_is_introduced :: is_defined_var;
var bool: X_INTRODUCED_10_ ::var_is_introduced :: is_defined_var;
var bool: X_INTRODUCED_11_ ::var_is_introduced :: is_defined_var;
constraint array_bool_and([true,X_INTRODUCED_1_,true,X_INTRODUCED_3_,true,X_INTRODUCED_5_,true,X_INTRODUCED_7_,true,X_INTRODUCED_9_],true);
constraint set_in_reif(x,y,X_INTRODUCED_10_);
constraint bool_clause([X_INTRODUCED_11_],[true]);
constraint bool_not(X_INTRODUCED_0_,X_INTRODUCED_1_):: defines_var(X_INTRODUCED_1_);
constraint bool_not(X_INTRODUCED_2_,X_INTRODUCED_3_):: defines_var(X_INTRODUCED_3_);
constraint bool_not(X_INTRODUCED_4_,X_INTRODUCED_5_):: defines_var(X_INTRODUCED_5_);
constraint bool_not(X_INTRODUCED_6_,X_INTRODUCED_7_):: defines_var(X_INTRODUCED_7_);
constraint bool_not(X_INTRODUCED_8_,X_INTRODUCED_9_):: defines_var(X_INTRODUCED_9_);
constraint set_in_reif(2,y,X_INTRODUCED_0_):: defines_var(X_INTRODUCED_0_);
constraint set_in_reif(4,y,X_INTRODUCED_2_):: defines_var(X_INTRODUCED_2_);
constraint set_in_reif(6,y,X_INTRODUCED_4_):: defines_var(X_INTRODUCED_4_);
constraint set_in_reif(8,y,X_INTRODUCED_6_):: defines_var(X_INTRODUCED_6_);
constraint set_in_reif(10,y,X_INTRODUCED_8_):: defines_var(X_INTRODUCED_8_);
constraint int_le_reif(5,x,X_INTRODUCED_10_):: defines_var(X_INTRODUCED_10_);
constraint int_le_imp(x,2,X_INTRODUCED_11_):: defines_var(X_INTRODUCED_11_);
solve satisfy;
11 changes: 11 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/optimization_1.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
var bool: X_INTRODUCED_10_ ::is_defined_var ::var_is_introduced ::var_is_introduced ::is_defined_var;
var 1..2: x ::output_var;
var 1..10: y ::output_var;
constraint set_in_reif(x, y, X_INTRODUCED_10_);
constraint set_in_reif(2, y, false);
constraint set_in_reif(4, y, false);
constraint set_in_reif(6, y, false);
constraint set_in_reif(8, y, false);
constraint set_in_reif(10, y, false);
constraint int_le_reif(5, x, X_INTRODUCED_10_) ::defines_var(X_INTRODUCED_10_);
solve satisfy;
11 changes: 11 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/optimization_1.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
var 1..2: x:: output_var;
var set of 1..10: y:: output_var;
var bool: X_INTRODUCED_10_ ::var_is_introduced :: is_defined_var;
constraint set_in_reif(x,y,X_INTRODUCED_10_);
constraint set_in_reif(2,y,false);
constraint set_in_reif(4,y,false);
constraint set_in_reif(6,y,false);
constraint set_in_reif(8,y,false);
constraint set_in_reif(10,y,false);
constraint int_le_reif(5,x,X_INTRODUCED_10_):: defines_var(X_INTRODUCED_10_);
solve satisfy;
10 changes: 10 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/optimization_2.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
var 1..2: x:: output_var;
var set of 1..10: y:: output_var;
constraint set_in_reif(2,y,false);
constraint bool_not(false,true);
constraint set_in_reif(4,y,false);
constraint set_in_reif(6,y,false);
constraint set_in_reif(8,y,false);
constraint set_in_reif(10,y,false);
constraint set_in_reif(x,y,false);
solve satisfy;
10 changes: 10 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/optimization_3.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
var 1..2: x ::output_var;
var 1..10: y ::output_var;
constraint set_in_reif(2, y, false);
constraint bool_not(false, true);
constraint set_in_reif(4, y, false);
constraint set_in_reif(6, y, false);
constraint set_in_reif(8, y, false);
constraint set_in_reif(10, y, false);
constraint set_in_reif(x, y, false);
solve satisfy;
10 changes: 10 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/optimization_3.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
var 1..2: x:: output_var;
var set of 1..10: y:: output_var;
constraint set_in_reif(2,y,false);
constraint bool_not(false,true);
constraint set_in_reif(4,y,false);
constraint set_in_reif(6,y,false);
constraint set_in_reif(8,y,false);
constraint set_in_reif(10,y,false);
constraint set_in_reif(x,y,false);
solve satisfy;
3 changes: 3 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/quoted_id_flatzinc.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
var bool: x:: output_var;
var bool: X_INTRODUCED_0_:: output_var;
solve satisfy;
17 changes: 17 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/struct_lex.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
var 1..2: X_INTRODUCED_16_ ::output_var;
var 1..3: X_INTRODUCED_17_ ::output_var;
var bool: X_INTRODUCED_19_ ::output_var;
var 1..2: X_INTRODUCED_20_ ::output_var;
var 1..2: X_INTRODUCED_21_ ::output_var;
var 1..3: X_INTRODUCED_22_ ::output_var;
var bool: X_INTRODUCED_24_ ::output_var;
var 1..2: X_INTRODUCED_25_ ::output_var;
var 0..1: X_INTRODUCED_26_ ::is_defined_var ::var_is_introduced ::var_is_introduced ::is_defined_var;
var 0..1: X_INTRODUCED_27_ ::is_defined_var ::var_is_introduced ::var_is_introduced ::is_defined_var;
array[1..4] of var int: X_INTRODUCED_28_ ::var_is_introduced ::var_is_introduced ::promise_ctx_antitone = [X_INTRODUCED_16_, X_INTRODUCED_17_, X_INTRODUCED_27_, X_INTRODUCED_20_];
array[1..4] of var int: X_INTRODUCED_29_ ::var_is_introduced ::var_is_introduced ::promise_ctx_monotone = [X_INTRODUCED_21_, X_INTRODUCED_22_, X_INTRODUCED_26_, X_INTRODUCED_25_];
constraint array_int_lt(X_INTRODUCED_28_, X_INTRODUCED_29_);
constraint array_int_lq(X_INTRODUCED_28_, X_INTRODUCED_29_);
constraint bool2int(X_INTRODUCED_24_, X_INTRODUCED_26_) ::defines_var(X_INTRODUCED_26_);
constraint bool2int(X_INTRODUCED_19_, X_INTRODUCED_27_) ::defines_var(X_INTRODUCED_27_);
solve satisfy;
19 changes: 19 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/struct_lex.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
predicate array_int_lt(array [int] of var int: x,array [int] of var int: y);
predicate array_int_lq(array [int] of var int: x,array [int] of var int: y);
var 1..2: X_INTRODUCED_16_:: output_var;
var 1..3: X_INTRODUCED_17_:: output_var;
var bool: X_INTRODUCED_19_:: output_var;
var 1..2: X_INTRODUCED_20_:: output_var;
var 1..2: X_INTRODUCED_21_:: output_var;
var 1..3: X_INTRODUCED_22_:: output_var;
var bool: X_INTRODUCED_24_:: output_var;
var 1..2: X_INTRODUCED_25_:: output_var;
var 0..1: X_INTRODUCED_26_ ::var_is_introduced :: is_defined_var;
var 0..1: X_INTRODUCED_27_ ::var_is_introduced :: is_defined_var;
array [1..4] of var int: X_INTRODUCED_28_ ::var_is_introduced :: promise_ctx_antitone = [X_INTRODUCED_16_,X_INTRODUCED_17_,X_INTRODUCED_27_,X_INTRODUCED_20_];
array [1..4] of var int: X_INTRODUCED_29_ ::var_is_introduced :: promise_ctx_monotone = [X_INTRODUCED_21_,X_INTRODUCED_22_,X_INTRODUCED_26_,X_INTRODUCED_25_];
constraint array_int_lt(X_INTRODUCED_28_,X_INTRODUCED_29_);
constraint array_int_lq(X_INTRODUCED_28_,X_INTRODUCED_29_);
constraint bool2int(X_INTRODUCED_24_,X_INTRODUCED_26_):: defines_var(X_INTRODUCED_26_);
constraint bool2int(X_INTRODUCED_19_,X_INTRODUCED_27_):: defines_var(X_INTRODUCED_27_);
solve satisfy;
11 changes: 11 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/struct_table.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
predicate gecode_table_int(array [int] of var int: x,array [int] of int: t);
array [1..12] of int: X_INTRODUCED_24_ = [1,1,1,3,2,2,0,6,3,3,0,9];
var int: X_INTRODUCED_16_:: output_var;
var 1..3: X_INTRODUCED_17_:: output_var;
var bool: X_INTRODUCED_19_:: output_var;
var int: X_INTRODUCED_20_:: output_var;
var 0..1: X_INTRODUCED_22_ ::var_is_introduced :: is_defined_var;
array [1..4] of var int: X_INTRODUCED_23_ ::var_is_introduced = [X_INTRODUCED_16_,X_INTRODUCED_17_,X_INTRODUCED_22_,X_INTRODUCED_20_];
constraint gecode_table_int(X_INTRODUCED_23_,X_INTRODUCED_24_);
constraint bool2int(X_INTRODUCED_19_,X_INTRODUCED_22_):: defines_var(X_INTRODUCED_22_);
solve satisfy;
10 changes: 10 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/struct_table_filter.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
predicate gecode_table_int(array [int] of var int: x,array [int] of int: t);
array [1..6] of int: X_INTRODUCED_26_ = [2,1,1,1,0,2];
var 1..2: X_INTRODUCED_16_ ::var_is_introduced :: output_var;
var bool: X_INTRODUCED_17_ ::var_is_introduced :: output_var;
var 1..2: X_INTRODUCED_18_ ::var_is_introduced :: output_var;
var 0..1: X_INTRODUCED_24_ ::var_is_introduced :: is_defined_var;
array [1..3] of var int: X_INTRODUCED_25_ ::var_is_introduced = [X_INTRODUCED_16_,X_INTRODUCED_24_,X_INTRODUCED_18_];
constraint gecode_table_int(X_INTRODUCED_25_,X_INTRODUCED_26_);
constraint bool2int(X_INTRODUCED_17_,X_INTRODUCED_24_):: defines_var(X_INTRODUCED_24_);
solve satisfy;
8 changes: 8 additions & 0 deletions crates/flatzinc-serde/corpus/fzn/test_bug_456.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
predicate int_eq_imp(var int: a,var int: b,var bool: r);
var bool: X_INTRODUCED_0_ ::var_is_introduced :: output_var;
var int: X_INTRODUCED_1_ ::var_is_introduced :: output_var;
var bool: X_INTRODUCED_2_ ::var_is_introduced :: is_defined_var;
constraint bool_clause([X_INTRODUCED_0_,X_INTRODUCED_2_],[]);
constraint int_le(0,X_INTRODUCED_1_);
constraint int_eq_imp(X_INTRODUCED_1_,0,X_INTRODUCED_2_):: defines_var(X_INTRODUCED_2_);
solve satisfy;
1 change: 1 addition & 0 deletions crates/flatzinc-serde/corpus/fzn/test_bug_483.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
solve satisfy;
1 change: 1 addition & 0 deletions crates/flatzinc-serde/corpus/fzn/test_bug_483.fzn
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
solve satisfy;
Loading
Loading