Annotation of embedaddon/quagga/tests/test-memory.c, revision 1.1.1.2
1.1.1.2 ! misho 1: /*
! 2: * This file is part of Quagga.
! 3: *
! 4: * Quagga is free software; you can redistribute it and/or modify it
! 5: * under the terms of the GNU General Public License as published by the
! 6: * Free Software Foundation; either version 2, or (at your option) any
! 7: * later version.
! 8: *
! 9: * Quagga is distributed in the hope that it will be useful, but
! 10: * WITHOUT ANY WARRANTY; without even the implied warranty of
! 11: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! 12: * General Public License for more details.
! 13: *
! 14: * You should have received a copy of the GNU General Public License
! 15: * along with Quagga; see the file COPYING. If not, write to the Free
! 16: * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! 17: * 02111-1307, USA.
! 18: */
! 19:
1.1 misho 20: #include <zebra.h>
21: #include <memory.h>
22:
23: /* Memory torture tests
24: *
25: * Tests below are generic but comments are focused on interaction with
26: * Paul's proposed memory 'quick' cache, which may never be included in
27: * CVS
28: */
29:
30: struct thread_master *master;
31:
32: #if 0 /* set to 1 to use system alloc directly */
33: #undef XMALLOC
34: #undef XCALLOC
35: #undef XREALLOC
36: #undef XFREE
37: #define XMALLOC(T,S) malloc((S))
38: #define XCALLOC(T,S) calloc(1, (S))
39: #define XREALLOC(T,P,S) realloc((P),(S))
40: #define XFREE(T,P) free((P))
41: #endif
42:
43: #define TIMES 10
44:
45: int
46: main(int argc, char **argv)
47: {
48: void *a[10];
49: int i;
50:
51: printf ("malloc x, malloc x, free, malloc x, free free\n\n");
52: /* simple case, test cache */
53: for (i = 0; i < TIMES; i++)
54: {
55: a[0] = XMALLOC (MTYPE_VTY, 1024);
56: memset (a[0], 1, 1024);
57: a[1] = XMALLOC (MTYPE_VTY, 1024);
58: memset (a[1], 1, 1024);
59: XFREE(MTYPE_VTY, a[0]); /* should go to cache */
60: a[0] = XMALLOC (MTYPE_VTY, 1024); /* should be satisfied from cache */
61: XFREE(MTYPE_VTY, a[0]);
62: XFREE(MTYPE_VTY, a[1]);
63: }
64:
65: printf ("malloc x, malloc y, free x, malloc y, free free\n\n");
66: /* cache should go invalid, valid, invalid, etc.. */
67: for (i = 0; i < TIMES; i++)
68: {
69: a[0] = XMALLOC (MTYPE_VTY, 512);
70: memset (a[0], 1, 512);
71: a[1] = XMALLOC (MTYPE_VTY, 1024); /* invalidate cache */
72: memset (a[1], 1, 1024);
73: XFREE(MTYPE_VTY, a[0]);
74: a[0] = XMALLOC (MTYPE_VTY, 1024);
75: XFREE(MTYPE_VTY, a[0]);
76: XFREE(MTYPE_VTY, a[1]);
77: /* cache should become valid again on next request */
78: }
79:
80: printf ("calloc\n\n");
81: /* test calloc */
82: for (i = 0; i < TIMES; i++)
83: {
84: a[0] = XCALLOC (MTYPE_VTY, 1024);
85: memset (a[0], 1, 1024);
86: a[1] = XCALLOC (MTYPE_VTY, 512); /* invalidate cache */
87: memset (a[1], 1, 512);
88: XFREE(MTYPE_VTY, a[1]);
89: XFREE(MTYPE_VTY, a[0]);
90: /* alloc == 0, cache can become valid again on next request */
91: }
92:
93: printf ("calloc and realloc\n\n");
94: /* check calloc + realloc */
95: for (i = 0; i < TIMES; i++)
96: {
97: printf ("calloc a0 1024\n");
98: a[0] = XCALLOC (MTYPE_VTY, 1024);
99: memset (a[0], 1, 1024/2);
100:
101: printf ("calloc 1 1024\n");
102: a[1] = XCALLOC (MTYPE_VTY, 1024);
103: memset (a[1], 1, 1024/2);
104:
105: printf ("realloc 0 1024\n");
106: a[3] = XREALLOC (MTYPE_VTY, a[0], 2048); /* invalidate cache */
107: if (a[3] != NULL)
108: a[0] = a[3];
109: memset (a[0], 1, 1024);
110:
111: printf ("calloc 2 512\n");
112: a[2] = XCALLOC (MTYPE_VTY, 512);
113: memset (a[2], 1, 512);
114:
115: printf ("free 1 0 2\n");
116: XFREE(MTYPE_VTY, a[1]);
117: XFREE(MTYPE_VTY, a[0]);
118: XFREE(MTYPE_VTY, a[2]);
119: /* alloc == 0, cache valid next request */
120: }
121: return 0;
122: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>