#[test] fn test_construct_triangular_iteration_space() -> anyhow::Result<()> {
// for i in 0 .. n
// for j in 0 .. i
// for k in 0 .. j
let ctx = Context::new();
ctx.scope(|ctx| {
let space = Space::new_set(ctx, 1, 3);
let local_space = LocalSpace::from(space.clone());
let i_ge_0 = Constraint::new_inequality(local_space.clone())
.set_coefficient_si(DimType::Out, 0, 1)?
.set_constant_si(0)?;
let i_lt_n = Constraint::new_inequality(local_space.clone())
.set_coefficient_si(DimType::Param, 0, 1)?
.set_coefficient_si(DimType::Out, 0, -1)?
.set_constant_si(-1)?;
let j_ge_0 = Constraint::new_inequality(local_space.clone())
.set_coefficient_si(DimType::Out, 1, 1)?
.set_constant_si(0)?;
let j_lt_i = Constraint::new_inequality(local_space.clone())
.set_coefficient_si(DimType::Out, 0, 1)?
.set_coefficient_si(DimType::Out, 1, -1)?
.set_constant_si(-1)?;
let k_ge_0 = Constraint::new_inequality(local_space.clone())
.set_coefficient_si(DimType::Out, 2, 1)?
.set_constant_si(0)?;
let k_lt_j = Constraint::new_inequality(local_space.clone())
.set_coefficient_si(DimType::Out, 1, 1)?
.set_coefficient_si(DimType::Out, 2, -1)?
.set_constant_si(-1)?;
let set = Set::universe(space.clone())?
.add_constraint(i_ge_0)?
.add_constraint(i_lt_n)?
.add_constraint(j_ge_0)?
.add_constraint(j_lt_i)?
.add_constraint(k_ge_0)?
.add_constraint(k_lt_j)?
.set_dim_name(DimType::Param, 0, "n")?
.set_dim_name(DimType::Out, 0, "i")?
.set_dim_name(DimType::Out, 1, "j")?
.set_dim_name(DimType::Out, 2, "k")?;
println!("iteration space {:?}", set);
let card = set.cardinality()?;
println!("cardinality {:?}", card);
Ok(())
})
}