Mercurial > hg > dmlib
annotate tests/evaltest.c @ 1305:582d49915059
A macro was missing a \ .. fixed.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sat, 19 Aug 2017 12:45:24 +0300 |
parents | 985225a93aeb |
children | a9516570cc26 |
rev | line source |
---|---|
668 | 1 #include "dmlib.h" |
2 #include "dmeval.h" | |
3 #include "dmargs.h" | |
4 | |
5 | |
683 | 6 BOOL optBenchmark = FALSE, |
7 optFloor = FALSE; | |
761
7be7c7c5deaa
Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents:
739
diff
changeset
|
8 char * optExpression = ""; |
668 | 9 |
10 | |
860
daebbf28953d
The argument handling API in dmargs* was synced with th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
761
diff
changeset
|
11 static const DMOptArg optList[] = |
668 | 12 { |
13 { 0, '?', "help", "Show this help", OPT_NONE }, | |
14 { 1, 'v', "verbose", "Be more verbose", OPT_NONE }, | |
15 { 2, 'b', "benchmark", "Run in benchmark mode", OPT_NONE }, | |
761
7be7c7c5deaa
Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents:
739
diff
changeset
|
16 { 3, 'e', "expression", "Next argument is the expression", OPT_ARGREQ }, |
683 | 17 { 4, 'f', "floor", "Clamp/floor the result value", OPT_NONE }, |
668 | 18 }; |
19 | |
20 const int optListN = sizeof(optList) / sizeof(optList[0]); | |
21 | |
22 | |
23 void argShowHelp() | |
24 { | |
761
7be7c7c5deaa
Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents:
739
diff
changeset
|
25 dmPrintBanner(stdout, dmProgName, "[options] [-e] '<expression>'"); |
860
daebbf28953d
The argument handling API in dmargs* was synced with th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
761
diff
changeset
|
26 dmArgsPrintHelp(stdout, optList, optListN, 0); |
668 | 27 } |
28 | |
29 | |
30 BOOL argHandleOpt(const int optN, char *optArg, char *currArg) | |
31 { | |
32 switch (optN) | |
33 { | |
34 case 0: | |
35 argShowHelp(); | |
36 exit(0); | |
37 break; | |
38 | |
39 case 1: | |
40 dmVerbosity++; | |
41 break; | |
42 | |
43 case 2: | |
44 optBenchmark = TRUE; | |
45 break; | |
669 | 46 |
47 case 3: | |
761
7be7c7c5deaa
Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents:
739
diff
changeset
|
48 optExpression = optArg; |
669 | 49 break; |
50 | |
683 | 51 case 4: |
52 optFloor = TRUE; | |
53 break; | |
54 | |
668 | 55 default: |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
860
diff
changeset
|
56 dmErrorMsg("Unknown option '%s'.\n", currArg); |
668 | 57 return FALSE; |
58 } | |
59 | |
60 return TRUE; | |
61 } | |
62 | |
63 | |
64 BOOL argHandleNonOpt(char *currArg) | |
65 { | |
761
7be7c7c5deaa
Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents:
739
diff
changeset
|
66 optExpression = currArg; |
668 | 67 return TRUE; |
68 } | |
69 | |
70 | |
71 int main(int argc, char *argv[]) | |
72 { | |
761
7be7c7c5deaa
Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents:
739
diff
changeset
|
73 DMEvalContext *ev = dmEvalContextNew(); |
7be7c7c5deaa
Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents:
739
diff
changeset
|
74 DMEvalNode *expr = NULL; |
668 | 75 DMValue result, t, f = 44100.0f; |
680 | 76 int ret; |
668 | 77 |
78 dmInitProg("evaltest", "evaltest", "0.1", NULL, NULL); | |
79 | |
80 // Parse arguments | |
81 if (!dmArgsProcess(argc, argv, optList, optListN, | |
860
daebbf28953d
The argument handling API in dmargs* was synced with th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
761
diff
changeset
|
82 argHandleOpt, argHandleNonOpt, OPTH_BAILOUT)) |
668 | 83 exit(1); |
84 | |
85 | |
683 | 86 // Register some variables |
761
7be7c7c5deaa
Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents:
739
diff
changeset
|
87 dmEvalContextAddVar(ev, "t", &t); |
7be7c7c5deaa
Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents:
739
diff
changeset
|
88 dmEvalContextAddVar(ev, "f", &f); |
668 | 89 |
683 | 90 |
680 | 91 // Parse expression |
761
7be7c7c5deaa
Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents:
739
diff
changeset
|
92 ret = dmEvalParseExpr(ev, optExpression, &expr); |
668 | 93 dmMsg(1, "parse ret=%d\n", ret); |
94 if (ev->err) | |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
860
diff
changeset
|
95 dmErrorMsg("%s\n", ev->errStr); |
668 | 96 |
97 if (dmVerbosity > 0) | |
761
7be7c7c5deaa
Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents:
739
diff
changeset
|
98 dmEvalPrintOpTree(stdout, ev, expr); |
668 | 99 |
100 if (ret != 0) | |
101 return -1; | |
761
7be7c7c5deaa
Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents:
739
diff
changeset
|
102 |
7be7c7c5deaa
Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents:
739
diff
changeset
|
103 // Benchmark or execute |
7be7c7c5deaa
Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents:
739
diff
changeset
|
104 dmEvalContextClear(ev); |
668 | 105 |
106 if (optBenchmark) | |
107 { | |
108 dmMsg(0, "Benchmarking ...\n"); | |
711 | 109 for (t = 0; t < 12500000; t++) |
761
7be7c7c5deaa
Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents:
739
diff
changeset
|
110 ret = dmEvalTreeExecute(ev, expr, &result); |
668 | 111 } |
112 else | |
113 { | |
761
7be7c7c5deaa
Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents:
739
diff
changeset
|
114 ret = dmEvalTreeExecute(ev, expr, &result); |
683 | 115 printf("%1.5f\n", optFloor ? (int) result : result); |
668 | 116 } |
117 | |
118 dmMsg(1, "eval ret=%d\n", ret); | |
119 | |
761
7be7c7c5deaa
Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents:
739
diff
changeset
|
120 dmEvalContextClose(ev); |
7be7c7c5deaa
Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents:
739
diff
changeset
|
121 dmEvalTreeFree(expr); |
668 | 122 |
123 return 0; | |
124 } |