xref: /netbsd-src/external/mit/isl/dist/check_reparse_templ.c (revision 5971e316fdea024efff6be8f03536623db06833e)
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