1 /*
2  * Copyright (C) by Argonne National Laboratory
3  *     See COPYRIGHT in top-level directory
4  */
5 
6 #include "yaksa.h"
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <assert.h>
10 
11 void int_with_lb_ub_test(void);
12 void contig_of_int_with_lb_ub_test(void);
13 void contig_negextent_of_int_with_lb_ub_test(void);
14 void vector_of_int_with_lb_ub_test(void);
15 void vector_blklen_of_int_with_lb_ub_test(void);
16 void vector_blklen_stride_of_int_with_lb_ub_test(void);
17 void vector_blklen_stride_negextent_of_int_with_lb_ub_test(void);
18 void vector_blklen_negstride_negextent_of_int_with_lb_ub_test(void);
19 void int_with_negextent_test(void);
20 void vector_blklen_negstride_of_int_with_lb_ub_test(void);
21 
main(int argc,char ** argv)22 int main(int argc, char **argv)
23 {
24     yaksa_init(NULL);
25 
26     int_with_lb_ub_test();
27     contig_of_int_with_lb_ub_test();
28     contig_negextent_of_int_with_lb_ub_test();
29     vector_of_int_with_lb_ub_test();
30     vector_blklen_of_int_with_lb_ub_test();
31     vector_blklen_stride_of_int_with_lb_ub_test();
32     vector_blklen_negstride_of_int_with_lb_ub_test();
33     int_with_negextent_test();
34     vector_blklen_stride_negextent_of_int_with_lb_ub_test();
35     vector_blklen_negstride_negextent_of_int_with_lb_ub_test();
36 
37     yaksa_finalize();
38     return 0;
39 }
40 
int_with_lb_ub_test(void)41 void int_with_lb_ub_test(void)
42 {
43     uintptr_t val;
44     intptr_t lb, extent;
45     yaksa_type_t tmptype, eviltype;
46 
47     yaksa_type_create_contig(4, YAKSA_TYPE__BYTE, NULL, &tmptype);
48     yaksa_type_create_resized(tmptype, -3, 9, NULL, &eviltype);
49     yaksa_type_get_size(eviltype, &val);
50     assert(val == 4);
51 
52     yaksa_type_get_extent(eviltype, &lb, &extent);
53     assert(lb == -3);
54     assert(extent == 9);
55 
56     yaksa_type_get_true_extent(eviltype, &lb, &extent);
57     assert(lb == 0);
58     assert(extent == 4);
59 
60     yaksa_type_free(tmptype);
61     yaksa_type_free(eviltype);
62 }
63 
contig_of_int_with_lb_ub_test(void)64 void contig_of_int_with_lb_ub_test(void)
65 {
66     uintptr_t val;
67     intptr_t lb, extent;
68     yaksa_type_t tmptype, inttype, eviltype;
69 
70     yaksa_type_create_contig(4, YAKSA_TYPE__BYTE, NULL, &tmptype);
71     yaksa_type_create_resized(tmptype, -3, 9, NULL, &inttype);
72     yaksa_type_create_contig(3, inttype, NULL, &eviltype);
73 
74     yaksa_type_get_size(eviltype, &val);
75     assert(val == 12);
76 
77     yaksa_type_get_extent(eviltype, &lb, &extent);
78     assert(lb == -3);
79     assert(extent == 27);
80 
81     yaksa_type_get_true_extent(eviltype, &lb, &extent);
82     assert(lb == 0);
83     assert(extent == 22);
84 
85     yaksa_type_free(tmptype);
86     yaksa_type_free(inttype);
87     yaksa_type_free(eviltype);
88 }
89 
contig_negextent_of_int_with_lb_ub_test(void)90 void contig_negextent_of_int_with_lb_ub_test(void)
91 {
92     uintptr_t val;
93     intptr_t lb, extent;
94     yaksa_type_t tmptype, inttype, eviltype;
95 
96     yaksa_type_create_contig(4, YAKSA_TYPE__BYTE, NULL, &tmptype);
97     yaksa_type_create_resized(tmptype, 6, -9, NULL, &inttype);
98     yaksa_type_create_contig(3, inttype, NULL, &eviltype);
99 
100     yaksa_type_get_size(eviltype, &val);
101     assert(val == 12);
102 
103     yaksa_type_get_extent(eviltype, &lb, &extent);
104     assert(lb == -12);
105     assert(extent == 9);
106 
107     yaksa_type_get_true_extent(eviltype, &lb, &extent);
108     assert(lb == -18);
109     assert(extent == 22);
110 
111     yaksa_type_free(tmptype);
112     yaksa_type_free(inttype);
113     yaksa_type_free(eviltype);
114 }
115 
vector_of_int_with_lb_ub_test(void)116 void vector_of_int_with_lb_ub_test(void)
117 {
118     uintptr_t val;
119     intptr_t lb, extent;
120     yaksa_type_t tmptype, inttype, eviltype;
121 
122     yaksa_type_create_contig(4, YAKSA_TYPE__BYTE, NULL, &tmptype);
123     yaksa_type_create_resized(tmptype, -3, 9, NULL, &inttype);
124     yaksa_type_create_vector(3, 1, 1, inttype, NULL, &eviltype);
125 
126     yaksa_type_get_size(eviltype, &val);
127     assert(val == 12);
128 
129     yaksa_type_get_extent(eviltype, &lb, &extent);
130     assert(lb == -3);
131     assert(extent == 27);
132 
133     yaksa_type_get_true_extent(eviltype, &lb, &extent);
134     assert(lb == 0);
135     assert(extent == 22);
136 
137     yaksa_type_free(tmptype);
138     yaksa_type_free(inttype);
139     yaksa_type_free(eviltype);
140 }
141 
vector_blklen_of_int_with_lb_ub_test(void)142 void vector_blklen_of_int_with_lb_ub_test(void)
143 {
144     uintptr_t val;
145     intptr_t lb, extent;
146     yaksa_type_t tmptype, inttype, eviltype;
147 
148     yaksa_type_create_contig(4, YAKSA_TYPE__BYTE, NULL, &tmptype);
149     yaksa_type_create_resized(tmptype, -3, 9, NULL, &inttype);
150     yaksa_type_create_vector(3, 4, 1, inttype, NULL, &eviltype);
151 
152     yaksa_type_get_size(eviltype, &val);
153     assert(val == 48);
154 
155     yaksa_type_get_extent(eviltype, &lb, &extent);
156     assert(lb == -3);
157     assert(extent == 54);
158 
159     yaksa_type_get_true_extent(eviltype, &lb, &extent);
160     assert(lb == 0);
161     assert(extent == 49);
162 
163     yaksa_type_free(tmptype);
164     yaksa_type_free(inttype);
165     yaksa_type_free(eviltype);
166 }
167 
vector_blklen_stride_of_int_with_lb_ub_test(void)168 void vector_blklen_stride_of_int_with_lb_ub_test(void)
169 {
170     uintptr_t val;
171     intptr_t lb, extent;
172     yaksa_type_t tmptype, inttype, eviltype;
173 
174     yaksa_type_create_contig(4, YAKSA_TYPE__BYTE, NULL, &tmptype);
175     yaksa_type_create_resized(tmptype, -3, 9, NULL, &inttype);
176     yaksa_type_create_vector(3, 4, 5, inttype, NULL, &eviltype);
177 
178     yaksa_type_get_size(eviltype, &val);
179     assert(val == 48);
180 
181     yaksa_type_get_extent(eviltype, &lb, &extent);
182     assert(lb == -3);
183     assert(extent == 126);
184 
185     yaksa_type_get_true_extent(eviltype, &lb, &extent);
186     assert(lb == 0);
187     assert(extent == 121);
188 
189     yaksa_type_free(tmptype);
190     yaksa_type_free(inttype);
191     yaksa_type_free(eviltype);
192 }
193 
vector_blklen_negstride_of_int_with_lb_ub_test(void)194 void vector_blklen_negstride_of_int_with_lb_ub_test(void)
195 {
196     uintptr_t val;
197     intptr_t lb, extent;
198     yaksa_type_t tmptype, inttype, eviltype;
199 
200     yaksa_type_create_contig(4, YAKSA_TYPE__BYTE, NULL, &tmptype);
201     yaksa_type_create_resized(tmptype, -3, 9, NULL, &inttype);
202     yaksa_type_create_vector(3, 4, -5, inttype, NULL, &eviltype);
203 
204     yaksa_type_get_size(eviltype, &val);
205     assert(val == 48);
206 
207     yaksa_type_get_extent(eviltype, &lb, &extent);
208     assert(lb == -93);
209     assert(extent == 126);
210 
211     yaksa_type_get_true_extent(eviltype, &lb, &extent);
212     assert(lb == -90);
213     assert(extent == 121);
214 
215     yaksa_type_free(tmptype);
216     yaksa_type_free(inttype);
217     yaksa_type_free(eviltype);
218 }
219 
int_with_negextent_test(void)220 void int_with_negextent_test(void)
221 {
222     uintptr_t val;
223     intptr_t lb, extent;
224     yaksa_type_t tmptype, eviltype;
225 
226     yaksa_type_create_contig(4, YAKSA_TYPE__BYTE, NULL, &tmptype);
227     yaksa_type_create_resized(tmptype, 6, -9, NULL, &eviltype);
228 
229     yaksa_type_get_size(eviltype, &val);
230     assert(val == 4);
231 
232     yaksa_type_get_extent(eviltype, &lb, &extent);
233     assert(lb == 6);
234     assert(extent == -9);
235 
236     yaksa_type_get_true_extent(eviltype, &lb, &extent);
237     assert(lb == 0);
238     assert(extent == 4);
239 
240     yaksa_type_free(tmptype);
241     yaksa_type_free(eviltype);
242 }
243 
vector_blklen_stride_negextent_of_int_with_lb_ub_test(void)244 void vector_blklen_stride_negextent_of_int_with_lb_ub_test(void)
245 {
246     uintptr_t val;
247     intptr_t lb, extent;
248     yaksa_type_t tmptype, inttype, eviltype;
249 
250     yaksa_type_create_contig(4, YAKSA_TYPE__BYTE, NULL, &tmptype);
251     yaksa_type_create_resized(tmptype, 6, -9, NULL, &inttype);
252     yaksa_type_create_vector(3, 4, 5, inttype, NULL, &eviltype);
253 
254     yaksa_type_get_size(eviltype, &val);
255     assert(val == 48);
256 
257     yaksa_type_get_extent(eviltype, &lb, &extent);
258     assert(lb == -111);
259     assert(extent == 108);
260 
261     yaksa_type_get_true_extent(eviltype, &lb, &extent);
262     assert(lb == -117);
263     assert(extent == 121);
264 
265     yaksa_type_free(tmptype);
266     yaksa_type_free(inttype);
267     yaksa_type_free(eviltype);
268 }
269 
vector_blklen_negstride_negextent_of_int_with_lb_ub_test(void)270 void vector_blklen_negstride_negextent_of_int_with_lb_ub_test(void)
271 {
272     uintptr_t val;
273     intptr_t lb, extent;
274     yaksa_type_t tmptype, inttype, eviltype;
275 
276     yaksa_type_create_contig(4, YAKSA_TYPE__BYTE, NULL, &tmptype);
277     yaksa_type_create_resized(tmptype, 6, -9, NULL, &inttype);
278     yaksa_type_create_vector(3, 4, -5, inttype, NULL, &eviltype);
279 
280     yaksa_type_get_size(eviltype, &val);
281     assert(val == 48);
282 
283     yaksa_type_get_extent(eviltype, &lb, &extent);
284     assert(lb == -21);
285     assert(extent == 108);
286 
287     yaksa_type_get_true_extent(eviltype, &lb, &extent);
288     assert(lb == -27);
289     assert(extent == 121);
290 
291     yaksa_type_free(tmptype);
292     yaksa_type_free(inttype);
293     yaksa_type_free(eviltype);
294 }
295