1 #define TEST(NUM,TMODE,VAL) \ 2 extern v##NUM##TMODE g_v##NUM##TMODE; \ 3 extern TMODE g_##TMODE; \ 4 \ 5 extern void pass_v##NUM##TMODE (v##NUM##TMODE); \ 6 extern v##NUM##TMODE return_v##NUM##TMODE (void); \ 7 \ 8 void \ 9 checkp_##NUM##TMODE (TMODE *p) \ 10 { \ 11 int i; \ 12 for (i = 0; i < NUM; i++) \ 13 { \ 14 if (p[i] != g_##TMODE + i) \ 15 DEBUG_CHECK; \ 16 } \ 17 } \ 18 \ 19 void \ 20 checkg_##NUM##TMODE (void) \ 21 { \ 22 u##NUM##TMODE u; \ 23 TMODE *p = u.a; \ 24 \ 25 u.v = g_v##NUM##TMODE; \ 26 checkp_##NUM##TMODE (p); \ 27 } \ 28 \ 29 void \ 30 init_##NUM##TMODE (void) \ 31 { \ 32 int i; \ 33 u##NUM##TMODE u; \ 34 g_##TMODE = VAL; \ 35 for (i = 0; i < NUM; i++) \ 36 u.a[i] = VAL + i; \ 37 g_v##NUM##TMODE = u.v; \ 38 } \ 39 \ 40 void \ 41 test_v##NUM##TMODE (void) \ 42 { \ 43 v##NUM##TMODE v; \ 44 u##NUM##TMODE u; \ 45 TMODE *p = u.a; \ 46 \ 47 DEBUG_FPUTS ("v" #NUM #TMODE); \ 48 DEBUG_NL; \ 49 DEBUG_FPUTS (" global variable:"); \ 50 init_##NUM##TMODE (); \ 51 checkg_##NUM##TMODE (); \ 52 DEBUG_NL; \ 53 DEBUG_FPUTS (" pass global variable:"); \ 54 pass_v##NUM##TMODE (g_v##NUM##TMODE); \ 55 DEBUG_NL; \ 56 DEBUG_FPUTS (" pass local variable:"); \ 57 v = g_v##NUM##TMODE; \ 58 pass_v##NUM##TMODE (v); \ 59 DEBUG_NL; \ 60 DEBUG_FPUTS (" function return:"); \ 61 u.v = return_v##NUM##TMODE (); \ 62 checkp_##NUM##TMODE (p); \ 63 DEBUG_NL; \ 64 } 65