diff --git a/tests/test-memory.c b/tests/test-memory.c
new file mode 100644
index 0000000..2971160
--- /dev/null
+++ b/tests/test-memory.c
@@ -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;
+}
