xref: /netbsd-src/external/mit/isl/dist/isl_test_list_templ.c (revision 5971e316fdea024efff6be8f03536623db06833e)
1 #define xCAT(A,B) A ## B
2 #define CAT(A,B) xCAT(A,B)
3 #define xFN(TYPE,NAME) TYPE ## _ ## NAME
4 #define FN(TYPE,NAME) xFN(TYPE,NAME)
5 #define xLIST(EL) EL ## _list
6 #define LIST(EL) xLIST(EL)
7 
8 #undef SET
9 #define SET	CAT(isl_,SET_BASE)
10 #undef EL
11 #define EL	CAT(isl_,EL_BASE)
12 
13 /* Check that the conversion from SET to list of EL works as expected,
14  * using input described by "str".
15  */
FN(FN (FN (test_get_list,EL_BASE),from),SET_BASE)16 static isl_stat FN(FN(FN(test_get_list,EL_BASE),from),SET_BASE)(isl_ctx *ctx,
17 	const char *str)
18 {
19 	int i;
20 	isl_size n;
21 	isl_bool equal;
22 	SET *set, *set2;
23 	LIST(EL) *list;
24 
25 	set = FN(SET,read_from_str)(ctx, str);
26 	list = FN(FN(SET,get),LIST(EL_BASE))(set);
27 
28 	set2 = FN(SET,empty)(FN(SET,get_space)(set));
29 
30 	n = FN(LIST(EL),size)(list);
31 	for (i = 0; i < n; i++) {
32 		EL *el;
33 		el = FN(LIST(EL),get_at)(list, i);
34 		set2 = FN(SET,union)(set2, FN(FN(SET,from),EL_BASE)(el));
35 	}
36 
37 	equal = FN(SET,is_equal)(set, set2);
38 
39 	FN(SET,free)(set);
40 	FN(SET,free)(set2);
41 	FN(LIST(EL),free)(list);
42 
43 	if (n < 0 || equal < 0)
44 		return isl_stat_error;
45 
46 	if (!equal)
47 		isl_die(ctx, isl_error_unknown, "collections are not equal",
48 			return isl_stat_error);
49 
50 	return isl_stat_ok;
51 }
52