Knowledge Base Nr: 00326 modultest.cpp - http://www.swe-kaiser.de

c/cpp: stubben von code zum testen der funktionalität (modultest)

  

######### zu testende funktion

void FunktionZuTesten()
{
asm("mftbl %0" : "=r"(tbl_u32));
asm("mthid0 r0");
asm("e_lis r0, 0x0000");
}


######### header in modul mit zu testender funktion einbinden (nur im testfall)

#undef asm
#define myasm(a) CopyAsmCmd(asm_cnt++, a);
#define asm(a) myasm(#a);

extern int asm_cnt;
extern void CopyAsmCmd(char* index, char* source);


######### testmodul mit testfunktionen dazulinken (nur im testfall)

char asm_cmd[20][40] = {0};
int asm_cnt;

void CopyAsmCmd(int index, char* source)
{
// source kann '"' am anfang und ende enthalten! nicht mitkopieren
int n;

for (n=0; n<39; n++)
{
asm_cmd[index][n] = source[n+1];
if (source[n] == 0)
break;
}
if ((source[0] == '"') && (source[n-1] == '"'))
asm_cmd[index][n-2] = 0;
else
asm_cmd[index][n-1] = 0;
}

boolean CompareAsmCmd(int index, char* soll)
{
for (int n=0; n<40; n++)
{
if (asm_cmd[index][n] != soll[n])
return FALSE;

if (soll[n] == 0)
return TRUE;
}

return FALSE;
}

int testfunktion()
{
int result = 0;

asm_cnt = 0;
for (int i=0; i<20; i++)
asm_cmd[i][0] = 0;

FunktionZuTesten();

if (CompareAsmCmd(0, "mftbl %0\" : \"=r\"(tbl_u32)") != TRUE)
result |= 0x0001;
if (CompareAsmCmd(1, "mthid0 r0") != TRUE)
result |= 0x0002;
if (CompareAsmCmd(2, "e_lis r0, 0x0000") != TRUE)
result |= 0x0004;

if (asm_cnt != 3)
result |= 0x1000;

return result;
}

void main()
{
if (testfunktion() != 0)
printf("FunktionZuTesten() fehlerhaft!");
else
printf("FunktionZuTesten() ok!");
}