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 @ 43521
History | View | Annotate | Download (8.83 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.SQLSymbolTable; |
||
7 | import org.gvsig.expressionevaluator.impl.DefaultCompiler; |
||
8 | import junit.framework.TestCase; |
||
9 | import org.gvsig.expressionevaluator.LexicalAnalyzer; |
||
10 | import org.gvsig.expressionevaluator.Compiler; |
||
11 | import org.gvsig.expressionevaluator.SymbolTable; |
||
12 | import org.gvsig.expressionevaluator.Interpreter; |
||
13 | import org.gvsig.expressionevaluator.Code; |
||
14 | |||
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 | } |
||
25 | |||
26 | @Override
|
||
27 | protected void tearDown() throws Exception { |
||
28 | super.tearDown();
|
||
29 | } |
||
30 | |||
31 | // TODO add test methods here. The name must begin with 'test'. For example:
|
||
32 | // public void testHello() {}
|
||
33 | |||
34 | protected LexicalAnalyzer createLexicalAnalyzer() {
|
||
35 | SQLLexicalAnalyzer lexer = new SQLLexicalAnalyzer();
|
||
36 | return lexer;
|
||
37 | } |
||
38 | |||
39 | protected Compiler createCompiler() { |
||
40 | Compiler compiler = new DefaultCompiler(); |
||
41 | compiler.setLexicalAnalyzer(createLexicalAnalyzer()); |
||
42 | return compiler;
|
||
43 | } |
||
44 | |||
45 | protected SymbolTable createSymbolTable() {
|
||
46 | DefaultSymbolTable symbolTable = new DefaultSymbolTable(SQLSymbolTable.getInstance());
|
||
47 | symbolTable.addVar("precio", 200); |
||
48 | 43521 | jjdelcerro | symbolTable.addVar("1990", 0.168873933773767); |
49 | 43512 | jjdelcerro | return symbolTable;
|
50 | } |
||
51 | |||
52 | protected Interpreter createInterpreter(SymbolTable symbolTable) {
|
||
53 | Interpreter interpreter = new DefaultInterpreter();
|
||
54 | interpreter.setSymbolTable(symbolTable); |
||
55 | return interpreter;
|
||
56 | } |
||
57 | |||
58 | public void testIdentifier1() { |
||
59 | String source = "precio"; |
||
60 | |||
61 | SymbolTable symbolTable = createSymbolTable(); |
||
62 | Compiler compiler = createCompiler();
|
||
63 | Interpreter interpreter = createInterpreter(symbolTable); |
||
64 | |||
65 | Code code = compiler.compileExpression(source); |
||
66 | Object v = interpreter.run(code);
|
||
67 | assertEquals(200, ((Number)v).intValue()); |
||
68 | } |
||
69 | |||
70 | public void testInteger() { |
||
71 | String source = "23"; |
||
72 | |||
73 | SymbolTable symbolTable = createSymbolTable(); |
||
74 | Compiler compiler = createCompiler();
|
||
75 | Interpreter interpreter = createInterpreter(symbolTable); |
||
76 | |||
77 | Code code = compiler.compileExpression(source); |
||
78 | Object v = interpreter.run(code);
|
||
79 | assertEquals(23, ((Number)v).intValue()); |
||
80 | } |
||
81 | |||
82 | public void testTrue() { |
||
83 | String source = "true"; |
||
84 | |||
85 | SymbolTable symbolTable = createSymbolTable(); |
||
86 | Compiler compiler = createCompiler();
|
||
87 | Interpreter interpreter = createInterpreter(symbolTable); |
||
88 | |||
89 | Code code = compiler.compileExpression(source); |
||
90 | assertEquals(Boolean.TRUE, interpreter.run(code));
|
||
91 | } |
||
92 | |||
93 | public void testFalse() { |
||
94 | String source = "false"; |
||
95 | |||
96 | SymbolTable symbolTable = createSymbolTable(); |
||
97 | Compiler compiler = createCompiler();
|
||
98 | Interpreter interpreter = createInterpreter(symbolTable); |
||
99 | |||
100 | Code code = compiler.compileExpression(source); |
||
101 | assertEquals(Boolean.FALSE, interpreter.run(code));
|
||
102 | } |
||
103 | |||
104 | public void testNull() { |
||
105 | String source = "null"; |
||
106 | |||
107 | SymbolTable symbolTable = createSymbolTable(); |
||
108 | Compiler compiler = createCompiler();
|
||
109 | Interpreter interpreter = createInterpreter(symbolTable); |
||
110 | |||
111 | Code code = compiler.compileExpression(source); |
||
112 | assertEquals(null, interpreter.run(code));
|
||
113 | } |
||
114 | |||
115 | public void testAdd1() { |
||
116 | String source = "precio + 10"; |
||
117 | |||
118 | SymbolTable symbolTable = createSymbolTable(); |
||
119 | Compiler compiler = createCompiler();
|
||
120 | Interpreter interpreter = createInterpreter(symbolTable); |
||
121 | |||
122 | Code code = compiler.compileExpression(source); |
||
123 | Object v = interpreter.run(code);
|
||
124 | assertEquals(210, ((Number)v).intValue()); |
||
125 | } |
||
126 | |||
127 | public void testSub1() { |
||
128 | String source = "precio - 10"; |
||
129 | |||
130 | SymbolTable symbolTable = createSymbolTable(); |
||
131 | Compiler compiler = createCompiler();
|
||
132 | Interpreter interpreter = createInterpreter(symbolTable); |
||
133 | |||
134 | Code code = compiler.compileExpression(source); |
||
135 | Object v = interpreter.run(code);
|
||
136 | assertEquals(190, ((Number)v).intValue()); |
||
137 | } |
||
138 | |||
139 | public void testMul1() { |
||
140 | String source = "precio * 10"; |
||
141 | |||
142 | SymbolTable symbolTable = createSymbolTable(); |
||
143 | Compiler compiler = createCompiler();
|
||
144 | Interpreter interpreter = createInterpreter(symbolTable); |
||
145 | |||
146 | Code code = compiler.compileExpression(source); |
||
147 | Object v = interpreter.run(code);
|
||
148 | assertEquals(2000, ((Number)v).intValue()); |
||
149 | } |
||
150 | |||
151 | public void testDiv1() { |
||
152 | String source = "precio / 10"; |
||
153 | |||
154 | SymbolTable symbolTable = createSymbolTable(); |
||
155 | Compiler compiler = createCompiler();
|
||
156 | Interpreter interpreter = createInterpreter(symbolTable); |
||
157 | |||
158 | Code code = compiler.compileExpression(source); |
||
159 | Object v = interpreter.run(code);
|
||
160 | assertEquals(20, ((Number)v).intValue()); |
||
161 | } |
||
162 | |||
163 | public void testAdd2() { |
||
164 | String source = "precio + 10 + 20 + 30"; |
||
165 | |||
166 | SymbolTable symbolTable = createSymbolTable(); |
||
167 | Compiler compiler = createCompiler();
|
||
168 | Interpreter interpreter = createInterpreter(symbolTable); |
||
169 | |||
170 | Code code = compiler.compileExpression(source); |
||
171 | Object v = interpreter.run(code);
|
||
172 | assertEquals(260, ((Number)v).intValue()); |
||
173 | } |
||
174 | |||
175 | public void testAddMul() { |
||
176 | String source = "precio + 10 * 2 + 20 + 30"; |
||
177 | |||
178 | SymbolTable symbolTable = createSymbolTable(); |
||
179 | Compiler compiler = createCompiler();
|
||
180 | Interpreter interpreter = createInterpreter(symbolTable); |
||
181 | |||
182 | Code code = compiler.compileExpression(source); |
||
183 | Object v = interpreter.run(code);
|
||
184 | assertEquals(270, ((Number)v).intValue()); |
||
185 | } |
||
186 | |||
187 | 43519 | jjdelcerro | public void testAddMulPar() { |
188 | String source = "(precio + 10) * 2 + 20 + 30"; |
||
189 | |||
190 | SymbolTable symbolTable = createSymbolTable(); |
||
191 | Compiler compiler = createCompiler();
|
||
192 | Interpreter interpreter = createInterpreter(symbolTable); |
||
193 | |||
194 | Code code = compiler.compileExpression(source); |
||
195 | Object v = interpreter.run(code);
|
||
196 | assertEquals(470, ((Number)v).intValue()); |
||
197 | } |
||
198 | |||
199 | public void testAbs() { |
||
200 | String source = "precio + abs(10)"; |
||
201 | |||
202 | SymbolTable symbolTable = createSymbolTable(); |
||
203 | Compiler compiler = createCompiler();
|
||
204 | Interpreter interpreter = createInterpreter(symbolTable); |
||
205 | |||
206 | Code code = compiler.compileExpression(source); |
||
207 | Object v = interpreter.run(code);
|
||
208 | assertEquals(210, ((Number)v).intValue()); |
||
209 | } |
||
210 | |||
211 | public void testAbs2() { |
||
212 | String source = "precio + abs(-10)"; |
||
213 | |||
214 | SymbolTable symbolTable = createSymbolTable(); |
||
215 | Compiler compiler = createCompiler();
|
||
216 | Interpreter interpreter = createInterpreter(symbolTable); |
||
217 | |||
218 | Code code = compiler.compileExpression(source); |
||
219 | Object v = interpreter.run(code);
|
||
220 | assertEquals(210, ((Number)v).intValue()); |
||
221 | } |
||
222 | |||
223 | public void testCeil() { |
||
224 | String source = "precio + CEIL(PI())"; |
||
225 | |||
226 | SymbolTable symbolTable = createSymbolTable(); |
||
227 | Compiler compiler = createCompiler();
|
||
228 | Interpreter interpreter = createInterpreter(symbolTable); |
||
229 | |||
230 | Code code = compiler.compileExpression(source); |
||
231 | Object v = interpreter.run(code);
|
||
232 | assertEquals(204, ((Number)v).intValue()); |
||
233 | } |
||
234 | |||
235 | public void testConcat() { |
||
236 | String source = "CONCAT(precio,' euros')"; |
||
237 | |||
238 | SymbolTable symbolTable = createSymbolTable(); |
||
239 | Compiler compiler = createCompiler();
|
||
240 | Interpreter interpreter = createInterpreter(symbolTable); |
||
241 | |||
242 | Code code = compiler.compileExpression(source); |
||
243 | Object v = interpreter.run(code);
|
||
244 | assertEquals("200 euros", (String)v); |
||
245 | } |
||
246 | 43521 | jjdelcerro | |
247 | public void testAccuracy() { |
||
248 | |||
249 | SymbolTable symbolTable = createSymbolTable(); |
||
250 | Compiler compiler = createCompiler();
|
||
251 | Interpreter interpreter = createInterpreter(symbolTable); |
||
252 | Code code; |
||
253 | Object v;
|
||
254 | |||
255 | code = compiler.compileExpression("[1990] = 0.168873933773767");
|
||
256 | v = interpreter.run(code); |
||
257 | assertEquals(true, ((Boolean)v).booleanValue()); |
||
258 | |||
259 | code = compiler.compileExpression("[1990] = 0.1688739");
|
||
260 | v = interpreter.run(code); |
||
261 | assertEquals(false, ((Boolean)v).booleanValue()); |
||
262 | |||
263 | interpreter.setAccuracy(0.0000001);
|
||
264 | v = interpreter.run(code); |
||
265 | assertEquals(true, ((Boolean)v).booleanValue()); |
||
266 | } |
||
267 | |||
268 | 43512 | jjdelcerro | } |