1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
/** array test
type: char, int
storage: __xdata, __code,
*/
#include <testfwk.h>
#define TC(x) (0x10+(x))
#define TI(x) (0x1020+(x) + 0x100*(x))
#define TL(x) (0x10203040+(x))
const {storage} unsigned char array_const_char[4] = {TC(0), TC(1), TC(2), TC(3)};
const {storage} unsigned int array_const_int [4] = {TI(0), TI(1), TI(2), TI(3)};
const {storage} unsigned long array_const_long[4] = {TL(0), TL(1), TL(2), TL(3)};
unsigned char array_char[4] = {TC(0), TC(1), TC(2), TC(3)};
unsigned int array_int [4] = {TI(0), TI(1), TI(2), TI(3)};
unsigned long array_long[4] = {TL(0), TL(1), TL(2), TL(3)};
volatile unsigned {type} idx;
volatile unsigned {type} idx2;
void
testArrayAccess(void)
{
#ifndef __SDCC_pdk14 // Not enough RAM for all the temporaries.
idx = 2;
ASSERT(array_const_char[idx] == TC(2));
ASSERT(array_const_int [idx] == TI(2));
ASSERT(array_const_long[idx] == TL(2));
ASSERT(idx[array_const_char] == TC(2));
ASSERT(idx[array_const_int ] == TI(2));
ASSERT(idx[array_const_long] == TL(2));
ASSERT(array_const_char[2] == TC(2));
ASSERT(array_const_int [2] == TI(2));
ASSERT(array_const_long[2] == TL(2));
ASSERT(array_char[idx] == TC(2));
ASSERT(array_int [idx] == TI(2));
ASSERT(array_long[idx] == TL(2));
ASSERT(array_char[2] == TC(2));
ASSERT(array_int [2] == TI(2));
ASSERT(array_long[2] == TL(2));
idx = 3;
idx2 = 1;
array_char[idx2] = array_const_char[idx] | 0x80;
array_int [idx2] = array_const_int [idx] | 0x8080;
array_long[idx2] = array_const_long[idx] | 0x80808080;
ASSERT(array_char[idx2] == (TC(3) | 0x80));
ASSERT(array_int [idx2] == (TI(3) | 0x8080));
ASSERT(array_long[idx2] == (TL(3) | 0x80808080));
#endif
}
|