* src/SDCC.lex (doPragma): added pragma disable_warning <nnn>
[fw/sdcc] / support / regression / tests / malloc.c
index 9d91a857c5f79aa1c1d786b8253e4c4fca9151cc..6659b949df114dd2e6e9143e868abc1210821289 100644 (file)
@@ -1,7 +1,7 @@
 /* Simple malloc tests.
  */
 #include <testfwk.h>
-#include <malloc.h>
+#include <stdlib.h>
 
 /* PENDING */
 #if defined(__gbz80) || defined(__z80) || defined(__GNUC__)
@@ -16,9 +16,15 @@ void
 testMalloc(void)
 {
   void XDATA *p1, *p2, *p3;
-  
+  char *p;
+  unsigned char i;
+
 #if !defined(__gbz80) && !defined(__z80) && !defined(__GNUC__)
-  init_dynamic_memory((MEMHEADER xdata *)heap, sizeof(heap));
+  init_dynamic_memory((MEMHEADER XDATA *)heap, sizeof(heap));
+
+  p1 = malloc(200);
+  ASSERT(p1 == NULL);
+  LOG(("p1 == NULL when out of memory\n"));
 #endif
 
   p1 = malloc(5);
@@ -37,6 +43,34 @@ testMalloc(void)
   LOG(("p2: %u\n", (unsigned) p2));
 #endif
 
+  p = (char*)p2;
+  for (i=0; i<20; i++, p++)
+    *p = i;
+
+  p2 = realloc(p2, 25);
+  ASSERT(p2 != NULL);
+#ifdef PORT_HOST
+  LOG(("p2, after expanding realloc: %p\n", p2));
+#else
+  LOG(("p2, after expanding realloc: %u\n", (unsigned) p2));
+#endif
+
+  p = (char*)p2;
+  for (i=0; i<20; i++, p++)
+    ASSERT(*p == i);
+
+  p2 = realloc(p2, 15);
+  ASSERT(p2 != NULL);
+#ifdef PORT_HOST
+  LOG(("p2, after shrinking realloc: %p\n", p2));
+#else
+  LOG(("p2, after shrinking realloc: %u\n", (unsigned) p2));
+#endif
+
+  p = (char*)p2;
+  for (i=0; i<15; i++, p++)
+    ASSERT(*p == i);
+
   free(p2);
 
   p3 = malloc(10);