1 | sclass GenTesting {
|
2 | O makeGenerators; // voidfunc(L<Gen> gens, L<S> log) |
3 | |
4 | // method to compare generator output & user line |
5 | S comparison = "eqic"; |
6 | |
7 | *(O *makeGenerators) {}
|
8 | |
9 | MultiSet<S> scoreGenerators(L<S> log) {
|
10 | ret scoreGenerators(log, null); |
11 | } |
12 | |
13 | MultiSet<S> scoreGenerators(L<S> log, BitSet interestingLines) {
|
14 | new MultiSet<S> scores; |
15 | for (int i = 0; i < l(log); i++) |
16 | if (interestingLines == null || interestingLines.get(i)) |
17 | scoreGenerators1(subList(log, 0, i+1), scores); |
18 | print(/*asciiHeading2("SCORES")*/);
|
19 | for (S name : scores.getTopTen()) |
20 | print(" [" + scores.get(name) + "] " + name);
|
21 | print(); |
22 | ret scores; |
23 | } |
24 | |
25 | void scoreGenerators1(L<S> log, MultiSet<S> scores) {
|
26 | if (empty(log)) ret; |
27 | S line = last(log); |
28 | log = dropLast(log); |
29 | |
30 | genLog_set(log); |
31 | try {
|
32 | L<Gen> gens = makeGenerators(log); |
33 | |
34 | for (Gen gen : gens) {
|
35 | try {
|
36 | if (compare(callGen(gen), line)) |
37 | scores.add(gen.name); |
38 | } catch {}
|
39 | } |
40 | } finally {
|
41 | genLog_clear(); |
42 | } |
43 | } |
44 | |
45 | S callSingle(L<S> log, O genName) {
|
46 | genLog_set(log); |
47 | try {
|
48 | L<Gen> gens = makeGenerators(log); |
49 | Gen gen = findByField(gens, "name", genName); |
50 | if (gen == null) null; |
51 | ret callGen(gen); |
52 | } finally {
|
53 | genLog_clear(); |
54 | } |
55 | } |
56 | |
57 | bool verifySingle(L<S> log, O genName) {
|
58 | if (empty(log)) false; |
59 | S line = last(log); |
60 | log = dropLast(log); |
61 | |
62 | genLog_set(log); |
63 | try {
|
64 | L<Gen> gens = makeGenerators(log); |
65 | Gen gen = findByField(gens, "name", genName); |
66 | if (gen == null) false; |
67 | |
68 | try {
|
69 | if (compare(callGen(gen), line)) |
70 | true; |
71 | } catch {}
|
72 | |
73 | false; |
74 | } finally {
|
75 | genLog_clear(); |
76 | } |
77 | } |
78 | |
79 | L<Gen> makeGenerators(L<S> log) {
|
80 | new L<Gen> gens; |
81 | callF(makeGenerators, gens, log); |
82 | ret gens; |
83 | } |
84 | |
85 | // returns score |
86 | int scoreGenerator(L<S> log, S genName) {
|
87 | int score = 0; |
88 | for (int i = 1; i < l(log); i++) {
|
89 | S expect = log.get(i), s = null; |
90 | bool ok = false; |
91 | try {
|
92 | s = callSingle(subList(log, 0, i), genName); |
93 | ok = compare(s, expect); |
94 | } catch e {
|
95 | s = exceptionToStringShort(e); |
96 | } |
97 | if (ok) {
|
98 | ++score; |
99 | print(genName + " OK: " + s + (eq(s, expect) ? "" : " / " + expect)); |
100 | } else |
101 | print(genName + " NO [" + s + "]: " + expect); |
102 | } |
103 | print(); |
104 | ret score; |
105 | } |
106 | |
107 | bool compare(S a, S b) {
|
108 | if (eq(comparison, "eq")) |
109 | ret eq(a, b); |
110 | else if (eq(comparison, "eqic")) |
111 | ret eqic(a, b); |
112 | else if (eq(comparison, "match")) |
113 | ret match(a, b); |
114 | else |
115 | throw fail("Unknown comparison: " + comparison);
|
116 | } |
117 | |
118 | // run a single generator on all lines and print each line |
119 | void debugSingle(L<S> log, S name) {
|
120 | for (int i = 0; i < l(log); i++) |
121 | debugSingle1(subList(log, 0, i+1), name); |
122 | } |
123 | |
124 | void debugSingle1(L<S> log, S genName) {
|
125 | S line = last(log); |
126 | log = dropLast(log); |
127 | |
128 | genLog_set(log); |
129 | try {
|
130 | L<Gen> gens = makeGenerators(log); |
131 | Gen gen = findByField(gens, "name", genName); |
132 | if (gen == null) ret; |
133 | |
134 | bool ok = false; |
135 | try {
|
136 | ok = compare(callGen(gen), line); |
137 | } catch {}
|
138 | |
139 | print((ok ? "OK" : "NO") + " " + line); |
140 | } finally {
|
141 | genLog_clear(); |
142 | } |
143 | } |
144 | } |
Began life as a copy of #1003582
download show line numbers debug dex old transpilations
Travelled to 15 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, ddnzoavkxhuk, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
| Snippet ID: | #1003606 |
| Snippet name: | class GenTesting |
| Eternal ID of this version: | #1003606/1 |
| Text MD5: | cf4263d0dc1b92484512e97952d2d0ad |
| Author: | stefan |
| Category: | javax / talking robots |
| Type: | JavaX fragment (include) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2016-08-03 18:13:55 |
| Source code size: | 3547 bytes / 144 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 846 / 2444 |
| Referenced in: | [show references] |