annotate tests/evaltest.c @ 1257:60dc14a2e4c5

Cosmetics.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 09 Mar 2015 18:46:12 +0200
parents 985225a93aeb
children a9516570cc26
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
668
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1 #include "dmlib.h"
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2 #include "dmeval.h"
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
3 #include "dmargs.h"
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
4
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
5
683
9aeb836a99aa Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 682
diff changeset
6 BOOL optBenchmark = FALSE,
9aeb836a99aa Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 682
diff changeset
7 optFloor = FALSE;
761
7be7c7c5deaa Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents: 739
diff changeset
8 char * optExpression = "";
668
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
9
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
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
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
12 {
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
13 { 0, '?', "help", "Show this help", OPT_NONE },
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
14 { 1, 'v', "verbose", "Be more verbose", OPT_NONE },
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
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
9aeb836a99aa Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 682
diff changeset
17 { 4, 'f', "floor", "Clamp/floor the result value", OPT_NONE },
668
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
18 };
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
19
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
20 const int optListN = sizeof(optList) / sizeof(optList[0]);
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
21
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
22
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
23 void argShowHelp()
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
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
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
27 }
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
28
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
29
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
30 BOOL argHandleOpt(const int optN, char *optArg, char *currArg)
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
31 {
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
32 switch (optN)
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
33 {
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
34 case 0:
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
35 argShowHelp();
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
36 exit(0);
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
37 break;
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
38
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
39 case 1:
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
40 dmVerbosity++;
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
41 break;
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
42
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
43 case 2:
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
44 optBenchmark = TRUE;
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
45 break;
669
440b77b635a5 Add -f option to evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents: 668
diff changeset
46
440b77b635a5 Add -f option to evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents: 668
diff changeset
47 case 3:
761
7be7c7c5deaa Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents: 739
diff changeset
48 optExpression = optArg;
669
440b77b635a5 Add -f option to evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents: 668
diff changeset
49 break;
440b77b635a5 Add -f option to evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents: 668
diff changeset
50
683
9aeb836a99aa Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 682
diff changeset
51 case 4:
9aeb836a99aa Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 682
diff changeset
52 optFloor = TRUE;
9aeb836a99aa Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 682
diff changeset
53 break;
9aeb836a99aa Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 682
diff changeset
54
668
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
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
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
57 return FALSE;
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
58 }
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
59
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
60 return TRUE;
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
61 }
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
62
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
63
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
64 BOOL argHandleNonOpt(char *currArg)
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
65 {
761
7be7c7c5deaa Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents: 739
diff changeset
66 optExpression = currArg;
668
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
67 return TRUE;
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
68 }
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
69
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
70
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
71 int main(int argc, char *argv[])
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
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
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
75 DMValue result, t, f = 44100.0f;
680
4422a1880859 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 679
diff changeset
76 int ret;
668
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
77
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
78 dmInitProg("evaltest", "evaltest", "0.1", NULL, NULL);
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
79
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
80 // Parse arguments
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
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
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
83 exit(1);
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
84
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
85
683
9aeb836a99aa Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 682
diff changeset
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
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
89
683
9aeb836a99aa Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 682
diff changeset
90
680
4422a1880859 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 679
diff changeset
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
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
93 dmMsg(1, "parse ret=%d\n", ret);
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
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
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
96
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
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
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
99
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
100 if (ret != 0)
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
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
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
105
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
106 if (optBenchmark)
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
107 {
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
108 dmMsg(0, "Benchmarking ...\n");
711
4eb5a0d72397 Increase benchmark rounds.
Matti Hamalainen <ccr@tnsp.org>
parents: 700
diff changeset
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
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
111 }
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
112 else
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
113 {
761
7be7c7c5deaa Large cleanup, breaking everything. Yay.
Matti Hamalainen <ccr@tnsp.org>
parents: 739
diff changeset
114 ret = dmEvalTreeExecute(ev, expr, &result);
683
9aeb836a99aa Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 682
diff changeset
115 printf("%1.5f\n", optFloor ? (int) result : result);
668
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
116 }
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
117
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
118 dmMsg(1, "eval ret=%d\n", ret);
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
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
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
122
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
123 return 0;
69337f2fc4a4 Add evaltest.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
124 }