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 cPointer_char(void)20static 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 cPointer_int(void)31static 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 cPointer_long(void)42static 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 iPointer_char(void)53static 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 iPointer_int(void)64static 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 iPointer_long(void)75static 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 lPointer_char(void)86static 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 lPointer_int(void)97static 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 lPointer_long(void)108static 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 char_cPointer(void)121static 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 int_cPointer(void)132static 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 long_cPointer(void)143static 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 char_iPointer(void)154static 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 int_iPointer(void)165static 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 long_iPointer(void)176static 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 char_lPointer(void)187static 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 int_lPointer(void)198static 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 long_lPointer(void)209static 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 main(void)220int 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 } 251