X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=isl_test.c;h=48a58e13307204937c77840246ce500fb6833235;hb=14102905bbd16f8e0a8342a4dd6e1433a7abacaf;hp=653b833f36bc157dcb5847c39d34bf2b155003a8;hpb=b7d848b49611b6bed2bfb1c7ab329beb54eca31d;p=platform%2Fupstream%2Fisl.git diff --git a/isl_test.c b/isl_test.c index 653b833..48a58e1 100644 --- a/isl_test.c +++ b/isl_test.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -119,6 +120,26 @@ void test_parse(struct isl_ctx *ctx) str2 = "[n] -> { [c1] : c1 >= 0 and 3c1 <= -4 + n }"; test_parse_map_equal(ctx, str, str2); + str = "{ [i,j] -> [i] : i < j; [i,j] -> [j] : j <= i }"; + str2 = "{ [i,j] -> [min(i,j)] }"; + test_parse_map_equal(ctx, str, str2); + + str = "{ [i,j] : i != j }"; + str2 = "{ [i,j] : i < j or i > j }"; + test_parse_map_equal(ctx, str, str2); + + str = "{ [i,j] : (i+1)*2 >= j }"; + str2 = "{ [i, j] : j <= 2 + 2i }"; + test_parse_map_equal(ctx, str, str2); + + str = "{ [i] -> [i > 0 ? 4 : 5] }"; + str2 = "{ [i] -> [5] : i <= 0; [i] -> [4] : i >= 1 }"; + test_parse_map_equal(ctx, str, str2); + + str = "[N=2,M] -> { [i=[(M+N)/4]] }"; + str2 = "[N, M] -> { [i] : N = 2 and 4i <= 2 + M and 4i >= -1 + M }"; + test_parse_map_equal(ctx, str, str2); + test_parse_pwqp(ctx, "{ [i] -> i + [ (i + [i/3])/2 ] }"); test_parse_map(ctx, "{ S1[i] -> [([i/10]),i%10] : 0 <= i <= 45 }"); } @@ -234,16 +255,14 @@ void test_dim(struct isl_ctx *ctx) void test_div(struct isl_ctx *ctx) { isl_int v; - int pos; struct isl_dim *dim; - struct isl_div *div; struct isl_basic_set *bset; struct isl_constraint *c; isl_int_init(v); /* test 1 */ - dim = isl_dim_set_alloc(ctx, 0, 1); + dim = isl_dim_set_alloc(ctx, 0, 3); bset = isl_basic_set_universe(dim); c = isl_equality_alloc(isl_basic_set_get_dim(bset)); @@ -251,10 +270,8 @@ void test_div(struct isl_ctx *ctx) 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_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); + isl_constraint_set_coefficient(c, isl_dim_set, 1, v); bset = isl_basic_set_add_constraint(bset, c); c = isl_equality_alloc(isl_basic_set_get_dim(bset)); @@ -262,17 +279,17 @@ void test_div(struct isl_ctx *ctx) 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_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); + isl_constraint_set_coefficient(c, isl_dim_set, 2, v); bset = isl_basic_set_add_constraint(bset, c); + bset = isl_basic_set_project_out(bset, isl_dim_set, 1, 2); + assert(bset && bset->n_div == 1); isl_basic_set_free(bset); /* test 2 */ - dim = isl_dim_set_alloc(ctx, 0, 1); + dim = isl_dim_set_alloc(ctx, 0, 3); bset = isl_basic_set_universe(dim); c = isl_equality_alloc(isl_basic_set_get_dim(bset)); @@ -280,10 +297,8 @@ void test_div(struct isl_ctx *ctx) 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_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); + isl_constraint_set_coefficient(c, isl_dim_set, 1, v); bset = isl_basic_set_add_constraint(bset, c); c = isl_equality_alloc(isl_basic_set_get_dim(bset)); @@ -291,17 +306,17 @@ void test_div(struct isl_ctx *ctx) 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_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); + isl_constraint_set_coefficient(c, isl_dim_set, 2, v); bset = isl_basic_set_add_constraint(bset, c); + bset = isl_basic_set_project_out(bset, isl_dim_set, 1, 2); + assert(bset && bset->n_div == 1); isl_basic_set_free(bset); /* test 3 */ - dim = isl_dim_set_alloc(ctx, 0, 1); + dim = isl_dim_set_alloc(ctx, 0, 3); bset = isl_basic_set_universe(dim); c = isl_equality_alloc(isl_basic_set_get_dim(bset)); @@ -309,10 +324,8 @@ void test_div(struct isl_ctx *ctx) 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_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); + isl_constraint_set_coefficient(c, isl_dim_set, 1, v); bset = isl_basic_set_add_constraint(bset, c); c = isl_equality_alloc(isl_basic_set_get_dim(bset)); @@ -320,17 +333,17 @@ void test_div(struct isl_ctx *ctx) 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_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); + isl_constraint_set_coefficient(c, isl_dim_set, 2, v); bset = isl_basic_set_add_constraint(bset, c); + bset = isl_basic_set_project_out(bset, isl_dim_set, 1, 2); + assert(bset && bset->n_div == 1); isl_basic_set_free(bset); /* test 4 */ - dim = isl_dim_set_alloc(ctx, 0, 1); + dim = isl_dim_set_alloc(ctx, 0, 3); bset = isl_basic_set_universe(dim); c = isl_equality_alloc(isl_basic_set_get_dim(bset)); @@ -338,10 +351,8 @@ void test_div(struct isl_ctx *ctx) 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_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); + isl_constraint_set_coefficient(c, isl_dim_set, 1, v); bset = isl_basic_set_add_constraint(bset, c); c = isl_equality_alloc(isl_basic_set_get_dim(bset)); @@ -349,26 +360,24 @@ void test_div(struct isl_ctx *ctx) 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_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); + isl_constraint_set_coefficient(c, isl_dim_set, 2, v); bset = isl_basic_set_add_constraint(bset, c); + bset = isl_basic_set_project_out(bset, isl_dim_set, 1, 2); + assert(isl_basic_set_is_empty(bset)); isl_basic_set_free(bset); /* test 5 */ - dim = isl_dim_set_alloc(ctx, 0, 2); + dim = isl_dim_set_alloc(ctx, 0, 3); bset = isl_basic_set_universe(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_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); + isl_constraint_set_coefficient(c, isl_dim_set, 2, v); bset = isl_basic_set_add_constraint(bset, c); c = isl_equality_alloc(isl_basic_set_get_dim(bset)); @@ -378,20 +387,20 @@ void test_div(struct isl_ctx *ctx) isl_constraint_set_coefficient(c, isl_dim_set, 1, v); bset = isl_basic_set_add_constraint(bset, c); + bset = isl_basic_set_project_out(bset, isl_dim_set, 2, 1); + assert(bset && bset->n_div == 0); isl_basic_set_free(bset); /* test 6 */ - dim = isl_dim_set_alloc(ctx, 0, 2); + dim = isl_dim_set_alloc(ctx, 0, 3); bset = isl_basic_set_universe(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_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); + isl_constraint_set_coefficient(c, isl_dim_set, 2, v); bset = isl_basic_set_add_constraint(bset, c); c = isl_equality_alloc(isl_basic_set_get_dim(bset)); @@ -401,6 +410,8 @@ void test_div(struct isl_ctx *ctx) isl_constraint_set_coefficient(c, isl_dim_set, 1, v); bset = isl_basic_set_add_constraint(bset, c); + bset = isl_basic_set_project_out(bset, isl_dim_set, 2, 1); + assert(bset && bset->n_div == 1); isl_basic_set_free(bset); @@ -414,7 +425,7 @@ void test_div(struct isl_ctx *ctx) * and we end up with the original equality and div again. * Perhaps we can avoid the introduction of this temporary div. */ - dim = isl_dim_set_alloc(ctx, 0, 3); + dim = isl_dim_set_alloc(ctx, 0, 4); bset = isl_basic_set_universe(dim); c = isl_equality_alloc(isl_basic_set_get_dim(bset)); @@ -424,12 +435,12 @@ void test_div(struct isl_ctx *ctx) 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_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); + isl_constraint_set_coefficient(c, isl_dim_set, 3, v); bset = isl_basic_set_add_constraint(bset, c); + bset = isl_basic_set_project_out(bset, isl_dim_set, 3, 1); + /* Test disabled for now */ /* assert(bset && bset->n_div == 1); @@ -437,7 +448,7 @@ void test_div(struct isl_ctx *ctx) isl_basic_set_free(bset); /* test 8 */ - dim = isl_dim_set_alloc(ctx, 0, 4); + dim = isl_dim_set_alloc(ctx, 0, 5); bset = isl_basic_set_universe(dim); c = isl_equality_alloc(isl_basic_set_get_dim(bset)); @@ -447,10 +458,8 @@ void test_div(struct isl_ctx *ctx) 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_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); + isl_constraint_set_coefficient(c, isl_dim_set, 4, v); bset = isl_basic_set_add_constraint(bset, c); c = isl_equality_alloc(isl_basic_set_get_dim(bset)); @@ -462,6 +471,8 @@ void test_div(struct isl_ctx *ctx) isl_constraint_set_constant(c, v); bset = isl_basic_set_add_constraint(bset, c); + bset = isl_basic_set_project_out(bset, isl_dim_set, 4, 1); + /* Test disabled for now */ /* assert(bset && bset->n_div == 1); @@ -469,7 +480,7 @@ void test_div(struct isl_ctx *ctx) isl_basic_set_free(bset); /* test 9 */ - dim = isl_dim_set_alloc(ctx, 0, 2); + dim = isl_dim_set_alloc(ctx, 0, 4); bset = isl_basic_set_universe(dim); c = isl_equality_alloc(isl_basic_set_get_dim(bset)); @@ -477,23 +488,21 @@ void test_div(struct isl_ctx *ctx) 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_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); + isl_constraint_set_coefficient(c, isl_dim_set, 2, v); bset = isl_basic_set_add_constraint(bset, c); 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_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); + isl_constraint_set_coefficient(c, isl_dim_set, 3, v); isl_int_set_si(v, 2); isl_constraint_set_constant(c, v); bset = isl_basic_set_add_constraint(bset, c); + bset = isl_basic_set_project_out(bset, isl_dim_set, 2, 2); + bset = isl_basic_set_fix_si(bset, isl_dim_set, 0, 2); assert(!isl_basic_set_is_empty(bset)); @@ -501,18 +510,18 @@ void test_div(struct isl_ctx *ctx) isl_basic_set_free(bset); /* test 10 */ - dim = isl_dim_set_alloc(ctx, 0, 2); + dim = isl_dim_set_alloc(ctx, 0, 3); bset = isl_basic_set_universe(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_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); + isl_constraint_set_coefficient(c, isl_dim_set, 2, v); bset = isl_basic_set_add_constraint(bset, c); + bset = isl_basic_set_project_out(bset, isl_dim_set, 2, 1); + bset = isl_basic_set_fix_si(bset, isl_dim_set, 0, 2); isl_basic_set_free(bset); @@ -1931,8 +1940,9 @@ int test_one_schedule(isl_ctx *ctx, const char *d, const char *w, is_tilable = 1; is_parallel = 1; is_nonneg = 1; + isl_union_set_free(delta); } else { - delta_set = isl_union_set_copy_set(delta); + delta_set = isl_set_from_union_set(delta); slice = isl_set_universe(isl_set_get_dim(delta_set)); for (i = 0; i < tilable; ++i) @@ -1958,7 +1968,6 @@ int test_one_schedule(isl_ctx *ctx, const char *d, const char *w, isl_set_free(origin); isl_set_free(delta_set); } - isl_union_set_free(delta); if (is_nonneg < 0 || is_parallel < 0 || is_tilable < 0 || is_injection < 0 || is_complete < 0) @@ -2175,6 +2184,21 @@ int test_schedule(isl_ctx *ctx) if (test_one_schedule(ctx, D, W, R, S, 0, 0) < 0) return -1; + D = "[n] -> { S_0[j, k] : j <= -1 + n and j >= 0 and " + "k <= -1 + n and k >= 0 }"; + W = "[n] -> { S_0[j, k] -> B[j] : j <= -1 + n and j >= 0 and " "k <= -1 + n and k >= 0 }"; + R = "[n] -> { S_0[j, k] -> B[j] : j <= -1 + n and j >= 0 and " + "k <= -1 + n and k >= 0; " + "S_0[j, k] -> B[k] : j <= -1 + n and j >= 0 and " + "k <= -1 + n and k >= 0; " + "S_0[j, k] -> A[k] : j <= -1 + n and j >= 0 and " + "k <= -1 + n and k >= 0 }"; + S = "[n] -> { S_0[j, k] -> [2, j, k] }"; + ctx->opt->schedule_outer_zero_distance = 1; + if (test_one_schedule(ctx, D, W, R, S, 0, 0) < 0) + return -1; + ctx->opt->schedule_outer_zero_distance = 0; + return test_special_schedule(ctx); } @@ -2348,6 +2372,46 @@ int test_dim_max(isl_ctx *ctx) return 0; } +int test_product(isl_ctx *ctx) +{ + const char *str; + isl_set *set; + int ok; + + str = "{ A[i] }"; + set = isl_set_read_from_str(ctx, str, -1); + set = isl_set_product(set, isl_set_copy(set)); + ok = isl_set_is_wrapping(set); + isl_set_free(set); + if (ok < 0) + return -1; + if (!ok) + isl_die(ctx, isl_error_unknown, "unexpected result", return -1); + + return 0; +} + +int test_equal(isl_ctx *ctx) +{ + const char *str; + isl_set *set, *set2; + int equal; + + str = "{ S_6[i] }"; + set = isl_set_read_from_str(ctx, str, -1); + str = "{ S_7[i] }"; + set2 = isl_set_read_from_str(ctx, str, -1); + equal = isl_set_is_equal(set, set2); + isl_set_free(set); + isl_set_free(set2); + if (equal < 0) + return -1; + if (equal) + isl_die(ctx, isl_error_unknown, "unexpected result", return -1); + + return 0; +} + int main() { struct isl_ctx *ctx; @@ -2356,6 +2420,10 @@ int main() assert(srcdir); ctx = isl_ctx_alloc(); + if (test_equal(ctx) < 0) + goto error; + if (test_product(ctx) < 0) + goto error; if (test_dim_max(ctx) < 0) goto error; if (test_aff(ctx) < 0)