|
|
1.1 ! root 1: /* ! 2: * Code to test Hatari expression evaluation in src/debug/evaluate.c ! 3: */ ! 4: #include <stdio.h> ! 5: #include <SDL_types.h> ! 6: #include <stdbool.h> ! 7: #include "evaluate.h" ! 8: #include "main.h" ! 9: ! 10: int main(int argc, const char *argv[]) ! 11: { ! 12: /* expected to fail */ ! 13: const char *failure[] = { ! 14: "1+2*", ! 15: "*1+2", ! 16: "1+(2", ! 17: "1)+2", ! 18: }; ! 19: /* expected to succeed, with given result */ ! 20: struct { ! 21: const char *expression; ! 22: Uint32 result; ! 23: } success[] = { ! 24: { "1+2*3", 7 }, ! 25: { "(1+2)*3", 9 }, ! 26: { "((0x21 * 0x200) + (-5)) ^ (~%111 & $f0f0f0)", 0xF0B10B }, ! 27: }; ! 28: int i, offset, tests = 0, errors = 0; ! 29: const char *expression, *errstr; ! 30: Uint32 result; ! 31: ! 32: fprintf(stderr, "\nExpressions that should FAIL:\n"); ! 33: ! 34: for (i = 0; i < ARRAYSIZE(failure); i++) { ! 35: expression = failure[i]; ! 36: errstr = Eval_Expression(expression, &result, &offset, false); ! 37: if (errstr) { ! 38: fprintf(stderr, "- '%s'\n%*c-%s\n", ! 39: expression, 3+offset, '^', errstr); ! 40: } else { ! 41: fprintf(stderr, "***Unexpected SUCCESS from expression***\n- '%s' = %x\n", ! 42: expression, (Uint32)result); ! 43: errors++; ! 44: } ! 45: } ! 46: tests += i; ! 47: ! 48: fprintf(stderr, "\nExpressions that should SUCCEED with given result:\n"); ! 49: ! 50: for (i = 0; i < ARRAYSIZE(success); i++) { ! 51: expression = success[i].expression; ! 52: errstr = Eval_Expression(expression, &result, &offset, false); ! 53: if (errstr) { ! 54: fprintf(stderr, "***Unexpected ERROR in expression***\n- '%s'\n%*c-%s\n", ! 55: expression, 3+offset, '^', errstr); ! 56: errors++; ! 57: } else if (result != success[i].result) { ! 58: fprintf(stderr, "***Wrong result from expression***\n- '%s' = %x (not %x)\n", ! 59: expression, (Uint32)result, (Uint32)success[i].result); ! 60: errors++; ! 61: } else { ! 62: fprintf(stderr, "- '%s' = 0x%x\n", ! 63: expression, (Uint32)result); ! 64: } ! 65: } ! 66: tests += i; ! 67: ! 68: if (errors) { ! 69: fprintf(stderr, "\n***Detected %d ERRORs in %d automated tests!***\n\n", ! 70: errors, tests); ! 71: } else { ! 72: fprintf(stderr, "\nFinished without any errors!\n\n"); ! 73: } ! 74: return errors; ! 75: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.