1*5971e316Smrg #define xCAT(A,B) A ## B
2*5971e316Smrg #define CAT(A,B) xCAT(A,B)
3*5971e316Smrg #undef TYPE
4*5971e316Smrg #define TYPE CAT(isl_,BASE)
5*5971e316Smrg #define xFN(TYPE,NAME) TYPE ## _ ## NAME
6*5971e316Smrg #define FN(TYPE,NAME) xFN(TYPE,NAME)
7*5971e316Smrg
8*5971e316Smrg /* Check that printing "obj" and parsing the output results
9*5971e316Smrg * in the same expression.
10*5971e316Smrg */
FN(check_reparse,BASE)11*5971e316Smrg static isl_stat FN(check_reparse,BASE)(isl_ctx *ctx,
12*5971e316Smrg __isl_take TYPE *obj)
13*5971e316Smrg {
14*5971e316Smrg char *str;
15*5971e316Smrg isl_bool equal;
16*5971e316Smrg TYPE *obj2;
17*5971e316Smrg
18*5971e316Smrg str = FN(TYPE,to_str)(obj);
19*5971e316Smrg obj2 = FN(TYPE,read_from_str)(ctx, str);
20*5971e316Smrg free(str);
21*5971e316Smrg equal = FN(TYPE,plain_is_equal)(obj, obj2);
22*5971e316Smrg FN(TYPE,free)(obj);
23*5971e316Smrg FN(TYPE,free)(obj2);
24*5971e316Smrg if (equal < 0)
25*5971e316Smrg return isl_stat_error;
26*5971e316Smrg if (!equal)
27*5971e316Smrg isl_die(ctx, isl_error_unknown,
28*5971e316Smrg "parsed function not equal to original",
29*5971e316Smrg return isl_stat_error);
30*5971e316Smrg
31*5971e316Smrg return isl_stat_ok;
32*5971e316Smrg }
33