]> git.sur5r.net Git - cc65/blob - test/val/pointer1.c
All regression-tests subdirectories are cleaned before the first test starts, so...
[cc65] / test / val / pointer1.c
1 /*
2   !!DESCRIPTION!! Pointer tests
3   !!ORIGIN!!      SDCC regression tests
4   !!LICENCE!!     GPL, read COPYING.GPL
5 */
6
7 #include <stdio.h>
8 #include <limits.h>
9
10 unsigned char success = 0;
11 unsigned char failures = 0;
12 unsigned char dummy = 0;
13
14 #ifdef SUPPORT_BIT_TYPES
15 bit bit0 = 0;
16 #endif
17 unsigned int aint0 = 0;
18 unsigned int aint1 = 0;
19 unsigned char achar0 = 0;
20 unsigned char achar1 = 0;
21 unsigned char *acharP = 0;
22
23 char buff[10];
24
25 void
26 done ()
27 {
28   dummy++;
29 }
30
31 void
32 f1 (unsigned char *ucP)
33 {
34   if (ucP == 0)
35     {
36       failures++;
37       return;
38     }
39
40   if (*ucP)
41     failures++;
42 }
43
44 void
45 f2 (unsigned int *uiP)
46 {
47   if (uiP == 0)
48     {
49       failures++;
50       return;
51     }
52
53   if (*uiP)
54     failures++;
55 }
56
57 unsigned char *
58 f3 (void)
59 {
60   return &achar0;
61 }
62
63 void f4(unsigned char *ucP, unsigned char uc)
64 {
65   if(!ucP) {
66     failures++;
67     return;
68   }
69
70   if(*ucP != uc)
71     failures++;
72 }
73
74 void init_array(char start_value)
75 {
76   unsigned char c;
77
78   for(c=0; c<sizeof(buff); c++)
79     buff[c] = start_value++;
80 }
81
82 void check_array(char base_value)
83 {
84   unsigned char c;
85
86   for(c=0; c<sizeof(buff); c++)
87     if(buff[c] != (base_value+c))
88       failures++;
89 }
90
91 void index_by_pointer(unsigned char *index, unsigned char expected_value)
92 {
93   if(buff[*index] != expected_value)
94     failures++;
95 }
96
97 int
98 main (void)
99 {
100   init_array(4);
101   check_array(4);
102
103   if(buff[achar0 + 7] != 4+7)
104     failures++;
105
106   dummy = buff[achar0];
107
108   if(dummy != 4)
109     failures++;
110
111   if(dummy != (buff[achar0+1] -1))
112     failures++;
113
114   index_by_pointer(&dummy, 8);
115
116   f1 (&achar0);
117   f2 (&aint0);
118
119   acharP = f3 ();
120   if ((acharP == 0) || (*acharP))
121     failures++;
122   achar0 = 42;
123   if(*acharP != 42)
124     failures++;
125
126   achar0 = 5;
127   f4(&achar0, achar0);
128
129   success = failures;
130   done ();
131   printf("failures: %d\n",failures);
132
133   return failures;
134 }