hide isl_basic_set internals
[platform/upstream/isl.git] / isl_test.c
index 9c73ab4..e64ef43 100644 (file)
 #include <assert.h>
 #include <stdio.h>
 #include <limits.h>
-#include <isl_ctx.h>
-#include <isl_set.h>
-#include <isl_flow.h>
-#include <isl_constraint.h>
-#include <isl_polynomial.h>
-#include <isl_union_map.h>
+#include <isl/ctx.h>
+#include <isl/set.h>
+#include <isl/flow.h>
+#include <isl/constraint.h>
+#include <isl/polynomial.h>
+#include <isl/union_map.h>
+#include <isl_map_private.h>
 
 static char *srcdir;
 
@@ -1451,6 +1452,34 @@ void test_pwqp(struct isl_ctx *ctx)
        assert(isl_pw_qpolynomial_is_zero(pwqp1));
 
        isl_pw_qpolynomial_free(pwqp1);
+
+       str = "{ [i] -> i + [ (i + [i/3])/2 ] }";
+       pwqp1 = isl_pw_qpolynomial_read_from_str(ctx, str);
+       str = "{ [10] }";
+       set = isl_set_read_from_str(ctx, str, 0);
+       pwqp1 = isl_pw_qpolynomial_gist(pwqp1, set);
+       str = "{ [i] -> 16 }";
+       pwqp2 = isl_pw_qpolynomial_read_from_str(ctx, str);
+
+       pwqp1 = isl_pw_qpolynomial_sub(pwqp1, pwqp2);
+
+       assert(isl_pw_qpolynomial_is_zero(pwqp1));
+
+       isl_pw_qpolynomial_free(pwqp1);
+
+       str = "{ [i] -> ([(i)/2]) }";
+       pwqp1 = isl_pw_qpolynomial_read_from_str(ctx, str);
+       str = "{ [k] : exists a : k = 2a+1 }";
+       set = isl_set_read_from_str(ctx, str, 0);
+       pwqp1 = isl_pw_qpolynomial_gist(pwqp1, set);
+       str = "{ [i] -> -1/2 + 1/2 * i }";
+       pwqp2 = isl_pw_qpolynomial_read_from_str(ctx, str);
+
+       pwqp1 = isl_pw_qpolynomial_sub(pwqp1, pwqp2);
+
+       assert(isl_pw_qpolynomial_is_zero(pwqp1));
+
+       isl_pw_qpolynomial_free(pwqp1);
 }
 
 void test_split_periods(isl_ctx *ctx)
@@ -1472,19 +1501,44 @@ void test_split_periods(isl_ctx *ctx)
 void test_union(isl_ctx *ctx)
 {
        const char *str;
-       isl_union_set *uset;
+       isl_union_set *uset1, *uset2;
        isl_union_map *umap1, *umap2;
 
        str = "{ [i] : 0 <= i <= 1 }";
-       uset = isl_union_set_from_set(isl_set_read_from_str(ctx, str, -1));
+       uset1 = isl_union_set_read_from_str(ctx, str);
        str = "{ [1] -> [0] }";
-       umap1 = isl_union_map_from_map(isl_map_read_from_str(ctx, str, -1));
+       umap1 = isl_union_map_read_from_str(ctx, str);
 
-       umap2 = isl_union_set_lex_gt_union_set(isl_union_set_copy(uset), uset);
+       umap2 = isl_union_set_lex_gt_union_set(isl_union_set_copy(uset1), uset1);
        assert(isl_union_map_is_equal(umap1, umap2));
 
        isl_union_map_free(umap1);
        isl_union_map_free(umap2);
+
+       str = "{ A[i] -> B[i]; B[i] -> C[i]; A[0] -> C[1] }";
+       umap1 = isl_union_map_read_from_str(ctx, str);
+       str = "{ A[i]; B[i] }";
+       uset1 = isl_union_set_read_from_str(ctx, str);
+
+       uset2 = isl_union_map_domain(umap1);
+
+       assert(isl_union_set_is_equal(uset1, uset2));
+
+       isl_union_set_free(uset1);
+       isl_union_set_free(uset2);
+}
+
+void test_bound(isl_ctx *ctx)
+{
+       const char *str;
+       isl_pw_qpolynomial *pwqp;
+       isl_pw_qpolynomial_fold *pwf;
+
+       str = "{ [[a, b, c, d] -> [e]] -> 0 }";
+       pwqp = isl_pw_qpolynomial_read_from_str(ctx, str);
+       pwf = isl_pw_qpolynomial_bound(pwqp, isl_fold_max, NULL);
+       assert(isl_pw_qpolynomial_fold_dim(pwf, isl_dim_set) == 4);
+       isl_pw_qpolynomial_fold_free(pwf);
 }
 
 int main()
@@ -1495,6 +1549,7 @@ int main()
        assert(srcdir);
 
        ctx = isl_ctx_alloc();
+       test_bound(ctx);
        test_union(ctx);
        test_split_periods(ctx);
        test_parse(ctx);