mirror of
				https://git.proxmox.com/git/mirror_frr
				synced 2025-11-04 11:45:06 +00:00 
			
		
		
		
	* test-buffer.c: Andrew's buffer tester * test-memory.c: basic memory tester * Makefile.am: Add new tests
		
			
				
	
	
		
			104 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#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;
 | 
						|
}
 |