use std::fs;
#[test]
fn test_2d_grid_parsing() {
let mzn_code = fs::read_to_string("tests_all/models/test_2d_grid.mzn")
.expect("Failed to read test_2d_grid.mzn");
let ast = zelen::parse(&mzn_code)
.expect("Failed to parse 2D grid example");
let mut found_grid = false;
for item in &ast.items {
if let zelen::ast::Item::VarDecl(var_decl) = item {
if var_decl.name == "grid" {
found_grid = true;
match &var_decl.type_inst {
zelen::ast::TypeInst::Array { index_sets, .. } => {
assert_eq!(index_sets.len(), 2, "Grid should be 2-dimensional");
}
_ => panic!("Grid should be an array type"),
}
}
}
}
assert!(found_grid, "Grid variable declaration not found");
}
#[test]
fn test_2d_grid_translation() {
let mzn_code = fs::read_to_string("tests_all/models/test_2d_grid.mzn")
.expect("Failed to read test_2d_grid.mzn");
let ast = zelen::parse(&mzn_code)
.expect("Failed to parse 2D grid example");
let _model = zelen::translate(&ast)
.expect("Failed to translate 2D grid example");
}
#[test]
fn test_2d_array_indexing() {
let mzn_code = r#"
int: n = 3;
int: m = 4;
array[1..n, 1..m] of var 1..9: grid;
constraint grid[1,1] != grid[2,2];
solve satisfy;
"#;
let ast = zelen::parse(&mzn_code)
.expect("Failed to parse 2D array test");
let _model = zelen::translate(&ast)
.expect("Failed to translate 2D array indexing test");
}