fclose(input);
}
+void test_bounded(struct isl_ctx *ctx)
+{
+ isl_set *set;
+ int bounded;
+
+ set = isl_set_read_from_str(ctx, "[n] -> {[i] : 0 <= i <= n }", -1);
+ bounded = isl_set_is_bounded(set);
+ assert(bounded);
+ isl_set_free(set);
+
+ set = isl_set_read_from_str(ctx, "{[n, i] : 0 <= i <= n }", -1);
+ bounded = isl_set_is_bounded(set);
+ assert(!bounded);
+ isl_set_free(set);
+
+ set = isl_set_read_from_str(ctx, "[n] -> {[i] : i <= n }", -1);
+ bounded = isl_set_is_bounded(set);
+ assert(!bounded);
+ isl_set_free(set);
+}
+
/* Construct the basic set { [i] : 5 <= i <= N } */
void test_construction(struct isl_ctx *ctx)
{
dim = isl_dim_set_alloc(ctx, 1, 1);
bset = isl_basic_set_universe(dim);
- c = isl_inequality_alloc(isl_dim_copy(bset->dim));
+ c = isl_inequality_alloc(isl_basic_set_get_dim(bset));
isl_int_set_si(v, -1);
isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
isl_int_set_si(v, 1);
isl_constraint_set_coefficient(c, isl_dim_param, 0, v);
bset = isl_basic_set_add_constraint(bset, c);
- c = isl_inequality_alloc(isl_dim_copy(bset->dim));
+ c = isl_inequality_alloc(isl_basic_set_get_dim(bset));
isl_int_set_si(v, 1);
isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
isl_int_set_si(v, -5);
dim = isl_dim_set_alloc(ctx, 0, 1);
bset = isl_basic_set_universe(dim);
- c = isl_equality_alloc(isl_dim_copy(bset->dim));
+ c = isl_equality_alloc(isl_basic_set_get_dim(bset));
isl_int_set_si(v, -1);
isl_constraint_set_constant(c, v);
isl_int_set_si(v, 1);
isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
- div = isl_div_alloc(isl_dim_copy(bset->dim));
+ div = isl_div_alloc(isl_basic_set_get_dim(bset));
c = isl_constraint_add_div(c, div, &pos);
isl_int_set_si(v, 3);
isl_constraint_set_coefficient(c, isl_dim_div, pos, v);
bset = isl_basic_set_add_constraint(bset, c);
- c = isl_equality_alloc(isl_dim_copy(bset->dim));
+ c = isl_equality_alloc(isl_basic_set_get_dim(bset));
isl_int_set_si(v, 1);
isl_constraint_set_constant(c, v);
isl_int_set_si(v, -1);
isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
- div = isl_div_alloc(isl_dim_copy(bset->dim));
+ div = isl_div_alloc(isl_basic_set_get_dim(bset));
c = isl_constraint_add_div(c, div, &pos);
isl_int_set_si(v, 3);
isl_constraint_set_coefficient(c, isl_dim_div, pos, v);
bset = isl_basic_set_add_constraint(bset, c);
- assert(bset->n_div == 1);
+ assert(bset && bset->n_div == 1);
isl_basic_set_free(bset);
/* test 2 */
dim = isl_dim_set_alloc(ctx, 0, 1);
bset = isl_basic_set_universe(dim);
- c = isl_equality_alloc(isl_dim_copy(bset->dim));
+ c = isl_equality_alloc(isl_basic_set_get_dim(bset));
isl_int_set_si(v, 1);
isl_constraint_set_constant(c, v);
isl_int_set_si(v, -1);
isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
- div = isl_div_alloc(isl_dim_copy(bset->dim));
+ div = isl_div_alloc(isl_basic_set_get_dim(bset));
c = isl_constraint_add_div(c, div, &pos);
isl_int_set_si(v, 3);
isl_constraint_set_coefficient(c, isl_dim_div, pos, v);
bset = isl_basic_set_add_constraint(bset, c);
- c = isl_equality_alloc(isl_dim_copy(bset->dim));
+ c = isl_equality_alloc(isl_basic_set_get_dim(bset));
isl_int_set_si(v, -1);
isl_constraint_set_constant(c, v);
isl_int_set_si(v, 1);
isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
- div = isl_div_alloc(isl_dim_copy(bset->dim));
+ div = isl_div_alloc(isl_basic_set_get_dim(bset));
c = isl_constraint_add_div(c, div, &pos);
isl_int_set_si(v, 3);
isl_constraint_set_coefficient(c, isl_dim_div, pos, v);
bset = isl_basic_set_add_constraint(bset, c);
- assert(bset->n_div == 1);
+ assert(bset && bset->n_div == 1);
isl_basic_set_free(bset);
/* test 3 */
dim = isl_dim_set_alloc(ctx, 0, 1);
bset = isl_basic_set_universe(dim);
- c = isl_equality_alloc(isl_dim_copy(bset->dim));
+ c = isl_equality_alloc(isl_basic_set_get_dim(bset));
isl_int_set_si(v, 1);
isl_constraint_set_constant(c, v);
isl_int_set_si(v, -1);
isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
- div = isl_div_alloc(isl_dim_copy(bset->dim));
+ div = isl_div_alloc(isl_basic_set_get_dim(bset));
c = isl_constraint_add_div(c, div, &pos);
isl_int_set_si(v, 3);
isl_constraint_set_coefficient(c, isl_dim_div, pos, v);
bset = isl_basic_set_add_constraint(bset, c);
- c = isl_equality_alloc(isl_dim_copy(bset->dim));
+ c = isl_equality_alloc(isl_basic_set_get_dim(bset));
isl_int_set_si(v, -3);
isl_constraint_set_constant(c, v);
isl_int_set_si(v, 1);
isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
- div = isl_div_alloc(isl_dim_copy(bset->dim));
+ div = isl_div_alloc(isl_basic_set_get_dim(bset));
c = isl_constraint_add_div(c, div, &pos);
isl_int_set_si(v, 4);
isl_constraint_set_coefficient(c, isl_dim_div, pos, v);
bset = isl_basic_set_add_constraint(bset, c);
- assert(bset->n_div == 1);
+ assert(bset && bset->n_div == 1);
isl_basic_set_free(bset);
/* test 4 */
dim = isl_dim_set_alloc(ctx, 0, 1);
bset = isl_basic_set_universe(dim);
- c = isl_equality_alloc(isl_dim_copy(bset->dim));
+ c = isl_equality_alloc(isl_basic_set_get_dim(bset));
isl_int_set_si(v, 2);
isl_constraint_set_constant(c, v);
isl_int_set_si(v, -1);
isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
- div = isl_div_alloc(isl_dim_copy(bset->dim));
+ div = isl_div_alloc(isl_basic_set_get_dim(bset));
c = isl_constraint_add_div(c, div, &pos);
isl_int_set_si(v, 3);
isl_constraint_set_coefficient(c, isl_dim_div, pos, v);
bset = isl_basic_set_add_constraint(bset, c);
- c = isl_equality_alloc(isl_dim_copy(bset->dim));
+ c = isl_equality_alloc(isl_basic_set_get_dim(bset));
isl_int_set_si(v, -1);
isl_constraint_set_constant(c, v);
isl_int_set_si(v, 1);
isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
- div = isl_div_alloc(isl_dim_copy(bset->dim));
+ div = isl_div_alloc(isl_basic_set_get_dim(bset));
c = isl_constraint_add_div(c, div, &pos);
isl_int_set_si(v, 6);
isl_constraint_set_coefficient(c, isl_dim_div, pos, v);
dim = isl_dim_set_alloc(ctx, 0, 2);
bset = isl_basic_set_universe(dim);
- c = isl_equality_alloc(isl_dim_copy(bset->dim));
+ c = isl_equality_alloc(isl_basic_set_get_dim(bset));
isl_int_set_si(v, -1);
isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
- div = isl_div_alloc(isl_dim_copy(bset->dim));
+ div = isl_div_alloc(isl_basic_set_get_dim(bset));
c = isl_constraint_add_div(c, div, &pos);
isl_int_set_si(v, 3);
isl_constraint_set_coefficient(c, isl_dim_div, pos, v);
bset = isl_basic_set_add_constraint(bset, c);
- c = isl_equality_alloc(isl_dim_copy(bset->dim));
+ c = isl_equality_alloc(isl_basic_set_get_dim(bset));
isl_int_set_si(v, 1);
isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
isl_int_set_si(v, -3);
isl_constraint_set_coefficient(c, isl_dim_set, 1, v);
bset = isl_basic_set_add_constraint(bset, c);
- assert(bset->n_div == 0);
+ assert(bset && bset->n_div == 0);
isl_basic_set_free(bset);
/* test 6 */
dim = isl_dim_set_alloc(ctx, 0, 2);
bset = isl_basic_set_universe(dim);
- c = isl_equality_alloc(isl_dim_copy(bset->dim));
+ c = isl_equality_alloc(isl_basic_set_get_dim(bset));
isl_int_set_si(v, -1);
isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
- div = isl_div_alloc(isl_dim_copy(bset->dim));
+ div = isl_div_alloc(isl_basic_set_get_dim(bset));
c = isl_constraint_add_div(c, div, &pos);
isl_int_set_si(v, 6);
isl_constraint_set_coefficient(c, isl_dim_div, pos, v);
bset = isl_basic_set_add_constraint(bset, c);
- c = isl_equality_alloc(isl_dim_copy(bset->dim));
+ c = isl_equality_alloc(isl_basic_set_get_dim(bset));
isl_int_set_si(v, 1);
isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
isl_int_set_si(v, -3);
isl_constraint_set_coefficient(c, isl_dim_set, 1, v);
bset = isl_basic_set_add_constraint(bset, c);
- assert(bset->n_div == 1);
+ assert(bset && bset->n_div == 1);
isl_basic_set_free(bset);
/* test 7 */
dim = isl_dim_set_alloc(ctx, 0, 3);
bset = isl_basic_set_universe(dim);
- c = isl_equality_alloc(isl_dim_copy(bset->dim));
+ c = isl_equality_alloc(isl_basic_set_get_dim(bset));
isl_int_set_si(v, -1);
isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
isl_int_set_si(v, -3);
isl_constraint_set_coefficient(c, isl_dim_set, 1, v);
isl_int_set_si(v, -3);
isl_constraint_set_coefficient(c, isl_dim_set, 2, v);
- div = isl_div_alloc(isl_dim_copy(bset->dim));
+ div = isl_div_alloc(isl_basic_set_get_dim(bset));
c = isl_constraint_add_div(c, div, &pos);
isl_int_set_si(v, 6);
isl_constraint_set_coefficient(c, isl_dim_div, pos, v);
/* Test disabled for now */
/*
- assert(bset->n_div == 1);
+ assert(bset && bset->n_div == 1);
*/
isl_basic_set_free(bset);
dim = isl_dim_set_alloc(ctx, 0, 4);
bset = isl_basic_set_universe(dim);
- c = isl_equality_alloc(isl_dim_copy(bset->dim));
+ c = isl_equality_alloc(isl_basic_set_get_dim(bset));
isl_int_set_si(v, -1);
isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
isl_int_set_si(v, -3);
isl_constraint_set_coefficient(c, isl_dim_set, 1, v);
isl_int_set_si(v, -3);
isl_constraint_set_coefficient(c, isl_dim_set, 3, v);
- div = isl_div_alloc(isl_dim_copy(bset->dim));
+ div = isl_div_alloc(isl_basic_set_get_dim(bset));
c = isl_constraint_add_div(c, div, &pos);
isl_int_set_si(v, 6);
isl_constraint_set_coefficient(c, isl_dim_div, pos, v);
bset = isl_basic_set_add_constraint(bset, c);
- c = isl_equality_alloc(isl_dim_copy(bset->dim));
+ c = isl_equality_alloc(isl_basic_set_get_dim(bset));
isl_int_set_si(v, -1);
isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
isl_int_set_si(v, 1);
/* Test disabled for now */
/*
- assert(bset->n_div == 1);
+ assert(bset && bset->n_div == 1);
*/
isl_basic_set_free(bset);
dim = isl_dim_set_alloc(ctx, 0, 2);
bset = isl_basic_set_universe(dim);
- c = isl_equality_alloc(isl_dim_copy(bset->dim));
+ c = isl_equality_alloc(isl_basic_set_get_dim(bset));
isl_int_set_si(v, 1);
isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
isl_int_set_si(v, -1);
isl_constraint_set_coefficient(c, isl_dim_set, 1, v);
- div = isl_div_alloc(isl_dim_copy(bset->dim));
+ div = isl_div_alloc(isl_basic_set_get_dim(bset));
c = isl_constraint_add_div(c, div, &pos);
isl_int_set_si(v, -2);
isl_constraint_set_coefficient(c, isl_dim_div, pos, v);
bset = isl_basic_set_add_constraint(bset, c);
- c = isl_equality_alloc(isl_dim_copy(bset->dim));
+ c = isl_equality_alloc(isl_basic_set_get_dim(bset));
isl_int_set_si(v, -1);
isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
- div = isl_div_alloc(isl_dim_copy(bset->dim));
+ div = isl_div_alloc(isl_basic_set_get_dim(bset));
c = isl_constraint_add_div(c, div, &pos);
isl_int_set_si(v, 3);
isl_constraint_set_coefficient(c, isl_dim_div, pos, v);
dim = isl_dim_set_alloc(ctx, 0, 2);
bset = isl_basic_set_universe(dim);
- c = isl_equality_alloc(isl_dim_copy(bset->dim));
+ c = isl_equality_alloc(isl_basic_set_get_dim(bset));
isl_int_set_si(v, 1);
isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
- div = isl_div_alloc(isl_dim_copy(bset->dim));
+ div = isl_div_alloc(isl_basic_set_get_dim(bset));
c = isl_constraint_add_div(c, div, &pos);
isl_int_set_si(v, -2);
isl_constraint_set_coefficient(c, isl_dim_div, pos, v);
{
const char *str;
isl_map *map;
+ isl_set *set;
+ isl_set *set2;
str = "[p0, p1] -> { [] -> [] : "
"exists (e0 = [(2p1)/3], e1, e2, e3 = [(3 - p1 + 3e0)/3], "
map = isl_map_read_from_str(ctx, str, -1);
map = isl_map_lexmin(map);
isl_map_free(map);
+
+ str = "[C] -> { [obj,a,b,c] : obj <= 38 a + 7 b + 10 c and "
+ "a + b <= 1 and c <= 10 b and c <= C and a,b,c,C >= 0 }";
+ set = isl_set_read_from_str(ctx, str, -1);
+ set = isl_set_lexmax(set);
+ str = "[C] -> { [obj,a,b,c] : C = 8 }";
+ set2 = isl_set_read_from_str(ctx, str, -1);
+ set = isl_set_intersect(set, set2);
+ assert(!isl_set_is_empty(set));
+ isl_set_free(set);
}
struct must_may {
return 2 * depth;
}
-int map_is_equal(__isl_keep isl_map *map, const char *str)
+static int map_is_equal(__isl_keep isl_map *map, const char *str)
{
isl_map *map2;
int equal;
+ if (!map)
+ return -1;
+
map2 = isl_map_read_from_str(map->ctx, str, -1);
equal = isl_map_is_equal(map, map2);
isl_map_free(map2);
isl_flow_free(flow);
}
+void test_sv(struct isl_ctx *ctx)
+{
+ const char *str;
+ isl_map *map;
+
+ str = "[N] -> { [i] -> [f] : 0 <= i <= N and 0 <= i - 10 f <= 9 }";
+ map = isl_map_read_from_str(ctx, str, -1);
+ assert(isl_map_is_single_valued(map));
+ isl_map_free(map);
+
+ str = "[N] -> { [i] -> [f] : 0 <= i <= N and 0 <= i - 10 f <= 10 }";
+ map = isl_map_read_from_str(ctx, str, -1);
+ assert(!isl_map_is_single_valued(map));
+ isl_map_free(map);
+}
+
+void test_bijective_case(struct isl_ctx *ctx, const char *str, int bijective)
+{
+ isl_map *map;
+
+ map = isl_map_read_from_str(ctx, str, -1);
+ if (bijective)
+ assert(isl_map_is_bijective(map));
+ else
+ assert(!isl_map_is_bijective(map));
+ isl_map_free(map);
+}
+
+void test_bijective(struct isl_ctx *ctx)
+{
+ test_bijective_case(ctx, "[N,M]->{[i,j] -> [i]}", 0);
+ test_bijective_case(ctx, "[N,M]->{[i,j] -> [i] : j=i}", 1);
+ test_bijective_case(ctx, "[N,M]->{[i,j] -> [i] : j=0}", 1);
+ test_bijective_case(ctx, "[N,M]->{[i,j] -> [i] : j=N}", 1);
+ test_bijective_case(ctx, "[N,M]->{[i,j] -> [j,i]}", 1);
+ test_bijective_case(ctx, "[N,M]->{[i,j] -> [i+j]}", 0);
+ test_bijective_case(ctx, "[N,M]->{[i,j] -> []}", 0);
+ test_bijective_case(ctx, "[N,M]->{[i,j] -> [i,j,N]}", 1);
+ test_bijective_case(ctx, "[N,M]->{[i,j] -> [2i]}", 0);
+ test_bijective_case(ctx, "[N,M]->{[i,j] -> [i,i]}", 0);
+ test_bijective_case(ctx, "[N,M]->{[i,j] -> [2i,i]}", 0);
+ test_bijective_case(ctx, "[N,M]->{[i,j] -> [2i,j]}", 1);
+ test_bijective_case(ctx, "[N,M]->{[i,j] -> [x,y] : 2x=i & y =j}", 1);
+}
+
int main()
{
struct isl_ctx *ctx;
assert(srcdir);
ctx = isl_ctx_alloc();
+ test_sv(ctx);
+ test_bijective(ctx);
test_dep(ctx);
test_read(ctx);
+ test_bounded(ctx);
test_construction(ctx);
test_dim(ctx);
test_div(ctx);