File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / tests / test-memory.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:26:11 2012 UTC (12 years, 4 months ago) by misho
Branches: quagga, MAIN
CVS tags: v0_99_22p0, v0_99_22, v0_99_21, v0_99_20_1, v0_99_20, HEAD
quagga

    1: #include <zebra.h>
    2: #include <memory.h>
    3: 
    4: /* Memory torture tests
    5:  *
    6:  * Tests below are generic but comments are focused on interaction with
    7:  * Paul's proposed memory 'quick' cache, which may never be included in
    8:  * CVS
    9:  */
   10: 
   11: struct thread_master *master;
   12: 
   13: #if 0 /* set to 1 to use system alloc directly */
   14: #undef XMALLOC
   15: #undef XCALLOC
   16: #undef XREALLOC
   17: #undef XFREE
   18: #define XMALLOC(T,S) malloc((S))
   19: #define XCALLOC(T,S) calloc(1, (S))
   20: #define XREALLOC(T,P,S) realloc((P),(S))
   21: #define XFREE(T,P) free((P))
   22: #endif
   23: 
   24: #define TIMES 10
   25: 
   26: int
   27: main(int argc, char **argv)
   28: {
   29:   void *a[10];
   30:   int i;
   31: 
   32:   printf ("malloc x, malloc x, free, malloc x, free free\n\n");
   33:   /* simple case, test cache */
   34:   for (i = 0; i < TIMES; i++)
   35:     {
   36:       a[0] = XMALLOC (MTYPE_VTY, 1024);
   37:       memset (a[0], 1, 1024);
   38:       a[1] = XMALLOC (MTYPE_VTY, 1024);
   39:       memset (a[1], 1, 1024);
   40:       XFREE(MTYPE_VTY, a[0]); /* should go to cache */
   41:       a[0] = XMALLOC (MTYPE_VTY, 1024); /* should be satisfied from cache */
   42:       XFREE(MTYPE_VTY, a[0]);
   43:       XFREE(MTYPE_VTY, a[1]);
   44:     }
   45:   
   46:   printf ("malloc x, malloc y, free x, malloc y, free free\n\n");
   47:   /* cache should go invalid, valid, invalid, etc.. */
   48:   for (i = 0; i < TIMES; i++)
   49:     {
   50:       a[0] = XMALLOC (MTYPE_VTY, 512);
   51:       memset (a[0], 1, 512);
   52:       a[1] = XMALLOC (MTYPE_VTY, 1024); /* invalidate cache */
   53:       memset (a[1], 1, 1024);
   54:       XFREE(MTYPE_VTY, a[0]);
   55:       a[0] = XMALLOC (MTYPE_VTY, 1024);
   56:       XFREE(MTYPE_VTY, a[0]);
   57:       XFREE(MTYPE_VTY, a[1]);
   58:       /* cache should become valid again on next request */
   59:     }
   60: 
   61:   printf ("calloc\n\n");
   62:   /* test calloc */
   63:   for (i = 0; i < TIMES; i++)
   64:     {
   65:       a[0] = XCALLOC (MTYPE_VTY, 1024);
   66:       memset (a[0], 1, 1024);
   67:       a[1] = XCALLOC (MTYPE_VTY, 512); /* invalidate cache */
   68:       memset (a[1], 1, 512);
   69:       XFREE(MTYPE_VTY, a[1]);
   70:       XFREE(MTYPE_VTY, a[0]);
   71:       /* alloc == 0, cache can become valid again on next request */
   72:     }
   73:   
   74:   printf ("calloc and realloc\n\n");
   75:   /* check calloc + realloc */
   76:   for (i = 0; i < TIMES; i++)
   77:     {
   78:       printf ("calloc a0 1024\n");
   79:       a[0] = XCALLOC (MTYPE_VTY, 1024);
   80:       memset (a[0], 1, 1024/2);
   81:       
   82:       printf ("calloc 1 1024\n");
   83:       a[1] = XCALLOC (MTYPE_VTY, 1024);
   84:       memset (a[1], 1, 1024/2);
   85:       
   86:       printf ("realloc 0 1024\n");
   87:       a[3] = XREALLOC (MTYPE_VTY, a[0], 2048); /* invalidate cache */
   88:       if (a[3] != NULL)
   89:         a[0] = a[3];
   90:       memset (a[0], 1, 1024);
   91:       
   92:       printf ("calloc 2 512\n");
   93:       a[2] = XCALLOC (MTYPE_VTY, 512);
   94:       memset (a[2], 1, 512);
   95:       
   96:       printf ("free 1 0 2\n");
   97:       XFREE(MTYPE_VTY, a[1]);
   98:       XFREE(MTYPE_VTY, a[0]);
   99:       XFREE(MTYPE_VTY, a[2]);
  100:       /* alloc == 0, cache valid next request */
  101:     }
  102:   return 0;
  103: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>