|
|
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 "stMemory.h" ! 8: #include "evaluate.h" ! 9: #include "m68000.h" ! 10: #include "main.h" ! 11: #include "screen.h" ! 12: #include "video.h" ! 13: ! 14: #define VBL_VALUE 21 ! 15: ! 16: int main(int argc, const char *argv[]) ! 17: { ! 18: /* expected to fail */ ! 19: const char *failure[] = { ! 20: "1+2*", ! 21: "*1+2", ! 22: "1+(2", ! 23: "1)+2", ! 24: "foo+1+bar", ! 25: }; ! 26: /* expected to succeed, with given result */ ! 27: struct { ! 28: const char *expression; ! 29: Uint32 result; ! 30: } success[] = { ! 31: { "1+2*3", 7 }, ! 32: { "(2+5)*3", 9 }, ! 33: { "d0 + 2", 12 }, ! 34: { "VBL+10", VBL_VALUE + 10 }, ! 35: { "~%101 & $f0f0f ^ 0x21 * 0x200", 0xF4D0A }, ! 36: }; ! 37: int i, offset, tests = 0, errors = 0; ! 38: const char *expression, *errstr; ! 39: Uint32 result; ! 40: ! 41: /* set values needed by above succesful calculations */ ! 42: nVBLs = VBL_VALUE; ! 43: memset(Regs, 0, sizeof(Regs)); ! 44: Regs[REG_D0] = 10; ! 45: memset(STRam, 0, sizeof(STRam)); ! 46: /* expressions use long access */ ! 47: STRam[2+5] = 0; ! 48: STRam[2+6] = 0; ! 49: STRam[2+7] = 0; ! 50: STRam[2+8] = 3; ! 51: ! 52: fprintf(stderr, "\nExpressions that should FAIL:\n"); ! 53: ! 54: for (i = 0; i < ARRAYSIZE(failure); i++) { ! 55: expression = failure[i]; ! 56: fprintf(stderr, "- '%s'\n", expression); ! 57: errstr = Eval_Expression(expression, &result, &offset, false); ! 58: if (errstr) { ! 59: fprintf(stderr, "%*c-%s\n", ! 60: 3+offset, '^', errstr); ! 61: } else { ! 62: fprintf(stderr, " => %x\n ***Unexpected SUCCESS from expression***\n", ! 63: (Uint32)result); ! 64: errors++; ! 65: } ! 66: } ! 67: tests += i; ! 68: ! 69: fprintf(stderr, "\nExpressions that should SUCCEED with given result:\n"); ! 70: ! 71: for (i = 0; i < ARRAYSIZE(success); i++) { ! 72: expression = success[i].expression; ! 73: fprintf(stderr, "- '%s'\n", expression); ! 74: errstr = Eval_Expression(expression, &result, &offset, false); ! 75: if (errstr) { ! 76: fprintf(stderr, "%*c-%s\n ***Unexpected ERROR in expression***\n", ! 77: 3+offset, '^', errstr); ! 78: errors++; ! 79: } else if (result != success[i].result) { ! 80: fprintf(stderr, " => %x (not %x)\n ***Wrong result from expression***\n", ! 81: (Uint32)result, (Uint32)success[i].result); ! 82: errors++; ! 83: } else { ! 84: fprintf(stderr, " => 0x%x\n", (Uint32)result); ! 85: } ! 86: } ! 87: tests += i; ! 88: ! 89: if (errors) { ! 90: fprintf(stderr, "\n***Detected %d ERRORs in %d automated tests!***\n\n", ! 91: errors, tests); ! 92: } else { ! 93: fprintf(stderr, "\nFinished without any errors!\n\n"); ! 94: } ! 95: return errors; ! 96: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.