svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.expressionevaluator / org.gvsig.expressionevaluator.lib / org.gvsig.expressionevaluator.lib.impl / src / test / java / org / gvsig / expresionevaluator / impl / TestInterpreter.java @ 44098
History | View | Annotate | Download (13.3 KB)
1 | 43512 | jjdelcerro | package org.gvsig.expresionevaluator.impl; |
---|---|---|---|
2 | |||
3 | import org.gvsig.expressionevaluator.impl.DefaultInterpreter; |
||
4 | import org.gvsig.expressionevaluator.impl.DefaultSymbolTable; |
||
5 | import org.gvsig.expressionevaluator.impl.SQLLexicalAnalyzer; |
||
6 | import org.gvsig.expressionevaluator.impl.DefaultCompiler; |
||
7 | import junit.framework.TestCase; |
||
8 | import org.gvsig.expressionevaluator.LexicalAnalyzer; |
||
9 | import org.gvsig.expressionevaluator.Compiler; |
||
10 | import org.gvsig.expressionevaluator.SymbolTable; |
||
11 | import org.gvsig.expressionevaluator.Interpreter; |
||
12 | import org.gvsig.expressionevaluator.Code; |
||
13 | 44098 | jjdelcerro | import org.gvsig.tools.library.impl.DefaultLibrariesInitializer; |
14 | 43512 | jjdelcerro | |
15 | public class TestInterpreter extends TestCase { |
||
16 | |||
17 | public TestInterpreter(String testName) { |
||
18 | super(testName);
|
||
19 | } |
||
20 | |||
21 | @Override
|
||
22 | protected void setUp() throws Exception { |
||
23 | super.setUp();
|
||
24 | 44098 | jjdelcerro | new DefaultLibrariesInitializer().fullInitialize();
|
25 | 43512 | jjdelcerro | } |
26 | |||
27 | @Override
|
||
28 | protected void tearDown() throws Exception { |
||
29 | super.tearDown();
|
||
30 | } |
||
31 | |||
32 | // TODO add test methods here. The name must begin with 'test'. For example:
|
||
33 | // public void testHello() {}
|
||
34 | |||
35 | protected LexicalAnalyzer createLexicalAnalyzer() {
|
||
36 | SQLLexicalAnalyzer lexer = new SQLLexicalAnalyzer();
|
||
37 | return lexer;
|
||
38 | } |
||
39 | |||
40 | protected Compiler createCompiler() { |
||
41 | Compiler compiler = new DefaultCompiler(); |
||
42 | compiler.setLexicalAnalyzer(createLexicalAnalyzer()); |
||
43 | return compiler;
|
||
44 | } |
||
45 | |||
46 | protected SymbolTable createSymbolTable() {
|
||
47 | 43939 | jjdelcerro | DefaultSymbolTable symbolTable = new DefaultSymbolTable();
|
48 | symbolTable.setVar("precio", 200); |
||
49 | symbolTable.setVar("1990", 0.168873933773767); |
||
50 | 43512 | jjdelcerro | return symbolTable;
|
51 | } |
||
52 | |||
53 | protected Interpreter createInterpreter(SymbolTable symbolTable) {
|
||
54 | Interpreter interpreter = new DefaultInterpreter();
|
||
55 | interpreter.setSymbolTable(symbolTable); |
||
56 | return interpreter;
|
||
57 | } |
||
58 | |||
59 | public void testIdentifier1() { |
||
60 | String source = "precio"; |
||
61 | |||
62 | SymbolTable symbolTable = createSymbolTable(); |
||
63 | Compiler compiler = createCompiler();
|
||
64 | Interpreter interpreter = createInterpreter(symbolTable); |
||
65 | |||
66 | Code code = compiler.compileExpression(source); |
||
67 | Object v = interpreter.run(code);
|
||
68 | assertEquals(200, ((Number)v).intValue()); |
||
69 | } |
||
70 | |||
71 | public void testInteger() { |
||
72 | String source = "23"; |
||
73 | |||
74 | SymbolTable symbolTable = createSymbolTable(); |
||
75 | Compiler compiler = createCompiler();
|
||
76 | Interpreter interpreter = createInterpreter(symbolTable); |
||
77 | |||
78 | Code code = compiler.compileExpression(source); |
||
79 | Object v = interpreter.run(code);
|
||
80 | assertEquals(23, ((Number)v).intValue()); |
||
81 | } |
||
82 | |||
83 | public void testTrue() { |
||
84 | String source = "true"; |
||
85 | |||
86 | SymbolTable symbolTable = createSymbolTable(); |
||
87 | Compiler compiler = createCompiler();
|
||
88 | Interpreter interpreter = createInterpreter(symbolTable); |
||
89 | |||
90 | Code code = compiler.compileExpression(source); |
||
91 | assertEquals(Boolean.TRUE, interpreter.run(code));
|
||
92 | } |
||
93 | |||
94 | public void testFalse() { |
||
95 | String source = "false"; |
||
96 | |||
97 | SymbolTable symbolTable = createSymbolTable(); |
||
98 | Compiler compiler = createCompiler();
|
||
99 | Interpreter interpreter = createInterpreter(symbolTable); |
||
100 | |||
101 | Code code = compiler.compileExpression(source); |
||
102 | assertEquals(Boolean.FALSE, interpreter.run(code));
|
||
103 | } |
||
104 | |||
105 | public void testNull() { |
||
106 | String source = "null"; |
||
107 | |||
108 | SymbolTable symbolTable = createSymbolTable(); |
||
109 | Compiler compiler = createCompiler();
|
||
110 | Interpreter interpreter = createInterpreter(symbolTable); |
||
111 | |||
112 | Code code = compiler.compileExpression(source); |
||
113 | assertEquals(null, interpreter.run(code));
|
||
114 | } |
||
115 | |||
116 | public void testAdd1() { |
||
117 | String source = "precio + 10"; |
||
118 | |||
119 | SymbolTable symbolTable = createSymbolTable(); |
||
120 | Compiler compiler = createCompiler();
|
||
121 | Interpreter interpreter = createInterpreter(symbolTable); |
||
122 | |||
123 | Code code = compiler.compileExpression(source); |
||
124 | Object v = interpreter.run(code);
|
||
125 | assertEquals(210, ((Number)v).intValue()); |
||
126 | } |
||
127 | |||
128 | 44098 | jjdelcerro | public void testSimpleAdd1() { |
129 | String source = "5+10"; |
||
130 | |||
131 | SymbolTable symbolTable = createSymbolTable(); |
||
132 | Compiler compiler = createCompiler();
|
||
133 | Interpreter interpreter = createInterpreter(symbolTable); |
||
134 | |||
135 | Code code = compiler.compileExpression(source); |
||
136 | Object v = interpreter.run(code);
|
||
137 | assertEquals(15, ((Number)v).intValue()); |
||
138 | } |
||
139 | |||
140 | public void testSimpleAdd2() { |
||
141 | String source = "5 + 10"; |
||
142 | |||
143 | SymbolTable symbolTable = createSymbolTable(); |
||
144 | Compiler compiler = createCompiler();
|
||
145 | Interpreter interpreter = createInterpreter(symbolTable); |
||
146 | |||
147 | Code code = compiler.compileExpression(source); |
||
148 | Object v = interpreter.run(code);
|
||
149 | assertEquals(15, ((Number)v).intValue()); |
||
150 | } |
||
151 | |||
152 | public void testSimpleAdd3() { |
||
153 | String source = "10+-5"; |
||
154 | |||
155 | SymbolTable symbolTable = createSymbolTable(); |
||
156 | Compiler compiler = createCompiler();
|
||
157 | Interpreter interpreter = createInterpreter(symbolTable); |
||
158 | |||
159 | Code code = compiler.compileExpression(source); |
||
160 | Object v = interpreter.run(code);
|
||
161 | assertEquals(5, ((Number)v).intValue()); |
||
162 | } |
||
163 | |||
164 | public void testSimpleSub1() { |
||
165 | String source = "10-5"; |
||
166 | |||
167 | SymbolTable symbolTable = createSymbolTable(); |
||
168 | Compiler compiler = createCompiler();
|
||
169 | Interpreter interpreter = createInterpreter(symbolTable); |
||
170 | |||
171 | Code code = compiler.compileExpression(source); |
||
172 | Object v = interpreter.run(code);
|
||
173 | assertEquals(5, ((Number)v).intValue()); |
||
174 | } |
||
175 | |||
176 | public void testSimpleSub2() { |
||
177 | String source = "10 - 5"; |
||
178 | |||
179 | SymbolTable symbolTable = createSymbolTable(); |
||
180 | Compiler compiler = createCompiler();
|
||
181 | Interpreter interpreter = createInterpreter(symbolTable); |
||
182 | |||
183 | Code code = compiler.compileExpression(source); |
||
184 | Object v = interpreter.run(code);
|
||
185 | assertEquals(5, ((Number)v).intValue()); |
||
186 | } |
||
187 | |||
188 | public void testSimpleNumber() { |
||
189 | String source = "23"; |
||
190 | |||
191 | SymbolTable symbolTable = createSymbolTable(); |
||
192 | Compiler compiler = createCompiler();
|
||
193 | Interpreter interpreter = createInterpreter(symbolTable); |
||
194 | |||
195 | Code code = compiler.compileExpression(source); |
||
196 | Object v = interpreter.run(code);
|
||
197 | assertEquals(23, ((Number)v).intValue()); |
||
198 | } |
||
199 | |||
200 | public void testSimpleNegativeNumber() { |
||
201 | String source = "-23"; |
||
202 | |||
203 | SymbolTable symbolTable = createSymbolTable(); |
||
204 | Compiler compiler = createCompiler();
|
||
205 | Interpreter interpreter = createInterpreter(symbolTable); |
||
206 | |||
207 | Code code = compiler.compileExpression(source); |
||
208 | Object v = interpreter.run(code);
|
||
209 | assertEquals(-23, ((Number)v).intValue()); |
||
210 | } |
||
211 | |||
212 | public void testNegateFunction() { |
||
213 | String source = "-PI()"; |
||
214 | |||
215 | SymbolTable symbolTable = createSymbolTable(); |
||
216 | Compiler compiler = createCompiler();
|
||
217 | Interpreter interpreter = createInterpreter(symbolTable); |
||
218 | |||
219 | Code code = compiler.compileExpression(source); |
||
220 | Object v = interpreter.run(code);
|
||
221 | assertEquals(-Math.PI, ((Number)v).doubleValue()); |
||
222 | } |
||
223 | |||
224 | 43512 | jjdelcerro | public void testSub1() { |
225 | String source = "precio - 10"; |
||
226 | |||
227 | SymbolTable symbolTable = createSymbolTable(); |
||
228 | Compiler compiler = createCompiler();
|
||
229 | Interpreter interpreter = createInterpreter(symbolTable); |
||
230 | |||
231 | Code code = compiler.compileExpression(source); |
||
232 | Object v = interpreter.run(code);
|
||
233 | assertEquals(190, ((Number)v).intValue()); |
||
234 | } |
||
235 | |||
236 | public void testMul1() { |
||
237 | String source = "precio * 10"; |
||
238 | |||
239 | SymbolTable symbolTable = createSymbolTable(); |
||
240 | Compiler compiler = createCompiler();
|
||
241 | Interpreter interpreter = createInterpreter(symbolTable); |
||
242 | |||
243 | Code code = compiler.compileExpression(source); |
||
244 | Object v = interpreter.run(code);
|
||
245 | assertEquals(2000, ((Number)v).intValue()); |
||
246 | } |
||
247 | |||
248 | public void testDiv1() { |
||
249 | String source = "precio / 10"; |
||
250 | |||
251 | SymbolTable symbolTable = createSymbolTable(); |
||
252 | Compiler compiler = createCompiler();
|
||
253 | Interpreter interpreter = createInterpreter(symbolTable); |
||
254 | |||
255 | Code code = compiler.compileExpression(source); |
||
256 | Object v = interpreter.run(code);
|
||
257 | assertEquals(20, ((Number)v).intValue()); |
||
258 | } |
||
259 | |||
260 | public void testAdd2() { |
||
261 | String source = "precio + 10 + 20 + 30"; |
||
262 | |||
263 | SymbolTable symbolTable = createSymbolTable(); |
||
264 | Compiler compiler = createCompiler();
|
||
265 | Interpreter interpreter = createInterpreter(symbolTable); |
||
266 | |||
267 | Code code = compiler.compileExpression(source); |
||
268 | Object v = interpreter.run(code);
|
||
269 | assertEquals(260, ((Number)v).intValue()); |
||
270 | } |
||
271 | |||
272 | public void testAddMul() { |
||
273 | String source = "precio + 10 * 2 + 20 + 30"; |
||
274 | |||
275 | SymbolTable symbolTable = createSymbolTable(); |
||
276 | Compiler compiler = createCompiler();
|
||
277 | Interpreter interpreter = createInterpreter(symbolTable); |
||
278 | |||
279 | Code code = compiler.compileExpression(source); |
||
280 | Object v = interpreter.run(code);
|
||
281 | assertEquals(270, ((Number)v).intValue()); |
||
282 | } |
||
283 | |||
284 | 43519 | jjdelcerro | public void testAddMulPar() { |
285 | String source = "(precio + 10) * 2 + 20 + 30"; |
||
286 | |||
287 | SymbolTable symbolTable = createSymbolTable(); |
||
288 | Compiler compiler = createCompiler();
|
||
289 | Interpreter interpreter = createInterpreter(symbolTable); |
||
290 | |||
291 | Code code = compiler.compileExpression(source); |
||
292 | Object v = interpreter.run(code);
|
||
293 | assertEquals(470, ((Number)v).intValue()); |
||
294 | } |
||
295 | |||
296 | public void testAbs() { |
||
297 | String source = "precio + abs(10)"; |
||
298 | |||
299 | SymbolTable symbolTable = createSymbolTable(); |
||
300 | Compiler compiler = createCompiler();
|
||
301 | Interpreter interpreter = createInterpreter(symbolTable); |
||
302 | |||
303 | Code code = compiler.compileExpression(source); |
||
304 | Object v = interpreter.run(code);
|
||
305 | assertEquals(210, ((Number)v).intValue()); |
||
306 | } |
||
307 | |||
308 | public void testAbs2() { |
||
309 | String source = "precio + abs(-10)"; |
||
310 | |||
311 | SymbolTable symbolTable = createSymbolTable(); |
||
312 | Compiler compiler = createCompiler();
|
||
313 | Interpreter interpreter = createInterpreter(symbolTable); |
||
314 | |||
315 | Code code = compiler.compileExpression(source); |
||
316 | Object v = interpreter.run(code);
|
||
317 | assertEquals(210, ((Number)v).intValue()); |
||
318 | } |
||
319 | |||
320 | public void testCeil() { |
||
321 | String source = "precio + CEIL(PI())"; |
||
322 | |||
323 | SymbolTable symbolTable = createSymbolTable(); |
||
324 | Compiler compiler = createCompiler();
|
||
325 | Interpreter interpreter = createInterpreter(symbolTable); |
||
326 | |||
327 | Code code = compiler.compileExpression(source); |
||
328 | Object v = interpreter.run(code);
|
||
329 | assertEquals(204, ((Number)v).intValue()); |
||
330 | } |
||
331 | |||
332 | public void testConcat() { |
||
333 | String source = "CONCAT(precio,' euros')"; |
||
334 | |||
335 | SymbolTable symbolTable = createSymbolTable(); |
||
336 | Compiler compiler = createCompiler();
|
||
337 | Interpreter interpreter = createInterpreter(symbolTable); |
||
338 | |||
339 | Code code = compiler.compileExpression(source); |
||
340 | Object v = interpreter.run(code);
|
||
341 | assertEquals("200 euros", (String)v); |
||
342 | } |
||
343 | 43521 | jjdelcerro | |
344 | public void testAccuracy() { |
||
345 | |||
346 | SymbolTable symbolTable = createSymbolTable(); |
||
347 | Compiler compiler = createCompiler();
|
||
348 | Interpreter interpreter = createInterpreter(symbolTable); |
||
349 | Code code; |
||
350 | Object v;
|
||
351 | |||
352 | code = compiler.compileExpression("[1990] = 0.168873933773767");
|
||
353 | v = interpreter.run(code); |
||
354 | assertEquals(true, ((Boolean)v).booleanValue()); |
||
355 | |||
356 | code = compiler.compileExpression("[1990] = 0.1688739");
|
||
357 | v = interpreter.run(code); |
||
358 | assertEquals(false, ((Boolean)v).booleanValue()); |
||
359 | |||
360 | interpreter.setAccuracy(0.0000001);
|
||
361 | v = interpreter.run(code); |
||
362 | assertEquals(true, ((Boolean)v).booleanValue()); |
||
363 | 43532 | jjdelcerro | } |
364 | |||
365 | public void test2fields() { |
||
366 | String source = "[1990] = [precio]"; |
||
367 | |||
368 | SymbolTable symbolTable = createSymbolTable(); |
||
369 | Compiler compiler = createCompiler();
|
||
370 | Interpreter interpreter = createInterpreter(symbolTable); |
||
371 | |||
372 | Code code = compiler.compileExpression(source); |
||
373 | Object v = interpreter.run(code);
|
||
374 | assertEquals(false, ((Boolean)v).booleanValue()); |
||
375 | 43939 | jjdelcerro | } |
376 | |||
377 | |||
378 | public void testInvokeMethod1() { |
||
379 | String source = "'hola'.length()"; |
||
380 | |||
381 | SymbolTable symbolTable = createSymbolTable(); |
||
382 | Compiler compiler = createCompiler();
|
||
383 | Interpreter interpreter = createInterpreter(symbolTable); |
||
384 | |||
385 | Code code = compiler.compileExpression(source); |
||
386 | Object v = interpreter.run(code);
|
||
387 | |||
388 | assertEquals(4, ((Number)v).intValue()); |
||
389 | } |
||
390 | |||
391 | |||
392 | public void testInvokeMethod2() { |
||
393 | String source = "'hola'.indexOf('l')"; |
||
394 | |||
395 | SymbolTable symbolTable = createSymbolTable(); |
||
396 | Compiler compiler = createCompiler();
|
||
397 | Interpreter interpreter = createInterpreter(symbolTable); |
||
398 | |||
399 | Code code = compiler.compileExpression(source); |
||
400 | Object v = interpreter.run(code);
|
||
401 | |||
402 | assertEquals(2, ((Number)v).intValue()); |
||
403 | } |
||
404 | |||
405 | |||
406 | } |