source: tests/alloc2.cfa @ 8c91088

ADTast-experimental
Last change on this file since 8c91088 was 1988572, checked in by Peter A. Buhr <pabuhr@…>, 20 months ago

formatting, removed unnecessary casts

  • Property mode set to 100644
File size: 23.6 KB
Line 
1#include <malloc.h>                                                                             // malloc_usable_size
2#include <stdint.h>                                                                             // uintptr_t
3#include <stdlib.hfa>                                                                   // access C malloc, realloc
4#include <string.h>                                                                             // memcmp
5
6int last_failed;
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//      printf( "DEBUG: starting test %d\n", 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                printf( "failed test %3d: %4zu %4zu but got %4zu ( %3zu ) %4zu\n", tests_total, size, align, malloc_size( ip ), malloc_usable_size( ip ), malloc_alignment( ip ) );
19                tests_failed += 1;
20        } // if
21//      printf( "DEBUG: done test %d\n", tests_total);
22}
23
24void test_fill( void * ip_, size_t start, size_t end, char fill ) {
25        tests_total += 1;
26//      printf( "DEBUG: starting test %d\n", 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                printf( "failed test %3d: fill C\n", tests_total );
32                tests_failed += 1;
33        } // if
34//      printf( "DEBUG: done test %d\n", tests_total );
35}
36
37void test_fill( void * ip_, size_t start, size_t end, int fill ) {
38        tests_total += 1;
39//      printf( "DEBUG: starting test %d\n", 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                printf( "failed test %3d: fill int\n", tests_total );
45                tests_failed += 1;
46        } // if
47//      printf( "DEBUG: done test %d\n", tests_total );
48}
49
50void test_fill( void * ip_, size_t start, size_t end, int * fill ) {
51        tests_total += 1;
52//      printf( "DEBUG: starting test %d\n", tests_total );
53        bool passed = memcmp((void*)((uintptr_t )ip_ + start ), (void*)fill, end ) == 0;
54        if ( ! passed ) {
55                printf( "failed test %3d: fill int A\n", tests_total );
56                tests_failed += 1;
57        } // if
58//      printf( "DEBUG: done test %d\n", tests_total );
59}
60
61void test_fill( void * ip_, size_t start, size_t end, T1 fill ) {
62        tests_total += 1;
63//      printf( "DEBUG: starting test %d\n", 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                printf( "failed test %3d: fill T1\n", tests_total );
69                tests_failed += 1;
70        } // if
71//      printf( "DEBUG: done test %d\n", tests_total );
72}
73
74void test_fill( void * ip_, size_t start, size_t end, T1 * fill ) {
75        tests_total += 1;
76//      printf( "DEBUG: starting test %d\n", tests_total );
77        bool passed = memcmp( (void*)((uintptr_t )ip_ + start ), (void*)fill, end ) == 0;
78        if ( ! passed ) {
79                printf( "failed test %3d: fill T1 A\n", tests_total );
80                tests_failed += 1;
81        } // if
82//      printf( "DEBUG: done test %d\n", tests_total );
83}
84
85void test_use( int * ip, size_t dim ) {
86        tests_total += 1;
87//      printf( "DEBUG: starting test %d\n", 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                printf( "failed test %3d: use int\n", tests_total );
93                tests_failed += 1;
94        } // if
95//      printf( "DEBUG: done test %d\n", tests_total );
96}
97
98void test_use( T1 * ip, size_t dim ) {
99        tests_total += 1;
100//      printf( "DEBUG: starting test %d\n", 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                printf( "failed test %3d: use T1\n", tests_total );
106                tests_failed += 1;
107        } // if
108//      printf( "DEBUG: done test %d\n", 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        T1 FillT1 = { FillT };
120        T1 * FillT1A = (T1 *)(void *) malloc( (dim / 4) * sizeof(T1) );
121        for ( i; 0 ~ (dim / 4) ) FillT1A[i] = FillT1;
122
123        int * ip;
124        int * op;
125        double * dp;
126        T1 * t1p;
127        T1 * t1op;
128
129        // testing alloc
130
131        last_failed = -1;
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( ((double *)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 ) printf( "PASSED alloc tests\n\n" );
498        else printf( "failed alloc tests : %d/%d\n\n", tests_failed, tests_total );
499
500        // testing alloc ( aligned struct )
501
502        elemSize = sizeof(T1);
503        size = dim * elemSize;
504        last_failed = -1;
505        tests_total = 0;
506        tests_failed = 0;
507
508        t1p = alloc();
509        test_base( t1p, elemSize, tAlign );
510        test_use( t1p, elemSize / elemSize );
511        free( t1p );
512
513        t1p = alloc( dim );
514        test_base( t1p, size, tAlign );
515        test_use( t1p, size / elemSize );
516        free( t1p );
517
518        t1p = alloc( 0 );
519        test_base( t1p, 0, libAlign );
520        free( t1p );
521
522        dp = alloc( dim );
523        t1p = alloc( dp`resize );
524        test_base( t1p, elemSize, tAlign );
525        test_use( t1p, elemSize / elemSize );
526        free( t1p );
527
528        t1p = alloc( 0p`resize );
529        test_base( t1p, elemSize, tAlign );
530        test_use( t1p, elemSize / elemSize );
531        free( t1p );
532
533        dp = alloc( dim );
534        t1p = alloc( dim, dp`resize );
535        test_base( t1p, size, tAlign );
536        test_use( t1p, size / elemSize );
537        free( t1p );
538
539        dp = alloc( dim );
540        t1p = alloc( 0, dp`resize );
541        test_base( t1p, 0, libAlign );
542        free( t1p );
543
544        t1p = alloc( dim, 0p`resize );
545        test_base( t1p, size, tAlign );
546        test_use( t1p, size / elemSize );
547        free( t1p );
548
549        t1p = alloc( 0, 0p`resize );
550        test_base( t1p, 0, libAlign );
551        free( t1p );
552
553        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
554        t1p = alloc( dim, t1op`realloc );
555        test_base( t1p, size, tAlign );
556        test_fill( t1p, 0, dim, (T1){0xdeadbeef});
557        test_use( t1p, size / elemSize );
558        free( t1p );
559
560        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
561        t1p = alloc( 0, t1op`realloc );
562        test_base( t1p, 0, libAlign );
563        free( t1p );
564
565        t1p = alloc( dim, 0p`realloc );
566        test_base( t1p, size, tAlign );
567        test_use( t1p, size / elemSize );
568        free( t1p );
569
570        t1p = alloc( 0, 0p`realloc );
571        test_base( t1p, 0, libAlign );
572        free( t1p );
573
574        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
575        t1p = alloc( dim, t1op`resize );
576        test_base( t1p, size, tAlign );
577        test_use( t1p, size / elemSize );
578        free( t1p );
579
580        t1p = alloc( FillC`fill );
581        test_base( t1p, elemSize, tAlign );
582        test_fill( t1p, 0, elemSize, FillC );
583        test_use( t1p, elemSize / elemSize );
584        free( t1p );
585
586        t1p = alloc( FillT1`fill );
587        test_base( t1p, elemSize, tAlign );
588        test_fill( t1p, 0, 1, FillT1);
589        test_use( t1p, elemSize / elemSize );
590        free( t1p );
591
592        t1p = alloc( dim, FillC`fill );
593        test_base( t1p, size, tAlign );
594        test_fill( t1p, 0, size, FillC );
595        test_use( t1p, size / elemSize );
596        free( t1p );
597
598        t1p = alloc( 0, FillC`fill );
599        test_base( t1p, 0, libAlign );
600        free( t1p );
601
602        t1p = alloc( dim, FillT1`fill );
603        test_base( t1p, size, tAlign );
604        test_fill( t1p, 0, dim, FillT1);
605        test_use( t1p, size / elemSize );
606        free( t1p );
607
608        t1p = alloc( 0, FillT1`fill );
609        test_base( t1p, 0, libAlign );
610        free( t1p );
611
612        t1p = alloc( dim, [FillT1A, dim / 4]`fill );
613        test_base( t1p, size, tAlign );
614        test_fill( t1p, 0, size/4, FillT1A );
615        test_use( t1p, size / elemSize );
616        free( t1p );
617
618        t1p = alloc( 0, [FillT1A, dim / 4]`fill );
619        test_base( t1p, 0, libAlign );
620        free( t1p );
621
622        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
623        t1p = alloc( dim, t1op`realloc, FillC`fill );
624        test_base( t1p, size, tAlign );
625        test_fill( t1p, 0, dim, (T1){0xdeadbeef});
626        test_use( t1p, size / elemSize );
627        free( t1p );
628
629        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
630        t1p = alloc( dim / 4, t1op`realloc, FillC`fill );
631        test_base( t1p, size / 4, tAlign );
632        test_fill( t1p, 0, dim / 4, (T1){0xdeadbeef});
633        test_use( t1p, size / 4 / elemSize );
634        free( t1p );
635
636        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
637        t1p = alloc( dim * 4, t1op`realloc, FillC`fill );
638        test_base( t1p, size * 4, tAlign );
639        test_fill( t1p, 0, dim, (T1){0xdeadbeef});
640        test_fill( t1p, size, size * 4, FillC );
641        test_use( t1p, size * 4 / elemSize );
642        free( t1p );
643
644        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
645        t1p = alloc( 0, t1op`realloc, FillC`fill );
646        test_base( t1p, 0, libAlign );
647        free( t1p );
648
649        t1p = alloc( dim, 0p`realloc, FillC`fill );
650        test_base( t1p, size, tAlign );
651        test_fill( t1p, 0, size, FillC );
652        test_use( t1p, size / elemSize );
653        free( t1p );
654
655        t1p = alloc( 0, 0p`realloc, FillC`fill );
656        test_base( t1p, 0, libAlign );
657        free( t1p );
658
659        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
660        t1p = alloc( dim, t1op`realloc, FillT1`fill );
661        test_base( t1p, size, tAlign );
662        test_fill( t1p, 0, dim, (T1){0xdeadbeef});
663        test_use( t1p, size / elemSize );
664        free( t1p );
665
666        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
667        t1p = alloc( dim / 4, t1op`realloc, FillT1`fill );
668        test_base( t1p, size / 4, tAlign );
669        test_fill( t1p, 0, dim / 4, (T1){0xdeadbeef});
670        test_use( t1p, size / 4 / elemSize );
671        free( t1p );
672
673        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
674        t1p = alloc( dim * 4, t1op`realloc, FillT1`fill );
675        test_base( t1p, size * 4, tAlign );
676        test_fill( t1p, 0, dim, (T1){0xdeadbeef});
677        test_fill( t1p, dim, dim * 4, FillT1);
678        test_use( t1p, size * 4 / elemSize );
679        free( t1p );
680
681        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
682        t1p = alloc( 0, t1op`realloc, FillT1`fill );
683        test_base( t1p, 0, libAlign );
684        free( t1p );
685
686        t1p = alloc( dim, 0p`realloc, FillT1`fill );
687        test_base( t1p, size, tAlign );
688        test_fill( t1p, 0, dim, FillT1);
689        test_use( t1p, size / elemSize );
690        free( t1p );
691
692        t1p = alloc( 0, 0p`realloc, FillT1`fill );
693        test_base( t1p, 0, libAlign );
694        free( t1p );
695
696        t1p = alloc( align`align );
697        test_base( t1p, elemSize, align );
698        test_use( t1p, elemSize / elemSize );
699        free( t1p );
700
701        t1p = alloc( dim, align`align );
702        test_base( t1p, size, align );
703        test_use( t1p, size / elemSize );
704        free( t1p );
705
706        t1p = alloc( 0, align`align );
707        test_base( t1p, 0, libAlign );
708        free( t1p );
709
710        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
711        t1p = alloc( t1op`realloc, align`align );
712        test_base( t1p, elemSize, align );
713        test_fill( t1p, 0, 1, (T1){0xdeadbeef});
714        test_use( t1p, elemSize / elemSize );
715        free( t1p );
716
717        t1p = alloc( 0p`realloc, align`align );
718        test_base( t1p, elemSize, align );
719        test_use( t1p, elemSize / elemSize );
720        free( t1p );
721
722        dp = alloc( dim );
723        t1p = alloc( dp`resize, align`align );
724        test_base( t1p, elemSize, align );
725        test_use( t1p, elemSize / elemSize );
726        free( t1p );
727
728        t1p = alloc( 0p`resize, align`align );
729        test_base( t1p, elemSize, align );
730        test_use( t1p, elemSize / elemSize );
731        free( t1p );
732
733        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
734        t1p = alloc( dim, t1op`realloc, align`align );
735        test_base( t1p, size, align );
736        test_fill( t1p, 0, dim, (T1){0xdeadbeef});
737        test_use( t1p, size / elemSize );
738        free( t1p );
739
740        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
741        t1p = alloc( 0, t1op`realloc, align`align );
742        test_base( t1p, 0, libAlign );
743        free( t1p );
744
745        t1p = alloc( dim, 0p`realloc, align`align );
746        test_base( t1p, size, align );
747        test_use( t1p, size / elemSize );
748        free( t1p );
749
750        t1p = alloc( 0, 0p`realloc, align`align );
751        test_base( t1p, 0, libAlign );
752        free( t1p );
753
754        t1p = alloc( align`align, FillC`fill );
755        test_base( t1p, elemSize, align );
756        test_fill( t1p, 0, elemSize, FillC );
757        test_use( t1p, elemSize / elemSize );
758        free( t1p );
759
760        t1p = alloc( align`align, FillT1`fill );
761        test_base( t1p, elemSize, align );
762        test_fill( t1p, 0, 1, FillT1);
763        test_use( t1p, elemSize / elemSize );
764        free( t1p );
765
766        t1p = alloc( dim, align`align, FillC`fill );
767        test_base( t1p, size, align );
768        test_fill( t1p, 0, size, FillC );
769        test_use( t1p, size / elemSize );
770        free( t1p );
771
772        t1p = alloc( 0, align`align, FillC`fill );
773        test_base( t1p, 0, libAlign );
774        free( t1p );
775
776        t1p = alloc( dim, align`align, FillT1`fill );
777        test_base( t1p, size, align );
778        test_fill( t1p, 0, dim, FillT1);
779        test_use( t1p, size / elemSize );
780        free( t1p );
781
782        t1p = alloc( 0, align`align, FillT1`fill );
783        test_base( t1p, 0, libAlign );
784        free( t1p );
785
786        t1p = alloc( dim, align`align, [FillT1A, dim / 4]`fill );
787        test_base( t1p, size, align );
788        test_fill( t1p, 0, size/4, FillT1A );
789        test_use( t1p, size / elemSize );
790        free( t1p );
791
792        t1p = alloc( 0, align`align, [FillT1A, dim / 4]`fill );
793        test_base( t1p, 0, libAlign );
794        free( t1p );
795
796        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
797        t1p = alloc( dim, t1op`realloc, align`align, FillC`fill );
798        test_base( t1p, size, align );
799        test_fill( t1p, 0, dim, (T1){0xdeadbeef});
800        test_use( t1p, size / elemSize );
801        free( t1p );
802
803        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
804        t1p = alloc( dim / 4, t1op`realloc, align`align, FillC`fill );
805        test_base( t1p, size / 4, align );
806        test_fill( t1p, 0, dim / 4, (T1){0xdeadbeef});
807        test_use( t1p, size / 4 / elemSize );
808        free( t1p );
809
810        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
811        t1p = alloc( dim * 4, t1op`realloc, align`align, FillC`fill );
812        test_base( t1p, size * 4, align );
813        test_fill( t1p, 0, dim, (T1){0xdeadbeef});
814        test_fill( t1p, size, size * 4, FillC );
815        test_use( t1p, size * 4 / elemSize );
816        free( t1p );
817
818        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
819        t1p = alloc( 0, t1op`realloc, align`align, FillC`fill );
820        test_base( t1p, 0, libAlign );
821        free( t1p );
822
823        t1p = alloc( dim, 0p`realloc, align`align, FillC`fill );
824        test_base( t1p, size, align );
825        test_fill( t1p, 0, size, FillC );
826        test_use( t1p, size / elemSize );
827        free( t1p );
828
829        t1p = alloc( 0, 0p`realloc, align`align, FillC`fill );
830        test_base( t1p, 0, libAlign );
831        free( t1p );
832
833        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
834        t1p = alloc( dim, t1op`realloc, align`align, FillT1`fill );
835        test_base( t1p, size, align );
836        test_fill( t1p, 0, dim, (T1){0xdeadbeef});
837        test_use( t1p, size / elemSize );
838        free( t1p );
839
840        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
841        t1p = alloc( dim / 4, t1op`realloc, align`align, FillT1`fill );
842        test_base( t1p, size / 4, align );
843        test_fill( t1p, 0, dim / 4, (T1){0xdeadbeef});
844        test_use( t1p, size / 4 / elemSize );
845        free( t1p );
846
847        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
848        t1p = alloc( dim * 4, t1op`realloc, align`align, FillT1`fill );
849        test_base( t1p, size * 4, align );
850        test_fill( t1p, 0, dim, (T1){0xdeadbeef});
851        test_fill( t1p, dim, dim * 4, FillT1);
852        test_use( t1p, size * 4 / elemSize );
853        free( t1p );
854
855        t1op = alloc( dim, ((T1){0xdeadbeef})`fill );
856        t1p = alloc( 0, t1op`realloc, align`align, FillT1`fill );
857        test_base( t1p, 0, libAlign );
858        free( t1p );
859
860        t1p = alloc( dim, 0p`realloc, align`align, FillT1`fill );
861        test_base( t1p, size, align );
862        test_fill( t1p, 0, dim, FillT1);
863        test_use( t1p, size / elemSize );
864        free( t1p );
865
866        t1p = alloc( 0, 0p`realloc, align`align, FillT1`fill );
867        test_base( t1p, 0, libAlign );
868        free( t1p );
869
870        if ( tests_failed == 0) printf( "PASSED alloc tests (aligned struct)\n\n");
871        else printf( "failed alloc tests ( aligned struct ) : %d/%d\n\n", tests_failed, tests_total );
872
873        printf( "(if applicable) alignment error below indicates memory trashing caused by test_use.\n\n");
874        free( FillA );
875        free( FillT1A );
876} // main
Note: See TracBrowser for help on using the repository browser.