asmb: beachte den index fail bei printf(.., input); :)
[uebersetzerbau-ss10.git] / asmb / main.c
old mode 100644 (file)
new mode 100755 (executable)
index b63e8df..bd214b6
@@ -2,65 +2,79 @@
 #include <stdlib.h>
 #include <string.h>
 
-extern unsigned char *asmb(unsigned char *s);
+extern unsigned char *asmb(unsigned char *a);
 
 unsigned char *asmb_ref(unsigned char *s)
 {
        unsigned long i;
        for (i=0; s[i]; i++) {
-               unsigned char c = s[i];
-               c += (c >= 'A' && c <= 'Z') ? 'a'-'A' : 0;
+               unsigned char c=s[i];
+               c += (c>='A' && c<='Z') ? 'a'-'A' : 0;
                s[i] = c;
        }
        return s;
 }
 
-int main(int argc, char **argv) {
-       char *input1[]={"asdfA\0BCDEFGHKL5", "foofuuMUHkk\0AAAA", 
-                                       "AbC\0AAAAAAAAAAAA", "BLA|MUHMKUH|KAA\0", 
-                                       "ASDFASDFasdfasdfaBC\0AAAABBBBCCCC",
-                                       "ASDFASDFasdfasdfaBC0AAAABBBBCCCCmuhKA\0asASDFasdf"
-                                       /*      8      16  20  24  28  32  36   40      48 */
-                                       };
-       int len[] = {16,16,
-                               16,16,
-                               32,
-                               48};
-       char *output1;
-       char *output2;
-       char *input2;
-       char *input3;
-       int i, j;
+#define NUM_TESTCASES 12
+int main()
+{
+       char *input[NUM_TESTCASES]={"asdfABCDEFGHKL54", 
+               "foofuuMUHkk", 
+               "AbC", 
+               "BLA|MUHMKUH|KA", 
+               "ASDFNERABHDFKHDFKLGJAHGLKAHGLKASHGEARNAKLVNLVAANLSADJVHASDLGH", 
+               "asdfABCDEFGHKL544", 
+               "asdfA\0BCDEFGHKL5", 
+               "foofuuMUHkk\0AAAA", 
+               "AbC\0AAAAAAAAAAAA", 
+               "BLA|MUHMKUH|KAA\0", 
+               "ASDFASDFasdfasdfaBC\0AAAABBBBCCCC", 
+               "ASDFASDFasdfasdfaBC0AAAABBBBCCCCmuhKA\0asASDFasdf" 
+       };
+       int len[NUM_TESTCASES] = {16,
+               11,
+               3,
+               14,
+               60,
+               17,
+               16,
+               16,
+               16,
+               16,
+               32,
+               48
+       };
+       char *output_our, *output_ref;
+       char *input_our,  *input_ref;
 
-       for(i = 0; i < 6; i++) {
-               input2 = strdup(input1[i]);
-               input3 = strdup(input1[i]);
-               output1 = (char *)asmb_ref((unsigned char *)(input2));
-               output2 = (char *)asmb((unsigned char *)(input3));
+       int i,j;
+       for(i = 0; i < NUM_TESTCASES; i++) {
+               input_our = strndup(input[i], len[i]);
+               input_ref = strndup(input[i], len[i]);
 
-               printf("\n");
-#if 0
-               if(memcmp(output1,output2, len[i])) {
-#else
-               if(strncmp(output1,output2, len[i])) {
-#endif
-                       j = 0;
-                       printf("Testfall falsch; Input war: \"%s\"\n", input1[i]);
-                       printf("erwartet:\n\t\"%s\"\ntatsaechliches Ergebnis:\n\t\"%s\"\n", output1, output2);
-#if 0
-                       printf("0x");
-                       for(j = 0; j < 16; j++)
-                               printf("%02X", output2[j]);
+               output_our = asmb(input_our);
+               output_ref = asmb_ref(input_ref);
+               if(memcmp(output_our,output_ref, len[i]) != 0) {
+                       printf("Testfall falsch!\nInput:\n\t");
+                       for(j = 0; j <= len[i]; j++) {
+                               printf("%02X ", input[i][j]);
+                       }
+                       printf("\nerwartet:\n\t");
+                       for(j = 0; j <= len[i]; j++) {
+                               printf("%02X ", output_ref[j]);
+                       }
+                       printf("\ntatsaechliches Ergebnis:\n\t");
+                       for(j = 0; j <= len[i]; j++) {
+                               printf("%02X ", output_our[j]);
+                       }
                        printf("\n");
-#endif
-               } else {
-                       printf("Testfall \"%s\" passt.\n", output1);
                }
-
-               free(input2);
-               free(input3);
+               else {
+                       printf("Testfall korrekt\n");
+               }
+               free(input_our);
+               free(input_ref);
        }
-
        return 0;
 }