Annotation of embedaddon/quagga/tests/test-memory.c, revision 1.1

1.1     ! misho       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>