6 extern unsigned char *asma(unsigned char *s);
7 extern unsigned char *asma_callchecking(unsigned char *s);
9 unsigned char *orig_asma(unsigned char *s)
12 for (i=0; i<16; i++) {
14 c += (c>='A' && c<='Z') ? 'a'-'A' : 0;
20 static char ascii(char s) {
21 if(s < 0x20) return '.';
22 if(s > 0x7E) return '.';
26 static void hexdump(void *d, int len) {
29 data = (unsigned char*)d;
30 for (off=0; off<len; off += 16) {
31 printf("\t%08x ",off);
33 if((i+off)>=len) printf(" ");
34 else printf("%02x ",data[off+i]);
38 if((i+off)>=len) printf(" ");
39 else printf("%c",ascii(data[off+i]));
46 char *input1[]={"asdfABCDEFGHKL54", "foofuuMUHkk", "AbC", "BLA|MUHMKUH|KA", "XZY"};
52 int off[] = {2,0,0,0,0};
54 for(i = 0; i < 5; i++) {
55 input2 = strdup(input1[i]);
56 input3 = strdup(input1[i]);
57 output1 = (char *)orig_asma((unsigned char *)(input2 + off[i]));
58 output2 = (char *)asma((unsigned char *)(input3 + off[i]));
64 if(memcmp(output1,output2, 16)) {
66 printf("Testfall falsch; Input war: \"%s\"\n", input1[i]);
67 printf("erwartet:\n\t\"%s\"\ntatsaechliches Ergebnis:\n\t\"%s\"\n", output1, output2);
69 printf("Testfall \"%s\" passt.\n", output1);
79 void printchar(unsigned char c)
81 if (c<' ' || c>126 || c=='"')
87 void printarray(unsigned char* bufstart, int buflength, unsigned char* s)
90 unsigned char *p=s-16;
96 if (p+pl>bufstart+buflength)
97 pl=bufstart+buflength-p;
111 int test(unsigned char* s,unsigned char* t, unsigned char* u,
112 unsigned long sa,unsigned long ta, unsigned long ua)
115 unsigned char utmp[l+16];
116 unsigned char stmp[l+16];
117 unsigned char *r, *orig_r;
121 int off = sa + ta + ua * 8;
122 for (i=0; i<l+16; i++) {
127 memcpy(stmp, s, l+16);
129 memset(utmp, 0xff, l);
131 printf("\nCalling asma(%p) with\n", s+sa);
132 printarray(s+sa, l, s+sa);
135 r = asma_callchecking(s+sa);
139 orig_r = orig_asma(stmp+sa);
142 printf("[Error] return value wrong. Expected: %p\n", s+sa);
145 if(memcmp(stmp+sa, s+sa, 16) != 0) {
146 printf("[Error] returned string wrong. Expected:\n");
148 printarray(utmp+ua, l, utmp+ua);
150 printf("=== memcmp ===\n");
151 printf("memcmp(stmp+sa, orig_r, 16): %i\n", memcmp(stmp+sa, orig_r, 16));
152 printf("memcmp(s+sa, r, 16): %i\n", memcmp(s+sa, r, 16));
153 printf("=== input ===\n");
155 printf("ref (s+sa):\n");
156 hexdump(stmp+sa, 16);
157 printf("asma (stmp+sa):\n");
160 printf("=== return ===\n");
162 printf("ref (orig_r):\n");
164 printf("asma (r):\n");
168 printf("succeeded\n");
173 int main(int argc, char **argv)
183 for(i=0; i<16; i+=3) {
185 printf("==i: %d, k: %d\n", i, k);
186 success &= test(s, t, u, i, 0, k);
191 fprintf(stdout,"\nTest failed.\n");
193 fprintf(stdout,"\nTest succeeded.\n");