source: tests/alloc2.cfa@ cca034e

ADT ast-experimental
Last change on this file since cca034e was 116a2ea, checked in by Peter A. Buhr <pabuhr@…>, 3 years ago

new heap and associated tests updated

  • Property mode set to 100644
File size: 23.5 KB
Line 
1#include <fstream.hfa> // sout
2#include <malloc.h> // malloc_usable_size
3#include <stdint.h> // uintptr_t
4#include <stdlib.hfa> // access C malloc, realloc
5#include <string.h> // memcmp
6
7int tests_total;
8int tests_failed;
9size_t tAlign = 32;
10struct S1 { int data; } __attribute__((aligned(32)));
11typedef struct S1 T1;
12
13void test_base( void * ip, size_t size, size_t align ) {
14 tests_total += 1;
15 // sout | "DEBUG: starting test" | tests_total;
16 bool passed = (malloc_size( ip ) == size) && (malloc_usable_size( ip ) >= size) && (malloc_alignment( ip ) == align) && ((uintptr_t)ip % align == 0);
17 if ( ! passed ) {
18 sout | "base failed test" | tests_total | "ip" | ip | "size" | size | "align" | align | "but got size" | malloc_size( ip ) | "usable" | malloc_usable_size( ip ) | "align" | malloc_alignment( ip );
19 tests_failed += 1;
20 } // if
21 // sout | "DEBUG: done test" | tests_total;
22}
23
24void test_fill( void * ip_, size_t start, size_t end, char fill ) {
25 tests_total += 1;
26 // sout | "DEBUG: starting test" | tests_total;
27 bool passed = true;
28 char * ip = (char *) ip_;
29 for ( i; start ~ end ) passed = passed && (ip[i] == fill);
30 if ( ! passed ) {
31 sout | "fill1 failed test" | tests_total | "fill C";
32 tests_failed += 1;
33 } // if
34 // sout | "DEBUG: done test" | tests_total;
35}
36
37void test_fill( void * ip_, size_t start, size_t end, int fill ) {
38 tests_total += 1;
39 // sout | "DEBUG: starting test" tests_total;
40 bool passed = true;
41 int * ip = (int *)ip_;
42 for ( i; start ~ end ) passed = passed && (ip[i] == fill);
43 if ( ! passed ) {
44 sout | "fill2 failed test" | tests_total | "fill int";
45 tests_failed += 1;
46 } // if
47 // sout | "DEBUG: done test" | tests_total;
48}
49
50void test_fill( void * ip_, size_t start, size_t end, int * fill ) {
51 tests_total += 1;
52 // sout | "DEBUG: starting test" | tests_total;
53 bool passed = memcmp((void*)((uintptr_t )ip_ + start ), (void*)fill, end ) == 0;
54 if ( ! passed ) {
55 sout | "fill3 failed test" | tests_total | "fill int A";
56 tests_failed += 1;
57 } // if
58 // sout | "DEBUG: done test" | tests_total;
59}
60
61void test_fill( void * ip_, size_t start, size_t end, T1 fill ) {
62 tests_total += 1;
63 // sout | "DEBUG: starting test" | tests_total;
64 bool passed = true;
65 T1 * ip = (T1 *) ip_;
66 for ( i; start ~ end ) passed = passed && (ip[i].data == fill.data );
67 if ( ! passed ) {
68 sout | "fill4 failed test" | tests_total | "fill T1";
69 tests_failed += 1;
70 } // if
71 // sout | "DEBUG: done test" | tests_total;
72}
73
74void test_fill( void * ip_, size_t start, size_t end, T1 * fill ) {
75 tests_total += 1;
76 // sout | "DEBUG: starting test" | tests_total;
77 bool passed = memcmp( (void*)((uintptr_t )ip_ + start ), (void*)fill, end ) == 0;
78 if ( ! passed ) {
79 sout | "fill5 failed test" | tests_total | "fill T1 A";
80 tests_failed += 1;
81 } // if
82 // sout | "DEBUG: done test" | tests_total;
83}
84
85void test_use( int * ip, size_t dim ) {
86 tests_total += 1;
87 // sout | "DEBUG: starting test" | tests_total;
88 bool passed = true;
89 for ( i; 0 ~ dim ) ip[i] = 0xdeadbeef;
90 for ( i; 0 ~ dim ) passed = passed && (ip[i] == 0xdeadbeef);
91 if ( ! passed ) {
92 sout | "use1 failed test" | tests_total | "use int";
93 tests_failed += 1;
94 } // if
95 // sout | "DEBUG: done test" | tests_total;
96}
97
98void test_use( T1 * ip, size_t dim ) {
99 tests_total += 1;
100 // sout | "DEBUG: starting test" | tests_total;
101 bool passed = true;
102 for ( i; 0 ~ dim ) ip[i].data = 0xdeadbeef;
103 for ( i; 0 ~ dim ) passed = passed && (ip[i].data == 0xdeadbeef);
104 if ( ! passed ) {
105 sout | "use2 failed test" | tests_total | "use T1";
106 tests_failed += 1;
107 } // if
108 // sout | "DEBUG: done test" | tests_total;
109}
110
111int main( void ) {
112 enum { dim = 8, align = 64, libAlign = libAlign() };
113 size_t elemSize = sizeof(int);
114 size_t size = dim * elemSize;
115
116 int FillT = 9;
117 char FillC = 'a';
118 int * FillA = calloc( dim / 4 );
119
120 T1 FillT1 = { FillT };
121 T1 * FillT1A = (T1 *)(void *) malloc( (dim / 4) * sizeof(T1) );
122 for ( i; 0 ~ (dim / 4) ) FillT1A[i] = FillT1;
123
124 int * ip;
125 int * op;
126 double * dp;
127 T1 * t1p;
128 T1 * t1op;
129
130 // testing alloc
131
132 tests_total = 0;
133 tests_failed = 0;
134
135 ip = alloc();
136 test_base( ip, elemSize, libAlign );
137 test_use( ip, elemSize / elemSize );
138 free( ip );
139
140 ip = alloc( dim );
141 test_base( ip, size, libAlign );
142 test_use( ip, size / elemSize );
143 free( ip );
144
145 ip = alloc( 0 );
146 test_base( ip, 0, libAlign );
147 free( ip );
148
149 dp = alloc( dim );
150 ip = alloc( dp`resize );
151 test_base( ip, elemSize, libAlign );
152 test_use( ip, elemSize / elemSize );
153 free( ip );
154
155 ip = alloc( 0p`resize );
156 test_base( ip, elemSize, libAlign );
157 test_use( ip, elemSize / elemSize );
158 free( ip );
159
160 dp = alloc( dim );
161 ip = alloc( dim, dp`resize );
162 test_base( ip, size, libAlign );
163 test_use( ip, size / elemSize );
164 free( ip );
165
166 dp = alloc( dim );
167 ip = alloc( 0, dp`resize );
168 test_base( ip, 0, libAlign );
169 free( ip );
170
171 ip = alloc( dim, 0p`resize );
172 test_base( ip, size, libAlign );
173 test_use( ip, size / elemSize );
174 free( ip );
175
176 ip = alloc( 0, 0p`resize );
177 test_base( ip, 0, libAlign );
178 free( ip );
179
180 op = alloc( dim, 0xdeadbeefN`fill );
181 ip = alloc( dim, op`realloc );
182 test_base( ip, size, libAlign );
183 test_fill( ip, 0, dim, 0xdeadbeefN );
184 test_use( ip, size / elemSize );
185 free( ip );
186
187 op = alloc( dim, 0xdeadbeefN`fill );
188 ip = alloc( 0, op`realloc );
189 test_base( ip, 0, libAlign );
190 free( ip );
191
192 ip = alloc( dim, 0p`realloc );
193 test_base( ip, size, libAlign );
194 test_use( ip, size / elemSize );
195 free( ip );
196
197 ip = alloc( 0, 0p`realloc );
198 test_base( ip, 0, libAlign );
199 free( ip );
200
201 op = alloc( dim, 0xdeadbeefN`fill );
202 ip = alloc( dim, op`resize );
203 test_base( ip, size, libAlign );
204 test_use( ip, size / elemSize );
205 free( ip );
206
207 ip = alloc( FillC`fill );
208 test_base( ip, elemSize, libAlign );
209 test_fill( ip, 0, elemSize, FillC );
210 test_use( ip, elemSize / elemSize );
211 free( ip );
212
213 ip = alloc( FillT`fill );
214 test_base( ip, elemSize, libAlign );
215 test_fill( ip, 0, 1, FillT );
216 test_use( ip, elemSize / elemSize );
217 free( ip );
218
219 ip = alloc( dim, FillC`fill );
220 test_base( ip, size, libAlign );
221 test_fill( ip, 0, size, FillC );
222 test_use( ip, size / elemSize );
223 free( ip );
224
225 ip = alloc( 0, FillC`fill );
226 test_base( ip, 0, libAlign );
227 free( ip );
228
229 ip = alloc( dim, FillT`fill );
230 test_base( ip, size, libAlign );
231 test_fill( ip, 0, dim, FillT );
232 test_use( ip, size / elemSize );
233 free( ip );
234
235 ip = alloc( 0, FillT`fill );
236 test_base( ip, 0, libAlign );
237 free( ip );
238
239 ip = alloc( dim, [FillA, dim/4]`fill );
240 test_base( ip, size, libAlign );
241 test_fill( ip, 0, size/4, FillA );
242 test_use( ip, size / elemSize );
243 free( ip );
244
245 ip = alloc( 0, [FillA, dim/4]`fill );
246 test_base( ip, 0, libAlign );
247 free( ip );
248
249 op = alloc( dim, 0xdeadbeefN`fill );
250 ip = alloc( dim, op`realloc, FillC`fill );
251 test_base( ip, size, libAlign );
252 test_fill( ip, 0, dim, 0xdeadbeefN );
253 test_use( ip, size / elemSize );
254 free( ip );
255
256 op = alloc( dim, 0xdeadbeefN`fill );
257 ip = alloc( dim / 4, op`realloc, FillC`fill );
258 test_base( ip, size / 4, libAlign );
259 test_fill( ip, 0, dim / 4, 0xdeadbeefN );
260 test_use( ip, size / 4 / elemSize );
261 free( ip );
262
263 op = alloc( dim, 0xdeadbeefN`fill );
264 ip = alloc( dim * 4, op`realloc, FillC`fill );
265 test_base( ip, size * 4, libAlign );
266 test_fill( ip, 0, dim, 0xdeadbeefN );
267 test_fill( ip, size, size * 4, FillC );
268 test_use( ip, size * 4 / elemSize );
269 free( ip );
270
271 op = alloc( dim, 0xdeadbeefN`fill );
272 ip = alloc( 0, op`realloc, FillC`fill );
273 test_base( ip, 0, libAlign );
274 free( ip );
275
276 ip = alloc( dim, 0p`realloc, FillC`fill );
277 test_base( ip, size, libAlign );
278 test_fill( ip, 0, size, FillC );
279 test_use( ip, size / elemSize );
280 free( ip );
281
282 ip = alloc( 0, 0p`realloc, FillC`fill );
283 test_base( ip, 0, libAlign );
284 free( ip );
285
286 op = alloc( dim, 0xdeadbeefN`fill );
287 ip = alloc( dim, op`realloc, FillT`fill );
288 test_base( ip, size, libAlign );
289 test_fill( ip, 0, dim, 0xdeadbeefN );
290 test_use( ip, size / elemSize );
291 free( ip );
292
293 op = alloc( dim, 0xdeadbeefN`fill );
294 ip = alloc( dim / 4, op`realloc, FillT`fill );
295 test_base( ip, size / 4, libAlign );
296 test_fill( ip, 0, dim / 4, 0xdeadbeefN );
297 test_use( ip, size / 4 / elemSize );
298 free( ip );
299
300 op = alloc( dim, 0xdeadbeefN`fill );
301 ip = alloc( dim * 4, op`realloc, FillT`fill );
302 test_base( ip, size * 4, libAlign );
303 test_fill( ip, 0, dim, 0xdeadbeefN );
304 test_fill( ip, dim, dim * 4, FillT );
305 test_use( ip, size * 4 / elemSize );
306 free( ip );
307
308 op = alloc( dim, 0xdeadbeefN`fill );
309 ip = alloc( 0, op`realloc, FillT`fill );
310 test_base( ip, 0, libAlign );
311 free( ip );
312
313 ip = alloc( dim, 0p`realloc, FillT`fill );
314 test_base( ip, size, libAlign );
315 test_fill( ip, 0, dim, FillT );
316 test_use( ip, size / elemSize );
317 free( ip );
318
319 ip = alloc( 0, 0p`realloc, FillT`fill );
320 test_base( ip, 0, libAlign );
321 free( ip );
322
323 ip = alloc( align`align );
324 test_base( ip, elemSize, align );
325 test_use( ip, elemSize / elemSize );
326 free( ip );
327
328 ip = alloc( dim, align`align );
329 test_base( ip, size, align );
330 test_use( ip, size / elemSize );
331 free( ip );
332
333 ip = alloc( 0, align`align );
334 test_base( ip, 0, libAlign );
335 free( ip );
336
337 op = alloc( dim, 0xdeadbeefN`fill );
338 ip = alloc( op`realloc, align`align );
339 test_base( ip, elemSize, align );
340 test_fill( ip, 0, 1, 0xdeadbeefN );
341 test_use( ip, elemSize / elemSize );
342 free( ip );
343
344 ip = alloc( 0p`realloc, align`align );
345 test_base( ip, elemSize, align );
346 test_use( ip, elemSize / elemSize );
347 free( ip );
348
349 dp = alloc( dim );
350 ip = alloc( dp`resize, align`align );
351 test_base( ip, elemSize, align );
352 test_use( ip, elemSize / elemSize );
353 free( ip );
354
355 ip = alloc( 0p`resize, align`align );
356 test_base( ip, elemSize, align );
357 test_use( ip, elemSize / elemSize );
358 free( ip );
359
360 op = alloc( dim, 0xdeadbeefN`fill );
361 ip = alloc( dim, op`realloc, align`align );
362 test_base( ip, size, align );
363 test_fill( ip, 0, dim, 0xdeadbeefN );
364 test_use( ip, size / elemSize );
365 free( ip );
366
367 op = alloc( dim, 0xdeadbeefN`fill );
368 ip = alloc( 0, op`realloc, align`align );
369 test_base( ip, 0, libAlign );
370 free( ip );
371
372 ip = alloc( dim, 0p`realloc, align`align );
373 test_base( ip, size, align );
374 test_use( ip, size / elemSize );
375 free( ip );
376
377 ip = alloc( 0, 0p`realloc, align`align );
378 test_base( ip, 0, libAlign );
379 free( ip );
380
381 ip = alloc( align`align, FillC`fill );
382 test_base( ip, elemSize, align );
383 test_fill( ip, 0, elemSize, FillC );
384 test_use( ip, elemSize / elemSize );
385 free( ip );
386
387 ip = alloc( align`align, FillT`fill );
388 test_base( ip, elemSize, align );
389 test_fill( ip, 0, 1, FillT );
390 test_use( ip, elemSize / elemSize );
391 free( ip );
392
393 ip = alloc( dim, align`align, FillC`fill );
394 test_base( ip, size, align );
395 test_fill( ip, 0, size, FillC );
396 test_use( ip, size / elemSize );
397 free( ip );
398
399 ip = alloc( 0, align`align, FillC`fill );
400 test_base( ip, 0, libAlign );
401 free( ip );
402
403 ip = alloc( dim, align`align, FillT`fill );
404 test_base( ip, size, align );
405 test_fill( ip, 0, dim, FillT );
406 test_use( ip, size / elemSize );
407 free( ip );
408
409 ip = alloc( 0, align`align, FillT`fill );
410 test_base( ip, 0, libAlign );
411 free( ip );
412
413 ip = alloc( dim, align`align, [FillA, dim/4]`fill );
414 test_base( ip, size, align );
415 test_fill( ip, 0, size/4, FillA );
416 test_use( ip, size / elemSize );
417 free( ip );
418
419 ip = alloc( 0, align`align, [FillA, dim/4]`fill );
420 test_base( ip, 0, libAlign );
421 free( ip );
422
423 op = alloc( dim, 0xdeadbeefN`fill );
424 ip = alloc( dim, op`realloc, align`align, FillC`fill );
425 test_base( ip, size, align );
426 test_fill( ip, 0, dim, 0xdeadbeefN );
427 test_use( ip, size / elemSize );
428 free( ip );
429
430 op = alloc( dim, 0xdeadbeefN`fill );
431 ip = alloc( dim / 4, op`realloc, align`align, FillC`fill );
432 test_base( ip, size / 4, align );
433 test_fill( ip, 0, dim / 4, 0xdeadbeefN );
434 test_use( ip, size / 4 / elemSize );
435 free( ip );
436
437 op = alloc( dim, 0xdeadbeefN`fill );
438 ip = alloc( dim * 4, op`realloc, align`align, FillC`fill );
439 test_base( ip, size * 4, align );
440 test_fill( ip, 0, dim, 0xdeadbeefN );
441 test_fill( ip, size, size * 4, FillC );
442 test_use( ip, size * 4 / elemSize );
443 free( ip );
444
445 op = alloc( dim, 0xdeadbeefN`fill );
446 ip = alloc( 0, op`realloc, align`align, FillC`fill );
447 test_base( ip, 0, libAlign );
448 free( ip );
449
450 ip = alloc( dim, 0p`realloc, align`align, FillC`fill );
451 test_base( ip, size, align );
452 test_fill( ip, 0, size, FillC );
453 test_use( ip, size / elemSize );
454 free( ip );
455
456 ip = alloc( 0, 0p`realloc, align`align, FillC`fill );
457 test_base( ip, 0, libAlign );
458 free( ip );
459
460 op = alloc( dim, 0xdeadbeefN`fill );
461 ip = alloc( dim, op`realloc, align`align, FillT`fill );
462 test_base( ip, size, align );
463 test_fill( ip, 0, dim, 0xdeadbeefN );
464 test_use( ip, size / elemSize );
465 free( ip );
466
467 op = alloc( dim, 0xdeadbeefN`fill );
468 ip = alloc( dim / 4, op`realloc, align`align, FillT`fill );
469 test_base( ip, size / 4, align );
470 test_fill( ip, 0, dim / 4, 0xdeadbeefN );
471 test_use( ip, size / 4 / elemSize );
472 free( ip );
473
474 op = alloc( dim, 0xdeadbeefN`fill );
475 ip = alloc( dim * 4, op`realloc, align`align, FillT`fill );
476 test_base( ip, size * 4, align );
477 test_fill( ip, 0, dim, 0xdeadbeefN );
478 test_fill( ip, dim, dim * 4, FillT );
479 test_use( ip, size * 4 / elemSize );
480 free( ip );
481
482 op = alloc( dim, 0xdeadbeefN`fill );
483 ip = alloc( 0, op`realloc, align`align, FillT`fill );
484 test_base( ip, 0, libAlign );
485 free( ip );
486
487 ip = alloc( dim, 0p`realloc, align`align, FillT`fill );
488 test_base( ip, size, align );
489 test_fill( ip, 0, dim, FillT );
490 test_use( ip, size / elemSize );
491 free( ip );
492
493 ip = alloc( 0, 0p`realloc, align`align, FillT`fill );
494 test_base( ip, 0, libAlign );
495 free( ip );
496
497 if ( tests_failed == 0 ) sout | "PASSED alloc tests" | nl | nl;
498 else sout | "failed alloc tests :" | tests_failed | tests_total | nl | nl;
499
500 // testing alloc (aligned struct)
501
502 elemSize = sizeof(T1);
503 size = dim * elemSize;
504 tests_total = 0;
505 tests_failed = 0;
506
507 t1p = alloc();
508 test_base( t1p, elemSize, tAlign );
509 test_use( t1p, elemSize / elemSize );
510 free( t1p );
511
512 t1p = alloc( dim );
513 test_base( t1p, size, tAlign );
514 test_use( t1p, size / elemSize );
515 free( t1p );
516
517 t1p = alloc( 0 );
518 test_base( t1p, 0, libAlign );
519 free( t1p );
520
521 dp = alloc( dim );
522 t1p = alloc( dp`resize );
523 test_base( t1p, elemSize, tAlign );
524 test_use( t1p, elemSize / elemSize );
525 free( t1p );
526
527 t1p = alloc( 0p`resize );
528 test_base( t1p, elemSize, tAlign );
529 test_use( t1p, elemSize / elemSize );
530 free( t1p );
531
532 dp = alloc( dim );
533 t1p = alloc( dim, dp`resize );
534 test_base( t1p, size, tAlign );
535 test_use( t1p, size / elemSize );
536 free( t1p );
537
538 dp = alloc( dim );
539 t1p = alloc( 0, dp`resize );
540 test_base( t1p, 0, libAlign );
541 free( t1p );
542
543 t1p = alloc( dim, 0p`resize );
544 test_base( t1p, size, tAlign );
545 test_use( t1p, size / elemSize );
546 free( t1p );
547
548 t1p = alloc( 0, 0p`resize );
549 test_base( t1p, 0, libAlign );
550 free( t1p );
551
552 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
553 t1p = alloc( dim, t1op`realloc );
554 test_base( t1p, size, tAlign );
555 test_fill( t1p, 0, dim, (T1){0xdeadbeef});
556 test_use( t1p, size / elemSize );
557 free( t1p );
558
559 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
560 t1p = alloc( 0, t1op`realloc );
561 test_base( t1p, 0, libAlign );
562 free( t1p );
563
564 t1p = alloc( dim, 0p`realloc );
565 test_base( t1p, size, tAlign );
566 test_use( t1p, size / elemSize );
567 free( t1p );
568
569 t1p = alloc( 0, 0p`realloc );
570 test_base( t1p, 0, libAlign );
571 free( t1p );
572
573 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
574 t1p = alloc( dim, t1op`resize );
575 test_base( t1p, size, tAlign );
576 test_use( t1p, size / elemSize );
577 free( t1p );
578
579 t1p = alloc( FillC`fill );
580 test_base( t1p, elemSize, tAlign );
581 test_fill( t1p, 0, elemSize, FillC );
582 test_use( t1p, elemSize / elemSize );
583 free( t1p );
584
585 t1p = alloc( FillT1`fill );
586 test_base( t1p, elemSize, tAlign );
587 test_fill( t1p, 0, 1, FillT1);
588 test_use( t1p, elemSize / elemSize );
589 free( t1p );
590
591 t1p = alloc( dim, FillC`fill );
592 test_base( t1p, size, tAlign );
593 test_fill( t1p, 0, size, FillC );
594 test_use( t1p, size / elemSize );
595 free( t1p );
596
597 t1p = alloc( 0, FillC`fill );
598 test_base( t1p, 0, libAlign );
599 free( t1p );
600
601 t1p = alloc( dim, FillT1`fill );
602 test_base( t1p, size, tAlign );
603 test_fill( t1p, 0, dim, FillT1);
604 test_use( t1p, size / elemSize );
605 free( t1p );
606
607 t1p = alloc( 0, FillT1`fill );
608 test_base( t1p, 0, libAlign );
609 free( t1p );
610
611 t1p = alloc( dim, [FillT1A, dim / 4]`fill );
612 test_base( t1p, size, tAlign );
613 test_fill( t1p, 0, size/4, FillT1A );
614 test_use( t1p, size / elemSize );
615 free( t1p );
616
617 t1p = alloc( 0, [FillT1A, dim / 4]`fill );
618 test_base( t1p, 0, libAlign );
619 free( t1p );
620
621 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
622 t1p = alloc( dim, t1op`realloc, FillC`fill );
623 test_base( t1p, size, tAlign );
624 test_fill( t1p, 0, dim, (T1){0xdeadbeef});
625 test_use( t1p, size / elemSize );
626 free( t1p );
627
628 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
629 t1p = alloc( dim / 4, t1op`realloc, FillC`fill );
630 test_base( t1p, size / 4, tAlign );
631 test_fill( t1p, 0, dim / 4, (T1){0xdeadbeef});
632 test_use( t1p, size / 4 / elemSize );
633 free( t1p );
634
635 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
636 t1p = alloc( dim * 4, t1op`realloc, FillC`fill );
637 test_base( t1p, size * 4, tAlign );
638 test_fill( t1p, 0, dim, (T1){0xdeadbeef});
639 test_fill( t1p, size, size * 4, FillC );
640 test_use( t1p, size * 4 / elemSize );
641 free( t1p );
642
643 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
644 t1p = alloc( 0, t1op`realloc, FillC`fill );
645 test_base( t1p, 0, libAlign );
646 free( t1p );
647
648 t1p = alloc( dim, 0p`realloc, FillC`fill );
649 test_base( t1p, size, tAlign );
650 test_fill( t1p, 0, size, FillC );
651 test_use( t1p, size / elemSize );
652 free( t1p );
653
654 t1p = alloc( 0, 0p`realloc, FillC`fill );
655 test_base( t1p, 0, libAlign );
656 free( t1p );
657
658 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
659 t1p = alloc( dim, t1op`realloc, FillT1`fill );
660 test_base( t1p, size, tAlign );
661 test_fill( t1p, 0, dim, (T1){0xdeadbeef});
662 test_use( t1p, size / elemSize );
663 free( t1p );
664
665 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
666 t1p = alloc( dim / 4, t1op`realloc, FillT1`fill );
667 test_base( t1p, size / 4, tAlign );
668 test_fill( t1p, 0, dim / 4, (T1){0xdeadbeef});
669 test_use( t1p, size / 4 / elemSize );
670 free( t1p );
671
672 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
673 t1p = alloc( dim * 4, t1op`realloc, FillT1`fill );
674 test_base( t1p, size * 4, tAlign );
675 test_fill( t1p, 0, dim, (T1){0xdeadbeef});
676 test_fill( t1p, dim, dim * 4, FillT1);
677 test_use( t1p, size * 4 / elemSize );
678 free( t1p );
679
680 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
681 t1p = alloc( 0, t1op`realloc, FillT1`fill );
682 test_base( t1p, 0, libAlign );
683 free( t1p );
684
685 t1p = alloc( dim, 0p`realloc, FillT1`fill );
686 test_base( t1p, size, tAlign );
687 test_fill( t1p, 0, dim, FillT1);
688 test_use( t1p, size / elemSize );
689 free( t1p );
690
691 t1p = alloc( 0, 0p`realloc, FillT1`fill );
692 test_base( t1p, 0, libAlign );
693 free( t1p );
694
695 t1p = alloc( align`align );
696 test_base( t1p, elemSize, align );
697 test_use( t1p, elemSize / elemSize );
698 free( t1p );
699
700 t1p = alloc( dim, align`align );
701 test_base( t1p, size, align );
702 test_use( t1p, size / elemSize );
703 free( t1p );
704
705 t1p = alloc( 0, align`align );
706 test_base( t1p, 0, libAlign );
707 free( t1p );
708
709 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
710 t1p = alloc( t1op`realloc, align`align );
711 test_base( t1p, elemSize, align );
712 test_fill( t1p, 0, 1, (T1){0xdeadbeef});
713 test_use( t1p, elemSize / elemSize );
714 free( t1p );
715
716 t1p = alloc( 0p`realloc, align`align );
717 test_base( t1p, elemSize, align );
718 test_use( t1p, elemSize / elemSize );
719 free( t1p );
720
721 dp = alloc( dim );
722 t1p = alloc( dp`resize, align`align );
723 test_base( t1p, elemSize, align );
724 test_use( t1p, elemSize / elemSize );
725 free( t1p );
726
727 t1p = alloc( 0p`resize, align`align );
728 test_base( t1p, elemSize, align );
729 test_use( t1p, elemSize / elemSize );
730 free( t1p );
731
732 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
733 t1p = alloc( dim, t1op`realloc, align`align );
734 test_base( t1p, size, align );
735 test_fill( t1p, 0, dim, (T1){0xdeadbeef});
736 test_use( t1p, size / elemSize );
737 free( t1p );
738
739 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
740 t1p = alloc( 0, t1op`realloc, align`align );
741 test_base( t1p, 0, libAlign );
742 free( t1p );
743
744 t1p = alloc( dim, 0p`realloc, align`align );
745 test_base( t1p, size, align );
746 test_use( t1p, size / elemSize );
747 free( t1p );
748
749 t1p = alloc( 0, 0p`realloc, align`align );
750 test_base( t1p, 0, libAlign );
751 free( t1p );
752
753 t1p = alloc( align`align, FillC`fill );
754 test_base( t1p, elemSize, align );
755 test_fill( t1p, 0, elemSize, FillC );
756 test_use( t1p, elemSize / elemSize );
757 free( t1p );
758
759 t1p = alloc( align`align, FillT1`fill );
760 test_base( t1p, elemSize, align );
761 test_fill( t1p, 0, 1, FillT1);
762 test_use( t1p, elemSize / elemSize );
763 free( t1p );
764
765 t1p = alloc( dim, align`align, FillC`fill );
766 test_base( t1p, size, align );
767 test_fill( t1p, 0, size, FillC );
768 test_use( t1p, size / elemSize );
769 free( t1p );
770
771 t1p = alloc( 0, align`align, FillC`fill );
772 test_base( t1p, 0, libAlign );
773 free( t1p );
774
775 t1p = alloc( dim, align`align, FillT1`fill );
776 test_base( t1p, size, align );
777 test_fill( t1p, 0, dim, FillT1);
778 test_use( t1p, size / elemSize );
779 free( t1p );
780
781 t1p = alloc( 0, align`align, FillT1`fill );
782 test_base( t1p, 0, libAlign );
783 free( t1p );
784
785 t1p = alloc( dim, align`align, [FillT1A, dim / 4]`fill );
786 test_base( t1p, size, align );
787 test_fill( t1p, 0, size/4, FillT1A );
788 test_use( t1p, size / elemSize );
789 free( t1p );
790
791 t1p = alloc( 0, align`align, [FillT1A, dim / 4]`fill );
792 test_base( t1p, 0, libAlign );
793 free( t1p );
794
795 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
796 t1p = alloc( dim, t1op`realloc, align`align, FillC`fill );
797 test_base( t1p, size, align );
798 test_fill( t1p, 0, dim, (T1){0xdeadbeef});
799 test_use( t1p, size / elemSize );
800 free( t1p );
801
802 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
803 t1p = alloc( dim / 4, t1op`realloc, align`align, FillC`fill );
804 test_base( t1p, size / 4, align );
805 test_fill( t1p, 0, dim / 4, (T1){0xdeadbeef});
806 test_use( t1p, size / 4 / elemSize );
807 free( t1p );
808
809 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
810 t1p = alloc( dim * 4, t1op`realloc, align`align, FillC`fill );
811 test_base( t1p, size * 4, align );
812 test_fill( t1p, 0, dim, (T1){0xdeadbeef});
813 test_fill( t1p, size, size * 4, FillC );
814 test_use( t1p, size * 4 / elemSize );
815 free( t1p );
816
817 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
818 t1p = alloc( 0, t1op`realloc, align`align, FillC`fill );
819 test_base( t1p, 0, libAlign );
820 free( t1p );
821
822 t1p = alloc( dim, 0p`realloc, align`align, FillC`fill );
823 test_base( t1p, size, align );
824 test_fill( t1p, 0, size, FillC );
825 test_use( t1p, size / elemSize );
826 free( t1p );
827
828 t1p = alloc( 0, 0p`realloc, align`align, FillC`fill );
829 test_base( t1p, 0, libAlign );
830 free( t1p );
831
832 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
833 t1p = alloc( dim, t1op`realloc, align`align, FillT1`fill );
834 test_base( t1p, size, align );
835 test_fill( t1p, 0, dim, (T1){0xdeadbeef});
836 test_use( t1p, size / elemSize );
837 free( t1p );
838
839 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
840 t1p = alloc( dim / 4, t1op`realloc, align`align, FillT1`fill );
841 test_base( t1p, size / 4, align );
842 test_fill( t1p, 0, dim / 4, (T1){0xdeadbeef});
843 test_use( t1p, size / 4 / elemSize );
844 free( t1p );
845
846 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
847 t1p = alloc( dim * 4, t1op`realloc, align`align, FillT1`fill );
848 test_base( t1p, size * 4, align );
849 test_fill( t1p, 0, dim, (T1){0xdeadbeef});
850 test_fill( t1p, dim, dim * 4, FillT1);
851 test_use( t1p, size * 4 / elemSize );
852 free( t1p );
853
854 t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
855 t1p = alloc( 0, t1op`realloc, align`align, FillT1`fill );
856 test_base( t1p, 0, libAlign );
857 free( t1p );
858
859 t1p = alloc( dim, 0p`realloc, align`align, FillT1`fill );
860 test_base( t1p, size, align );
861 test_fill( t1p, 0, dim, FillT1);
862 test_use( t1p, size / elemSize );
863 free( t1p );
864
865 t1p = alloc( 0, 0p`realloc, align`align, FillT1`fill );
866 test_base( t1p, 0, libAlign );
867 free( t1p );
868
869 if ( tests_failed == 0) sout | "PASSED alloc tests (aligned struct)" | nl | nl;
870 else sout | "failed alloc tests ( aligned struct ) :" | tests_failed | tests_total | nl;
871
872 sout | "(if applicable) alignment error below indicates memory trashing caused by test_use." | nl | nl;
873 free( FillA );
874 free( FillT1A );
875} // main
Note: See TracBrowser for help on using the repository browser.