|
|
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.