/* * HI-TECH Software C Test Suite * * Various conversions */ #include #include #include #include #include #define __lit(x) #x #define __stringize(x) __lit(x) struct test { code char * t_name; char (* t_func)(void); }; #ifndef HI_TECH_C #undef near #define near #endif #ifdef __psxa #define CONST code #else #define CONST const #endif char uconv(void), ubpconv(void), boolconv(void); static code struct test tlist[] = { "Unsigned conversions", uconv, "Unsigned byte->pointer conversions", ubpconv, "Boolean conversions", boolconv, }; #define PROGNAME "Conv" int puts(code char * s) { while(*s) putch(*s++); } void putdec(char c) { if(c >= 100) putch(c /100 + '0'); if(c >= 10) putch((c/10)%10 + '0'); putch(c%10 + '0'); } main() { register signed char x, cnt, failed; cnt = failed = 0; for(cnt = 0 ; cnt != sizeof tlist/sizeof tlist[0] ; cnt++) { if(x = (*tlist[cnt].t_func)()) { failed++; puts("Failed: "); putdec(x); putch(' '); puts(tlist[cnt].t_name); putch('\r'); putch('\n'); } } puts("Passed "); putdec(cnt-failed); if(failed) { puts("; failed "); putdec(failed); } putch('\r'); putch('\n'); } unsigned setval(from) unsigned from; { return from; } char uconv() { int i; static code unsigned ulist[] = { 0, 1, 100, 255, 256, 32767, 32768, 65535, }; unsigned word; unsigned long dword; for(i = 0 ; i != sizeof ulist/sizeof ulist[0] ; i++) { word = setval(ulist[i]); dword = setval(ulist[i]); if(dword != ulist[i]) return i+1; dword = word; if(dword != ulist[i]) return i+1; } return 0; } char ubpconv() { code char * x = "abcd"; unsigned char z = 2; if(x[z] != 'c') return 1; return 0; } char boolconv() { int i; i = irv(1) != 0; if(!i) return 1; i = irv(0) != 0; if(i) return 2; i = irv(1) == 0; if(i) return 3; i = irv(0) == 0; if(!i) return 4; i = irv(234) == 234; if(!i) return 5; i = irv(235) == 235 && irv(678) == 678; if(!i) return 6; i = irv(234) == 235 && irv(678) == 678; if(i) return 7; return 0; } int irv(i) { return i; }