Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • tests/heap.cfa

    r5dc5da7 r58e280f4  
    1010// Created On       : Tue Nov  6 17:54:56 2018
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Dec 15 12:11:51 2020
    13 // Update Count     : 79
     12// Last Modified On : Sun Nov 24 12:34:51 2019
     13// Update Count     : 28
    1414//
    1515
     
    2727// }
    2828
    29 size_t default_heap_expansion() {
    30         return 10 * 1024 * 1024;
    31 } // default_heap_expansion
    32 
    33 size_t default_mmap_start() {
    34         return 512 * 1024 + 1;
     29#define __U_DEFAULT_MMAP_START__ (512 * 1024 + 1)
     30size_t default_mmap_start() __attribute__(( weak )) {
     31        return __U_DEFAULT_MMAP_START__;
    3532} // default_mmap_start
    3633
     
    7875                size_t s = (i + 1) * 20;
    7976                char * area = (char *)malloc( s );
     77                if ( area == 0p ) abort( "malloc/free out of memory" );
    8078                area[0] = '\345'; area[s - 1] = '\345';                 // fill first/last
    8179                area[malloc_usable_size( area ) - 1] = '\345';  // fill ultimate byte
     
    8684                size_t s = i + 1;                                                               // +1 to make initialization simpler
    8785                locns[i] = (char *)malloc( s );
     86                if ( locns[i] == 0p ) abort( "malloc/free out of memory" );
    8887                locns[i][0] = '\345'; locns[i][s - 1] = '\345'; // fill first/last
    8988                locns[i][malloc_usable_size( locns[i] ) - 1] = '\345'; // fill ultimate byte
     
    101100                size_t s = i + default_mmap_start();                    // cross over point
    102101                char * area = (char *)malloc( s );
     102                if ( area == 0p ) abort( "malloc/free out of memory" );
    103103                area[0] = '\345'; area[s - 1] = '\345';                 // fill first/last
    104104                area[malloc_usable_size( area ) - 1] = '\345';  // fill ultimate byte
     
    109109                size_t s = i + default_mmap_start();                    // cross over point
    110110                locns[i] = (char *)malloc( s );
     111                if ( locns[i] == 0p ) abort( "malloc/free out of memory" );
    111112                locns[i][0] = '\345'; locns[i][s - 1] = '\345'; // fill first/last
    112113                locns[i][malloc_usable_size( locns[i] ) - 1] = '\345'; // fill ultimate byte
     
    124125                size_t s = (i + 1) * 20;
    125126                char * area = (char *)calloc( 5, s );
     127                if ( area == 0p ) abort( "calloc/free out of memory" );
    126128                if ( area[0] != '\0' || area[s - 1] != '\0' ||
    127                          area[malloc_size( area ) - 1] != '\0' ||
     129                         area[malloc_usable_size( area ) - 1] != '\0' ||
    128130                         ! malloc_zero_fill( area ) ) abort( "calloc/free corrupt storage1" );
    129131                area[0] = '\345'; area[s - 1] = '\345';                 // fill first/last
     
    135137                size_t s = i + 1;
    136138                locns[i] = (char *)calloc( 5, s );
     139                if ( locns[i] == 0p ) abort( "calloc/free out of memory" );
    137140                if ( locns[i][0] != '\0' || locns[i][s - 1] != '\0' ||
    138                          locns[i][malloc_size( locns[i] ) - 1] != '\0' ||
     141                         locns[i][malloc_usable_size( locns[i] ) - 1] != '\0' ||
    139142                         ! malloc_zero_fill( locns[i] ) ) abort( "calloc/free corrupt storage2" );
    140143                locns[i][0] = '\345'; locns[i][s - 1] = '\345'; // fill first/last
     
    153156                size_t s = i + default_mmap_start();                    // cross over point
    154157                char * area = (char *)calloc( 1, s );
     158                if ( area == 0p ) abort( "calloc/free out of memory" );
    155159                if ( area[0] != '\0' || area[s - 1] != '\0' ) abort( "calloc/free corrupt storage4.1" );
    156                 if ( area[malloc_size( area ) - 1] != '\0' ) abort( "calloc/free corrupt storage4.2" );
     160                if ( area[malloc_usable_size( area ) - 1] != '\0' ) abort( "calloc/free corrupt storage4.2" );
    157161                if ( ! malloc_zero_fill( area ) ) abort( "calloc/free corrupt storage4.3" );
    158162                area[0] = '\345'; area[s - 1] = '\345';                 // fill first/last
     
    164168                size_t s = i + default_mmap_start();                    // cross over point
    165169                locns[i] = (char *)calloc( 1, s );
     170                if ( locns[i] == 0p ) abort( "calloc/free out of memory" );
    166171                if ( locns[i][0] != '\0' || locns[i][s - 1] != '\0' ||
    167                          locns[i][malloc_size( locns[i] ) - 1] != '\0' ||
     172                         locns[i][malloc_usable_size( locns[i] ) - 1] != '\0' ||
    168173                         ! malloc_zero_fill( locns[i] ) ) abort( "calloc/free corrupt storage5" );
    169174                locns[i][0] = '\345'; locns[i][s - 1] = '\345'; // fill first/last
     
    183188                for ( s; 1 ~ NoOfAllocs ) {                                             // allocation of size 0 can return null
    184189                        char * area = (char *)memalign( a, s );
     190                        if ( area == 0p ) abort( "memalign/free out of memory" );
    185191                        //sout | i | area;
    186192                        if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment
     
    200206                        size_t s = i + default_mmap_start();            // cross over point
    201207                        char * area = (char *)memalign( a, s );
     208                        if ( area == 0p ) abort( "memalign/free out of memory" );
    202209                        //sout | i | area;
    203210                        if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment
     
    210217        } // for
    211218
    212         // check malloc/resize/free (sbrk)
    213 
    214         for ( i; 2 ~ NoOfAllocs ~ 12 ) {
    215                 // initial N byte allocation
    216                 char * area = (char *)malloc( i );
    217                 area[0] = '\345'; area[i - 1] = '\345';                 // fill first/penultimate byte
    218 
    219                 // Do not start this loop index at 0 because resize of 0 bytes frees the storage.
    220                 int prev = i;
    221                 for ( s; i ~ 256 * 1024 ~ 26 ) {                                // start at initial memory request
    222                         if ( area[0] != '\345' || area[prev - 1] != '\345' ) abort( "malloc/resize/free corrupt storage" );
    223                         area = (char *)resize( area, s );                       // attempt to reuse storage
    224                         area[0] = area[s - 1] = '\345';                         // fill last byte
    225                         prev = s;
    226                 } // for
    227                 free( area );
    228         } // for
    229 
    230         // check malloc/resize/free (mmap)
    231 
    232         for ( i; 2 ~ NoOfAllocs ~ 12 ) {
    233                 // initial N byte allocation
    234                 size_t s = i + default_mmap_start();                    // cross over point
    235                 char * area = (char *)malloc( s );
    236                 area[0] = '\345'; area[s - 1] = '\345';                 // fill first/penultimate byte
    237 
    238                 // Do not start this loop index at 0 because resize of 0 bytes frees the storage.
    239                 int prev = s;
    240                 for ( r; s ~ 256 * 1024 ~ 26 ) {                                // start at initial memory request
    241                         if ( area[0] != '\345' || area[prev - 1] != '\345' ) abort( "malloc/resize/free corrupt storage" );
    242                         area = (char *)resize( area, s );                       // attempt to reuse storage
    243                         area[0] = area[r - 1] = '\345';                         // fill last byte
    244                         prev = r;
    245                 } // for
    246                 free( area );
    247         } // for
    248 
    249         // check malloc/realloc/free (sbrk)
    250 
    251         for ( i; 2 ~ NoOfAllocs ~ 12 ) {
    252                 // initial N byte allocation
    253                 char * area = (char *)malloc( i );
    254                 area[0] = '\345'; area[i - 1] = '\345';                 // fill first/penultimate byte
    255 
    256                 // Do not start this loop index at 0 because realloc of 0 bytes frees the storage.
    257                 int prev = i;
    258                 for ( s; i ~ 256 * 1024 ~ 26 ) {                                // start at initial memory request
    259                         if ( area[0] != '\345' || area[prev - 1] != '\345' ) abort( "malloc/realloc/free corrupt storage" );
    260                         area = (char *)realloc( area, s );                      // attempt to reuse storage
    261                         area[s - 1] = '\345';                                           // fill last byte
    262                         prev = s;
    263                 } // for
    264                 free( area );
    265         } // for
    266 
    267         // check malloc/realloc/free (mmap)
    268 
    269         for ( i; 2 ~ NoOfAllocs ~ 12 ) {
    270                 // initial N byte allocation
    271                 size_t s = i + default_mmap_start();                    // cross over point
    272                 char * area = (char *)malloc( s );
    273                 area[0] = '\345'; area[s - 1] = '\345';                 // fill first/penultimate byte
    274 
    275                 // Do not start this loop index at 0 because realloc of 0 bytes frees the storage.
    276                 int prev = s;
    277                 for ( r; s ~ 256 * 1024 ~ 26 ) {                                // start at initial memory request
    278                         if ( area[0] != '\345' || area[prev - 1] != '\345' ) abort( "malloc/realloc/free corrupt storage" );
    279                         area = (char *)realloc( area, s );                      // attempt to reuse storage
    280                         area[r - 1] = '\345';                                           // fill last byte
    281                         prev = r;
    282                 } // for
    283                 free( area );
    284         } // for
    285 
    286219        // check calloc/realloc/free (sbrk)
    287220
     
    289222                // initial N byte allocation
    290223                char * area = (char *)calloc( 5, i );
     224                if ( area == 0p ) abort( "calloc/realloc/free out of memory" );
    291225                if ( area[0] != '\0' || area[i - 1] != '\0' ||
    292                          area[malloc_size( area ) - 1] != '\0' ||
     226                         area[malloc_usable_size( area ) - 1] != '\0' ||
    293227                         ! malloc_zero_fill( area ) ) abort( "calloc/realloc/free corrupt storage1" );
    294228
     
    296230                for ( s; i ~ 256 * 1024 ~ 26 ) {                                // start at initial memory request
    297231                        area = (char *)realloc( area, s );                      // attempt to reuse storage
     232                        if ( area == 0p ) abort( "calloc/realloc/free out of memory" );
    298233                        if ( area[0] != '\0' || area[s - 1] != '\0' ||
    299                                  area[malloc_size( area ) - 1] != '\0' ||
     234                                 area[malloc_usable_size( area ) - 1] != '\0' ||
    300235                                 ! malloc_zero_fill( area ) ) abort( "calloc/realloc/free corrupt storage2" );
    301236                } // for
     
    309244                size_t s = i + default_mmap_start();                    // cross over point
    310245                char * area = (char *)calloc( 1, s );
     246                if ( area == 0p ) abort( "calloc/realloc/free out of memory" );
    311247                if ( area[0] != '\0' || area[s - 1] != '\0' ||
    312                          area[malloc_size( area ) - 1] != '\0' ||
    313                          ! malloc_zero_fill( area ) ) abort( "calloc/realloc/free corrupt storage3" );
     248                         area[malloc_usable_size( area ) - 1] != '\0' ||
     249                         ! malloc_zero_fill( area ) ) abort( "calloc/realloc/free corrupt storage1" );
    314250
    315251                // Do not start this loop index at 0 because realloc of 0 bytes frees the storage.
    316252                for ( r; i ~ 256 * 1024 ~ 26 ) {                                // start at initial memory request
    317253                        area = (char *)realloc( area, r );                      // attempt to reuse storage
     254                        if ( area == 0p ) abort( "calloc/realloc/free out of memory" );
    318255                        if ( area[0] != '\0' || area[r - 1] != '\0' ||
    319                                  area[malloc_size( area ) - 1] != '\0' ||
    320                                  ! malloc_zero_fill( area ) ) abort( "calloc/realloc/free corrupt storage4" );
     256                                 area[malloc_usable_size( area ) - 1] != '\0' ||
     257                                 ! malloc_zero_fill( area ) ) abort( "calloc/realloc/free corrupt storage2" );
    321258                } // for
    322259                free( area );
     
    329266                // initial N byte allocation
    330267                char * area = (char *)memalign( a, amount );    // aligned N-byte allocation
     268                if ( area == 0p ) abort( "memalign/realloc/free out of memory" ); // no storage ?
    331269                //sout | alignments[a] | area;
    332270                if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment
     
    339277                        if ( area[0] != '\345' || area[s - 2] != '\345' ) abort( "memalign/realloc/free corrupt storage" );
    340278                        area = (char *)realloc( area, s );                      // attempt to reuse storage
     279                        if ( area == 0p ) abort( "memalign/realloc/free out of memory" ); // no storage ?
    341280                        //sout | i | area;
    342281                        if ( (size_t)area % a != 0 ) {                          // check for initial alignment
     
    354293                for ( s; 1 ~ limit ) {                                                  // allocation of size 0 can return null
    355294                        char * area = (char *)cmemalign( a, 1, s );
     295                        if ( area == 0p ) abort( "cmemalign/free out of memory" );
    356296                        //sout | i | area;
    357297                        if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment
     
    359299                        } // if
    360300                        if ( area[0] != '\0' || area[s - 1] != '\0' ||
    361                                  area[malloc_size( area ) - 1] != '\0' ||
     301                                 area[malloc_usable_size( area ) - 1] != '\0' ||
    362302                                 ! malloc_zero_fill( area ) ) abort( "cmemalign/free corrupt storage" );
    363303                        area[0] = '\345'; area[s - 1] = '\345';         // fill first/last byte
     
    372312                // initial N byte allocation
    373313                char * area = (char *)cmemalign( a, 1, amount ); // aligned N-byte allocation
     314                if ( area == 0p ) abort( "cmemalign/realloc/free out of memory" ); // no storage ?
    374315                //sout | alignments[a] | area;
    375316                if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment
     
    377318                } // if
    378319                if ( area[0] != '\0' || area[amount - 1] != '\0' ||
    379                          area[malloc_size( area ) - 1] != '\0' ||
     320                         area[malloc_usable_size( area ) - 1] != '\0' ||
    380321                         ! malloc_zero_fill( area ) ) abort( "cmemalign/realloc/free corrupt storage1" );
    381322                area[0] = '\345'; area[amount - 2] = '\345';    // fill first/penultimate byte
     
    385326                        if ( area[0] != '\345' || area[s - 2] != '\345' ) abort( "cmemalign/realloc/free corrupt storage2" );
    386327                        area = (char *)realloc( area, s );                      // attempt to reuse storage
     328                        if ( area == 0p ) abort( "cmemalign/realloc/free out of memory" ); // no storage ?
    387329                        //sout | i | area;
    388330                        if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment
    389331                                abort( "cmemalign/realloc/free bad alignment %p", area );
    390332                        } // if
    391                         if ( area[0] != '\345' || area[s - 1] != '\0' ||
    392                                  area[malloc_size( area ) - 1] != '\0' ||
     333                        if ( area[s - 1] != '\0' || area[s - 1] != '\0' ||
     334                                 area[malloc_usable_size( area ) - 1] != '\0' ||
    393335                                 ! malloc_zero_fill( area ) ) abort( "cmemalign/realloc/free corrupt storage3" );
    394336                        area[s - 1] = '\345';                                           // fill last byte
     
    397339        } // for
    398340
    399         // check memalign/resize with align/free
     341        // check memalign/realloc with align/free
    400342
    401343        amount = 2;
     
    403345                // initial N byte allocation
    404346                char * area = (char *)memalign( a, amount );    // aligned N-byte allocation
    405                 //sout | alignments[a] | area | endl;
    406                 if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment
    407                         abort( "memalign/resize with align/free bad alignment : memalign(%d,%d) = %p", (int)a, (int)amount, area );
    408                 } // if
    409                 area[0] = '\345'; area[amount - 2] = '\345';    // fill first/penultimate byte
    410 
    411                 // Do not start this loop index at 0 because resize of 0 bytes frees the storage.
    412                 for ( s; amount ~ 256 * 1024 ) {                                // start at initial memory request
    413                         area = (char *)resize( area, a * 2, s );        // attempt to reuse storage
    414                         //sout | i | area | endl;
    415                         if ( (size_t)area % a * 2 != 0 ) {                      // check for initial alignment
    416                                 abort( "memalign/resize with align/free bad alignment %p", area );
    417                         } // if
    418                         area[s - 1] = '\345';                                           // fill last byte
    419                 } // for
    420                 free( area );
    421         } // for
    422 
    423         // check memalign/realloc with align/free
    424 
    425         amount = 2;
    426         for ( a; libAlign() ~= limit ~ a ) {                            // generate powers of 2
    427                 // initial N byte allocation
    428                 char * area = (char *)memalign( a, amount );    // aligned N-byte allocation
     347                if ( area == 0p ) abort( "memalign/realloc with align/free out of memory" ); // no storage ?
    429348                //sout | alignments[a] | area | endl;
    430349                if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment
     
    437356                        if ( area[0] != '\345' || area[s - 2] != '\345' ) abort( "memalign/realloc/free corrupt storage" );
    438357                        area = (char *)realloc( area, a * 2, s );       // attempt to reuse storage
     358                        if ( area == 0p ) abort( "memalign/realloc with align/free out of memory" ); // no storage ?
    439359                        //sout | i | area | endl;
    440360                        if ( (size_t)area % a * 2 != 0 ) {                      // check for initial alignment
     
    451371        for ( size_t a = libAlign() + libAlign(); a <= limit; a += a ) { // generate powers of 2
    452372                // initial N byte allocation
    453                 char * area = (char *)cmemalign( a, 1, amount ); // aligned N-byte allocation
     373                char *area = (char *)cmemalign( a, 1, amount ); // aligned N-byte allocation
     374                if ( area == 0p ) abort( "cmemalign/realloc with align/free out of memory" ); // no storage ?
    454375                //sout | alignments[a] | area | endl;
    455376                if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment
     
    457378                } // if
    458379                if ( area[0] != '\0' || area[amount - 1] != '\0' ||
    459                          area[malloc_size( area ) - 1] != '\0' ||
     380                         area[malloc_usable_size( area ) - 1] != '\0' ||
    460381                         ! malloc_zero_fill( area ) ) abort( "cmemalign/realloc with align/free corrupt storage1" );
    461382                area[0] = '\345'; area[amount - 2] = '\345';    // fill first/penultimate byte
     
    465386                        if ( area[0] != '\345' || area[s - 2] != '\345' ) abort( "cmemalign/realloc with align/free corrupt storage2" );
    466387                        area = (char *)realloc( area, a * 2, s );       // attempt to reuse storage
     388                        if ( area == 0p ) abort( "cmemalign/realloc with align/free out of memory" ); // no storage ?
    467389                        //sout | i | area | endl;
    468390                        if ( (size_t)area % a * 2 != 0 || malloc_alignment( area ) != a * 2 ) { // check for initial alignment
    469                                 abort( "cmemalign/realloc with align/free bad alignment %p %zd %zd", area, malloc_alignment( area ), a * 2 );
     391                                abort( "cmemalign/realloc with align/free bad alignment %p %jd %jd", area, malloc_alignment( area ), a * 2 );
    470392                        } // if
    471393                        if ( area[s - 1] != '\0' || area[s - 1] != '\0' ||
    472                                  area[malloc_size( area ) - 1] != '\0' ||
     394                                 area[malloc_usable_size( area ) - 1] != '\0' ||
    473395                                 ! malloc_zero_fill( area ) ) abort( "cmemalign/realloc/free corrupt storage3" );
    474396                        area[s - 1] = '\345';                                           // fill last byte
     
    488410        // checkFreeOn();
    489411        // malloc_stats();
    490         printf( "done\n" );                                                                     // non-empty .expect file
    491412}
    492413
Note: See TracChangeset for help on using the changeset viewer.