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: | 626 / 2213 |
Referenced in: | [show references] |