#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;
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)
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()
assert(srcdir);
ctx = isl_ctx_alloc();
+ test_bound(ctx);
test_union(ctx);
test_split_periods(ctx);
test_parse(ctx);