]> git.sur5r.net Git - cc65/blob - test/val/add5.c
goto.c warning fix for implicit truncation
[cc65] / test / val / add5.c
1 /*
2 ** !!DESCRIPTION!! Simple tests about adding pointers and offsets
3 ** !!ORIGIN!!      cc65 regression tests
4 ** !!LICENCE!!     Public Domain
5 ** !!AUTHOR!!      2016-01-01, Greg King
6 */
7
8 #include <stdio.h>
9
10 static unsigned char failures = 0;
11
12 static char array[16];
13
14 static char *cPtr;
15 static int  *iPtr;
16 static long *lPtr;
17
18 /* These functions test: adding an offset variable to a pointer variable. */
19
20 static void cPointer_char(void)
21 {
22     char *cP = array;
23     char offset = 3;
24
25     cPtr = cP + offset;
26     if (cPtr != (void *)&array[3]) {
27         ++failures;
28     }
29 }
30
31 static void cPointer_int(void)
32 {
33     char *cP = array;
34     int offset = 3;
35
36     cPtr = cP + offset;
37     if (cPtr != (void *)&array[3]) {
38         ++failures;
39     }
40 }
41
42 static void cPointer_long(void)
43 {
44     char *cP = array;
45     long offset = 3;
46
47     cPtr = cP + offset;
48     if (cPtr != (void *)&array[3]) {
49         ++failures;
50     }
51 }
52
53 static void iPointer_char(void)
54 {
55     int *iP = (int *)array;
56     char offset = 3;
57
58     iPtr = iP + offset;
59     if (iPtr != (void *)&array[6]) {
60         ++failures;
61     }
62 }
63
64 static void iPointer_int(void)
65 {
66     int *iP = (int *)array;
67     int offset = 3;
68
69     iPtr = iP + offset;
70     if (iPtr != (void *)&array[6]) {
71         ++failures;
72     }
73 }
74
75 static void iPointer_long(void)
76 {
77     int *iP = (int *)array;
78     long offset = 3;
79
80     iPtr = iP + offset;
81     if (iPtr != (void *)&array[6]) {
82         ++failures;
83     }
84 }
85
86 static void lPointer_char(void)
87 {
88     long *lP = (long *)array;
89     char offset = 3;
90
91     lPtr = lP + offset;
92     if (lPtr != (void *)&array[12]) {
93         ++failures;
94     }
95 }
96
97 static void lPointer_int(void)
98 {
99     long *lP = (long *)array;
100     int offset = 3;
101
102     lPtr = lP + offset;
103     if (lPtr != (void *)&array[12]) {
104         ++failures;
105     }
106 }
107
108 static void lPointer_long(void)
109 {
110     long *lP = (long *)array;
111     long offset = 3;
112
113     lPtr = lP + offset;
114     if (lPtr != (void *)&array[12]) {
115         ++failures;
116     }
117 }
118
119 /* These functions test: adding a pointer variable to an offset variable. */
120
121 static void char_cPointer(void)
122 {
123     char *cP = array;
124     char offset = 3;
125
126     cPtr = offset + cP;
127     if (cPtr != (void *)&array[3]) {
128         ++failures;
129     }
130 }
131
132 static void int_cPointer(void)
133 {
134     char *cP = array;
135     int offset = 3;
136
137     cPtr = offset + cP;
138     if (cPtr != (void *)&array[3]) {
139         ++failures;
140     }
141 }
142
143 static void long_cPointer(void)
144 {
145     char *cP = array;
146     long offset = 3;
147
148     cPtr = (offset + cP);
149     if (cPtr != (void *)&array[3]) {
150         ++failures;
151     }
152 }
153
154 static void char_iPointer(void)
155 {
156     int *iP = (int *)array;
157     char offset = 3;
158
159     iPtr = offset + iP;
160     if (iPtr != (void *)&array[6]) {
161         ++failures;
162     }
163 }
164
165 static void int_iPointer(void)
166 {
167     int *iP = (int *)array;
168     int offset = 3;
169
170     iPtr = offset + iP;
171     if (iPtr != (void *)&array[6]) {
172         ++failures;
173     }
174 }
175
176 static void long_iPointer(void)
177 {
178     int *iP = (int *)array;
179     long offset = 3;
180
181     iPtr = (offset + iP);
182     if (iPtr != (void *)&array[6]) {
183         ++failures;
184     }
185 }
186
187 static void char_lPointer(void)
188 {
189     long *lP = (long *)array;
190     char offset = 3;
191
192     lPtr = offset + lP;
193     if (lPtr != (void *)&array[12]) {
194         ++failures;
195     }
196 }
197
198 static void int_lPointer(void)
199 {
200     long *lP = (long *)array;
201     int offset = 3;
202
203     lPtr = offset + lP;
204     if (lPtr != (void *)&array[12]) {
205         ++failures;
206     }
207 }
208
209 static void long_lPointer(void)
210 {
211     long *lP = (long *)array;
212     long offset = 3;
213
214     lPtr = (offset + lP);
215     if (lPtr != (void *)&array[12]) {
216         ++failures;
217     }
218 }
219
220 int main(void)
221 {
222     cPointer_char();
223     cPointer_int();
224     cPointer_long();
225
226     iPointer_char();
227     iPointer_int();
228     iPointer_long();
229
230     lPointer_char();
231     lPointer_int();
232     lPointer_long();
233
234     char_cPointer();
235      int_cPointer();
236     long_cPointer();
237
238     char_iPointer();
239      int_iPointer();
240     long_iPointer();
241
242     char_lPointer();
243      int_lPointer();
244     long_lPointer();
245
246     if (failures != 0) {
247         printf("add5: failures: %u\n", failures);
248     }
249     return failures;
250 }