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>