0037-malloc.c - scc - simple c99 compiler
 (HTM) git clone git://git.simple-cc.org/scc
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
       0037-malloc.c (923B)
       ---
            1 #include <assert.h>
            2 #include <stdlib.h>
            3 #include <stdio.h>
            4 
            5 /*
            6 output:
            7 
            8 end:
            9 */
           10 
           11 int
           12 check_test1(void **vec)
           13 {
           14         int i, cnt;
           15 
           16         for (i = cnt = 0; i < 100; i++) {
           17                 if (vec[i])
           18                         cnt++;
           19         }
           20         return cnt;
           21 }
           22 
           23 void
           24 test()
           25 {
           26         int i,n, which, nalloc;
           27         static void *p[100];
           28 
           29         nalloc = 0;
           30         for (i = 0; i < 5000; i++) {
           31                 which = rand() % 2;
           32                 if (which == 0 && nalloc < 100) {
           33                         for (n = rand()%100; p[n]; n = rand()%100)
           34                                 ;
           35                         p[n] = malloc(rand() + 1);
           36                         nalloc++;
           37                 } else if (nalloc > 0) {
           38                         n = rand() % 100;
           39                         if (p[n])
           40                                 nalloc--;
           41                         free(p[n]);
           42                         p[n] = NULL;
           43                 }
           44                 assert(check_test1(p) == nalloc);
           45         }
           46 
           47         for (i = 0; i < nalloc; i++) {
           48                 for (n = 0; n < 100 && !p[n]; n++)
           49                         ;
           50                 assert(n < 100);
           51                 free(p[n]);
           52                 p[n] = NULL;
           53         }
           54         assert(check_test1(p) == 0);
           55 
           56         for (i = 0; i < 100; i++)
           57                 assert(p[i] == NULL);
           58         /* TODO: Add a verifier here */
           59 }
           60 
           61 int
           62 main()
           63 {
           64         puts("testing");
           65         test();
           66         puts("done");
           67 
           68         return 0;
           69 }