mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-12 09:52:27 +00:00
2004-05-13 Paul Jakma <paul@dishone.st>
* test-buffer.c: Andrew's buffer tester * test-memory.c: basic memory tester * Makefile.am: Add new tests
This commit is contained in:
parent
5d6e26910b
commit
4dcadf7efd
@ -11,3 +11,6 @@ TAGS
|
||||
testsig
|
||||
.arch-inventory
|
||||
.arch-ids
|
||||
testbuffer
|
||||
testmemory
|
||||
testsig
|
||||
|
@ -1,9 +1,12 @@
|
||||
INCLUDES = @INCLUDES@ -I.. -I$(top_srcdir) -I$(top_srcdir)/lib
|
||||
DEFS = @DEFS@ $(LOCAL_OPTS) -DSYSCONFDIR=\"$(sysconfdir)/\"
|
||||
|
||||
noinst_PROGRAMS = testsig
|
||||
noinst_PROGRAMS = testsig testbuffer testmemory
|
||||
testsig_SOURCES = test-sig.c
|
||||
testbuffer_SOURCES = test-buffer.c
|
||||
testmemory_SOURCES = test-memory.c
|
||||
|
||||
testsig_LDADD = ../lib/libzebra.la @LIBCAP@
|
||||
|
||||
testbuffer_LDADD = ../lib/libzebra.la @LIBCAP@
|
||||
testmemory_LDADD = ../lib/libzebra.la @LIBCAP@
|
||||
|
||||
|
35
tests/test-buffer.c
Normal file
35
tests/test-buffer.c
Normal file
@ -0,0 +1,35 @@
|
||||
#include <zebra.h>
|
||||
#include <buffer.h>
|
||||
|
||||
struct thread_master *master;
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
struct buffer *b1, *b2;
|
||||
int n;
|
||||
char junk[3];
|
||||
char c = 'a';
|
||||
|
||||
if ((argc != 2) || (sscanf(argv[1], "%d%1s", &n, junk) != 1))
|
||||
{
|
||||
fprintf(stderr, "Usage: %s <number of chars to simulate>\n", *argv);
|
||||
return 1;
|
||||
}
|
||||
|
||||
b1 = buffer_new(0);
|
||||
b2 = buffer_new(1024);
|
||||
|
||||
while (n-- > 0)
|
||||
{
|
||||
buffer_put(b1, &c, 1);
|
||||
buffer_put(b2, &c, 1);
|
||||
if (c++ == 'z')
|
||||
c = 'a';
|
||||
buffer_reset(b1);
|
||||
buffer_reset(b2);
|
||||
}
|
||||
buffer_free(b1);
|
||||
buffer_free(b2);
|
||||
return 0;
|
||||
}
|
103
tests/test-memory.c
Normal file
103
tests/test-memory.c
Normal file
@ -0,0 +1,103 @@
|
||||
#include <zebra.h>
|
||||
#include <memory.h>
|
||||
|
||||
/* Memory torture tests
|
||||
*
|
||||
* Tests below are generic but comments are focused on interaction with
|
||||
* Paul's proposed memory 'quick' cache, which may never be included in
|
||||
* CVS
|
||||
*/
|
||||
|
||||
struct thread_master *master;
|
||||
|
||||
#if 0 /* set to 1 to use system alloc directly */
|
||||
#undef XMALLOC
|
||||
#undef XCALLOC
|
||||
#undef XREALLOC
|
||||
#undef XFREE
|
||||
#define XMALLOC(T,S) malloc((S))
|
||||
#define XCALLOC(T,S) calloc(1, (S))
|
||||
#define XREALLOC(T,P,S) realloc((P),(S))
|
||||
#define XFREE(T,P) free((P))
|
||||
#endif
|
||||
|
||||
#define TIMES 10
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
void *a[10];
|
||||
int i;
|
||||
|
||||
printf ("malloc x, malloc x, free, malloc x, free free\n\n");
|
||||
/* simple case, test cache */
|
||||
for (i = 0; i < TIMES; i++)
|
||||
{
|
||||
a[0] = XMALLOC (MTYPE_VTY, 1024);
|
||||
memset (a[0], 1, 1024);
|
||||
a[1] = XMALLOC (MTYPE_VTY, 1024);
|
||||
memset (a[1], 1, 1024);
|
||||
XFREE(MTYPE_VTY, a[0]); /* should go to cache */
|
||||
a[0] = XMALLOC (MTYPE_VTY, 1024); /* should be satisfied from cache */
|
||||
XFREE(MTYPE_VTY, a[0]);
|
||||
XFREE(MTYPE_VTY, a[1]);
|
||||
}
|
||||
|
||||
printf ("malloc x, malloc y, free x, malloc y, free free\n\n");
|
||||
/* cache should go invalid, valid, invalid, etc.. */
|
||||
for (i = 0; i < TIMES; i++)
|
||||
{
|
||||
a[0] = XMALLOC (MTYPE_VTY, 512);
|
||||
memset (a[0], 1, 512);
|
||||
a[1] = XMALLOC (MTYPE_VTY, 1024); /* invalidate cache */
|
||||
memset (a[1], 1, 1024);
|
||||
XFREE(MTYPE_VTY, a[0]);
|
||||
a[0] = XMALLOC (MTYPE_VTY, 1024);
|
||||
XFREE(MTYPE_VTY, a[0]);
|
||||
XFREE(MTYPE_VTY, a[1]);
|
||||
/* cache should become valid again on next request */
|
||||
}
|
||||
|
||||
printf ("calloc\n\n");
|
||||
/* test calloc */
|
||||
for (i = 0; i < TIMES; i++)
|
||||
{
|
||||
a[0] = XCALLOC (MTYPE_VTY, 1024);
|
||||
memset (a[0], 1, 1024);
|
||||
a[1] = XCALLOC (MTYPE_VTY, 512); /* invalidate cache */
|
||||
memset (a[1], 1, 512);
|
||||
XFREE(MTYPE_VTY, a[1]);
|
||||
XFREE(MTYPE_VTY, a[0]);
|
||||
/* alloc == 0, cache can become valid again on next request */
|
||||
}
|
||||
|
||||
printf ("calloc and realloc\n\n");
|
||||
/* check calloc + realloc */
|
||||
for (i = 0; i < TIMES; i++)
|
||||
{
|
||||
printf ("calloc a0 1024\n");
|
||||
a[0] = XCALLOC (MTYPE_VTY, 1024);
|
||||
memset (a[0], 1, 1024/2);
|
||||
|
||||
printf ("calloc 1 1024\n");
|
||||
a[1] = XCALLOC (MTYPE_VTY, 1024);
|
||||
memset (a[1], 1, 1024/2);
|
||||
|
||||
printf ("realloc 0 1024\n");
|
||||
a[3] = XREALLOC (MTYPE_VTY, a[0], 2048); /* invalidate cache */
|
||||
if (a[3] != NULL)
|
||||
a[0] = a[3];
|
||||
memset (a[0], 1, 1024);
|
||||
|
||||
printf ("calloc 2 512\n");
|
||||
a[2] = XCALLOC (MTYPE_VTY, 512);
|
||||
memset (a[2], 1, 512);
|
||||
|
||||
printf ("free 1 0 2\n");
|
||||
XFREE(MTYPE_VTY, a[1]);
|
||||
XFREE(MTYPE_VTY, a[0]);
|
||||
XFREE(MTYPE_VTY, a[2]);
|
||||
/* alloc == 0, cache valid next request */
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user