* src/SDCC.lex (doPragma): added pragma disable_warning <nnn>
[fw/sdcc] / support / regression / tests / malloc.c
1 /* Simple malloc tests.
2  */
3 #include <testfwk.h>
4 #include <stdlib.h>
5
6 /* PENDING */
7 #if defined(__gbz80) || defined(__z80) || defined(__GNUC__)
8 #define XDATA
9 #else
10 #define XDATA xdata
11 #endif
12
13 XDATA char heap[100];
14
15 void
16 testMalloc(void)
17 {
18   void XDATA *p1, *p2, *p3;
19   char *p;
20   unsigned char i;
21
22 #if !defined(__gbz80) && !defined(__z80) && !defined(__GNUC__)
23   init_dynamic_memory((MEMHEADER XDATA *)heap, sizeof(heap));
24
25   p1 = malloc(200);
26   ASSERT(p1 == NULL);
27   LOG(("p1 == NULL when out of memory\n"));
28 #endif
29
30   p1 = malloc(5);
31   ASSERT(p1 != NULL);
32 #ifdef PORT_HOST
33   LOG(("p1: %p\n", p1));
34 #else
35   LOG(("p1: %u\n", (unsigned) p1));
36 #endif
37
38   p2 = malloc(20);
39   ASSERT(p2 != NULL);
40 #ifdef PORT_HOST
41   LOG(("p2: %p\n", p2));
42 #else
43   LOG(("p2: %u\n", (unsigned) p2));
44 #endif
45
46   p = (char*)p2;
47   for (i=0; i<20; i++, p++)
48     *p = i;
49
50   p2 = realloc(p2, 25);
51   ASSERT(p2 != NULL);
52 #ifdef PORT_HOST
53   LOG(("p2, after expanding realloc: %p\n", p2));
54 #else
55   LOG(("p2, after expanding realloc: %u\n", (unsigned) p2));
56 #endif
57
58   p = (char*)p2;
59   for (i=0; i<20; i++, p++)
60     ASSERT(*p == i);
61
62   p2 = realloc(p2, 15);
63   ASSERT(p2 != NULL);
64 #ifdef PORT_HOST
65   LOG(("p2, after shrinking realloc: %p\n", p2));
66 #else
67   LOG(("p2, after shrinking realloc: %u\n", (unsigned) p2));
68 #endif
69
70   p = (char*)p2;
71   for (i=0; i<15; i++, p++)
72     ASSERT(*p == i);
73
74   free(p2);
75
76   p3 = malloc(10);
77   ASSERT(p3 != NULL);
78 #ifdef PORT_HOST
79   LOG(("p3, after freeing p2: %p\n", p3));
80 #else
81   LOG(("p3, after freeing p2: %u\n", (unsigned) p3));
82 #endif
83 }