Revision 44139
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/TestCompiler.java | ||
---|---|---|
1 | 1 |
package org.gvsig.expresionevaluator.impl; |
2 | 2 |
|
3 |
import org.gvsig.expressionevaluator.impl.SQLLexicalAnalyzer; |
|
4 |
import org.gvsig.expressionevaluator.impl.DefaultCompiler; |
|
5 | 3 |
import junit.framework.TestCase; |
6 | 4 |
import org.gvsig.expressionevaluator.LexicalAnalyzer; |
7 | 5 |
import org.gvsig.expressionevaluator.Compiler; |
8 | 6 |
import org.gvsig.expressionevaluator.Code; |
7 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
|
8 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
|
9 | 9 |
import org.gvsig.expressionevaluator.ExpressionSyntaxException; |
10 | 10 |
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer; |
11 | 11 |
|
... | ... | |
30 | 30 |
// TODO add test methods here. The name must begin with 'test'. For example: |
31 | 31 |
// public void testHello() {} |
32 | 32 |
|
33 |
|
|
33 | 34 |
protected LexicalAnalyzer createLexicalAnalyzer() { |
34 |
SQLLexicalAnalyzer lexer = new SQLLexicalAnalyzer(); |
|
35 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
36 |
LexicalAnalyzer lexer = manager.createLexicalAnalyzer(); |
|
35 | 37 |
return lexer; |
36 | 38 |
} |
37 |
|
|
38 |
protected Compiler createCompiler() { |
|
39 |
Compiler compiler = new DefaultCompiler(); |
|
39 |
|
|
40 |
protected org.gvsig.expressionevaluator.Compiler createCompiler() { |
|
41 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
42 |
Compiler compiler = manager.createCompiler(); |
|
40 | 43 |
compiler.setLexicalAnalyzer(createLexicalAnalyzer()); |
41 | 44 |
return compiler; |
42 | 45 |
} |
43 | 46 |
|
44 |
|
|
45 | 47 |
public void testIdentifier1() { |
46 | 48 |
String source = "precio"; |
47 | 49 |
|
... | ... | |
51 | 53 |
} |
52 | 54 |
|
53 | 55 |
public void testIdentifier2() { |
56 |
Compiler compiler = createCompiler(); |
|
57 |
compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true); |
|
58 |
|
|
54 | 59 |
String source = "[precio]"; |
55 | 60 |
|
56 |
Compiler compiler = createCompiler(); |
|
57 | 61 |
Code code = compiler.compileExpression(source); |
58 | 62 |
assertEquals("\"precio\"", code.toString()); |
59 | 63 |
} |
60 | 64 |
|
61 | 65 |
public void testIdentifier3() { |
66 |
Compiler compiler = createCompiler(); |
|
67 |
|
|
62 | 68 |
String source = "\"precio\""; |
63 | 69 |
|
64 |
Compiler compiler = createCompiler(); |
|
65 | 70 |
Code code = compiler.compileExpression(source); |
66 | 71 |
assertEquals("\"precio\"", code.toString()); |
67 | 72 |
} |
... | ... | |
72 | 77 |
|
73 | 78 |
Compiler compiler = createCompiler(); |
74 | 79 |
Code code = compiler.compileExpression(source); |
75 |
assertEquals("true", code.toString());
|
|
80 |
assertEquals("TRUE", code.toString());
|
|
76 | 81 |
} |
77 | 82 |
|
78 | 83 |
public void testFalse() { |
... | ... | |
80 | 85 |
|
81 | 86 |
Compiler compiler = createCompiler(); |
82 | 87 |
Code code = compiler.compileExpression(source); |
83 |
assertEquals("false", code.toString());
|
|
88 |
assertEquals("FALSE", code.toString());
|
|
84 | 89 |
} |
85 | 90 |
|
86 | 91 |
public void testNull() { |
... | ... | |
88 | 93 |
|
89 | 94 |
Compiler compiler = createCompiler(); |
90 | 95 |
Code code = compiler.compileExpression(source); |
91 |
assertEquals("null", code.toString());
|
|
96 |
assertEquals("NULL", code.toString());
|
|
92 | 97 |
} |
93 | 98 |
|
94 | 99 |
public void testNotTrue() { |
... | ... | |
96 | 101 |
|
97 | 102 |
Compiler compiler = createCompiler(); |
98 | 103 |
Code code = compiler.compileExpression(source); |
99 |
assertEquals("not(true)", code.toString());
|
|
104 |
assertEquals("NOT(TRUE)", code.toString());
|
|
100 | 105 |
} |
101 | 106 |
|
102 | 107 |
public void testInteger() { |
... | ... | |
123 | 128 |
operator(">="); |
124 | 129 |
operator("<"); |
125 | 130 |
operator("<="); |
126 |
operator("like"); |
|
127 |
operator("ilike"); |
|
131 |
operator("LIKE"); |
|
132 |
operator("ILIKE"); |
|
133 |
operator("||"); |
|
128 | 134 |
operator("+"); |
129 | 135 |
operator("-"); |
130 | 136 |
operator("*"); |
131 |
// operator("^"); |
|
132 |
operator("or"); |
|
133 |
operator("and"); |
|
137 |
operator("OR"); |
|
138 |
operator("AND"); |
|
134 | 139 |
operator("%"); |
135 |
operator("is"); |
|
140 |
operator("IS"); |
|
141 |
|
|
142 |
operator("~"); |
|
136 | 143 |
} |
137 | 144 |
|
138 | 145 |
public void testAddMul() { |
... | ... | |
168 | 175 |
Compiler compiler = createCompiler(); |
169 | 176 |
|
170 | 177 |
Code code = compiler.compileExpression(source); |
171 |
assertEquals("+(\"precio\", abs(negate(10)))", code.toString());
|
|
178 |
assertEquals("+(\"precio\", abs(NEGATE(10)))", code.toString());
|
|
172 | 179 |
} |
173 | 180 |
|
174 | 181 |
public void testPI() { |
... | ... | |
189 | 196 |
assertEquals("+(\"precio\", CEIL(PI()))", code.toString()); |
190 | 197 |
} |
191 | 198 |
|
199 |
public void testGetitem1() { |
|
200 |
String source = "LIST('uno','dos','tres')[1]" ; |
|
201 |
|
|
202 |
Compiler compiler = createCompiler(); |
|
203 |
|
|
204 |
Code code = compiler.compileExpression(source); |
|
205 |
assertEquals("GETITEM(LIST('uno', 'dos', 'tres'), 1)", code.toString()); |
|
206 |
} |
|
207 |
|
|
192 | 208 |
public void testConcat() { |
193 | 209 |
String source = "CONCAT(precio,' euros')"; |
194 | 210 |
|
... | ... | |
208 | 224 |
} |
209 | 225 |
|
210 | 226 |
public void test2() { |
227 |
Compiler compiler = createCompiler(); |
|
228 |
compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true); |
|
229 |
|
|
211 | 230 |
String source = "[1990] = 0.168873933773767"; |
212 | 231 |
|
213 |
Compiler compiler = createCompiler(); |
|
214 |
|
|
215 | 232 |
Code code = compiler.compileExpression(source); |
216 | 233 |
assertEquals("=(\"1990\", 0.168873933773767)", code.toString()); |
217 | 234 |
} |
218 | 235 |
|
219 | 236 |
public void test2fields() { |
237 |
Compiler compiler = createCompiler(); |
|
238 |
compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true); |
|
239 |
|
|
220 | 240 |
String source = "[1990] = [precio]"; |
221 | 241 |
|
222 |
Compiler compiler = createCompiler(); |
|
223 |
|
|
224 | 242 |
Code code = compiler.compileExpression(source); |
225 | 243 |
assertEquals("=(\"1990\", \"precio\")", code.toString()); |
226 | 244 |
} |
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/TestGrammarInterpreter.java | ||
---|---|---|
1 |
package org.gvsig.expresionevaluator.impl; |
|
2 |
|
|
3 |
import static junit.framework.Assert.assertEquals; |
|
4 |
import junit.framework.TestCase; |
|
5 |
import org.gvsig.expressionevaluator.Code; |
|
6 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
|
7 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
|
8 |
import org.gvsig.expressionevaluator.Interpreter; |
|
9 |
import org.gvsig.expressionevaluator.LexicalAnalyzer; |
|
10 |
import org.gvsig.expressionevaluator.SymbolTable; |
|
11 |
import org.gvsig.expressionevaluator.Compiler; |
|
12 |
import org.gvsig.expressionevaluator.MutableSymbolTable; |
|
13 |
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer; |
|
14 |
|
|
15 |
/** |
|
16 |
* |
|
17 |
* @author jjdelcerro |
|
18 |
*/ |
|
19 |
public class TestGrammarInterpreter extends TestCase { |
|
20 |
|
|
21 |
public TestGrammarInterpreter(String testName) { |
|
22 |
super(testName); |
|
23 |
} |
|
24 |
|
|
25 |
@Override |
|
26 |
protected void setUp() throws Exception { |
|
27 |
super.setUp(); |
|
28 |
new DefaultLibrariesInitializer().fullInitialize(); |
|
29 |
} |
|
30 |
|
|
31 |
@Override |
|
32 |
protected void tearDown() throws Exception { |
|
33 |
super.tearDown(); |
|
34 |
} |
|
35 |
|
|
36 |
// TODO add test methods here. The name must begin with 'test'. For example: |
|
37 |
// public void testHello() {} |
|
38 |
|
|
39 |
protected LexicalAnalyzer createLexicalAnalyzer() { |
|
40 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
41 |
LexicalAnalyzer lexer = manager.createLexicalAnalyzer(); |
|
42 |
return lexer; |
|
43 |
} |
|
44 |
|
|
45 |
protected org.gvsig.expressionevaluator.Compiler createCompiler() { |
|
46 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
47 |
Compiler compiler = manager.createCompiler(); |
|
48 |
compiler.setLexicalAnalyzer(createLexicalAnalyzer()); |
|
49 |
return compiler; |
|
50 |
} |
|
51 |
|
|
52 |
protected MutableSymbolTable createSymbolTable() { |
|
53 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
54 |
MutableSymbolTable symbolTable = manager.createSymbolTable(); |
|
55 |
symbolTable.setVar("precio", 200); |
|
56 |
symbolTable.setVar("1990", 0.168873933773767); |
|
57 |
return symbolTable; |
|
58 |
} |
|
59 |
|
|
60 |
protected Interpreter createInterpreter(SymbolTable symbolTable) { |
|
61 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
62 |
Interpreter interpreter = manager.createInterpreter(); |
|
63 |
interpreter.setSymbolTable(symbolTable); |
|
64 |
return interpreter; |
|
65 |
} |
|
66 |
|
|
67 |
public void testLet() { |
|
68 |
SymbolTable symbolTable = createSymbolTable(); |
|
69 |
Compiler compiler = createCompiler(); |
|
70 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
71 |
|
|
72 |
String source = "LET V1 = 23"; |
|
73 |
|
|
74 |
Code code = compiler.compileExpression(source); |
|
75 |
Object v = interpreter.run(code); |
|
76 |
|
|
77 |
assertEquals(23, symbolTable.value("V1")); |
|
78 |
} |
|
79 |
|
|
80 |
public void testBlock() { |
|
81 |
SymbolTable symbolTable = createSymbolTable(); |
|
82 |
Compiler compiler = createCompiler(); |
|
83 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
84 |
|
|
85 |
String source = "BEGIN SET V1 = 23 END"; |
|
86 |
Code code = compiler.compileExpression(source); |
|
87 |
Object v = interpreter.run(code); |
|
88 |
|
|
89 |
assertEquals(23, symbolTable.value("V1")); |
|
90 |
} |
|
91 |
|
|
92 |
public void testBlock2() { |
|
93 |
SymbolTable symbolTable = createSymbolTable(); |
|
94 |
Compiler compiler = createCompiler(); |
|
95 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
96 |
|
|
97 |
String source = "BEGIN SET V1 = 11; SET V2 = 22 END"; |
|
98 |
Code code = compiler.compileExpression(source); |
|
99 |
Object v = interpreter.run(code); |
|
100 |
|
|
101 |
assertEquals((Integer)11, symbolTable.value("V1")); |
|
102 |
assertEquals((Integer)22, symbolTable.value("V2")); |
|
103 |
} |
|
104 |
|
|
105 |
public void testIfThen() { |
|
106 |
MutableSymbolTable symbolTable = createSymbolTable(); |
|
107 |
Compiler compiler = createCompiler(); |
|
108 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
109 |
|
|
110 |
symbolTable.setVar("V1", 10); |
|
111 |
String source = "IF V1 = 11 THEN SET V2 = 22"; |
|
112 |
Code code = compiler.compileExpression(source); |
|
113 |
Object v = interpreter.run(code); |
|
114 |
|
|
115 |
assertEquals(null, v); |
|
116 |
assertEquals((Integer)10, symbolTable.value("V1")); |
|
117 |
assertEquals(null, symbolTable.value("V2")); |
|
118 |
|
|
119 |
symbolTable.setVar("V1", 11); |
|
120 |
source = "IF V1 = 11 THEN SET V2 = 22"; |
|
121 |
code = compiler.compileExpression(source); |
|
122 |
v = interpreter.run(code); |
|
123 |
|
|
124 |
assertEquals((Integer)22, v); |
|
125 |
assertEquals((Integer)11, symbolTable.value("V1")); |
|
126 |
assertEquals((Integer)22, symbolTable.value("V2")); |
|
127 |
} |
|
128 |
|
|
129 |
public void testIfThenElse() { |
|
130 |
MutableSymbolTable symbolTable = createSymbolTable(); |
|
131 |
Compiler compiler = createCompiler(); |
|
132 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
133 |
|
|
134 |
symbolTable.setVar("V1", 10); |
|
135 |
String source = "IF V1 = 11 THEN SET V2 = 11 ELSE SET V2 = 22"; |
|
136 |
Code code = compiler.compileExpression(source); |
|
137 |
Object v = interpreter.run(code); |
|
138 |
|
|
139 |
assertEquals((Integer)22, v); |
|
140 |
assertEquals((Integer)10, symbolTable.value("V1")); |
|
141 |
assertEquals((Integer)22, symbolTable.value("V2")); |
|
142 |
} |
|
143 |
|
|
144 |
public void testIfThenBlock() { |
|
145 |
MutableSymbolTable symbolTable = createSymbolTable(); |
|
146 |
Compiler compiler = createCompiler(); |
|
147 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
148 |
|
|
149 |
symbolTable.setVar("V1", 11); |
|
150 |
String source = "IF V1 = 11 THEN BEGIN LET V2 = 22; LET V1 = 10 END"; |
|
151 |
Code code = compiler.compileExpression(source); |
|
152 |
Object v = interpreter.run(code); |
|
153 |
|
|
154 |
assertEquals((Integer)10, v); |
|
155 |
assertEquals((Integer)10, symbolTable.value("V1")); |
|
156 |
assertEquals((Integer)22, symbolTable.value("V2")); |
|
157 |
} |
|
158 |
|
|
159 |
public void testWhile() { |
|
160 |
MutableSymbolTable symbolTable = createSymbolTable(); |
|
161 |
Compiler compiler = createCompiler(); |
|
162 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
163 |
|
|
164 |
symbolTable.setVar("n",0); |
|
165 |
String source = "WHILE n < 10 SET n = n + 1"; |
|
166 |
Code code = compiler.compileExpression(source); |
|
167 |
Object v = interpreter.run(code); |
|
168 |
|
|
169 |
assertEquals((Integer)10, v); |
|
170 |
assertEquals((Integer)10, symbolTable.value("n")); |
|
171 |
} |
|
172 |
|
|
173 |
public void testWhileBlock() { |
|
174 |
MutableSymbolTable symbolTable = createSymbolTable(); |
|
175 |
Compiler compiler = createCompiler(); |
|
176 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
177 |
|
|
178 |
symbolTable.setVar("n",0); |
|
179 |
String source = "WHILE n < 10 BEGIN SET n = n + 1; print(n) END"; |
|
180 |
Code code = compiler.compileExpression(source); |
|
181 |
Object v = interpreter.run(code); |
|
182 |
|
|
183 |
assertEquals((Integer)10, v); |
|
184 |
assertEquals((Integer)10, symbolTable.value("n")); |
|
185 |
} |
|
186 |
|
|
187 |
public void testCast() { |
|
188 |
MutableSymbolTable symbolTable = createSymbolTable(); |
|
189 |
Compiler compiler = createCompiler(); |
|
190 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
191 |
|
|
192 |
symbolTable.setVar("n",1.0); |
|
193 |
String source = "CAST n AS INTEGER"; |
|
194 |
Code code = compiler.compileExpression(source); |
|
195 |
Object v = interpreter.run(code); |
|
196 |
|
|
197 |
assertEquals((Integer)1, v); |
|
198 |
assertEquals((Double)1.0, symbolTable.value("n")); |
|
199 |
} |
|
200 |
|
|
201 |
public void testMatch() { |
|
202 |
Compiler compiler = createCompiler(); |
|
203 |
String source; |
|
204 |
Code code; |
|
205 |
|
|
206 |
source = "MATCH 'Hola', '[Hh]ola'"; |
|
207 |
code = compiler.compileExpression(source); |
|
208 |
assertEquals("~('Hola', '[Hh]ola')", code.toString()); |
|
209 |
|
|
210 |
source = "MATCH 'Hola' '[Hh]ola'"; |
|
211 |
code = compiler.compileExpression(source); |
|
212 |
assertEquals("~('Hola', '[Hh]ola')", code.toString()); |
|
213 |
|
|
214 |
source = "MATCH('Hola', '[Hh]ola')"; |
|
215 |
code = compiler.compileExpression(source); |
|
216 |
assertEquals("~('Hola', '[Hh]ola')", code.toString()); |
|
217 |
} |
|
218 |
|
|
219 |
public void testForEach() { |
|
220 |
MutableSymbolTable symbolTable = createSymbolTable(); |
|
221 |
Compiler compiler = createCompiler(); |
|
222 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
223 |
|
|
224 |
String source = "FOR n in RANGE(10) print(n)"; |
|
225 |
Code code = compiler.compileExpression(source); |
|
226 |
Object v = interpreter.run(code); |
|
227 |
|
|
228 |
assertEquals((Long)9L, v); |
|
229 |
assertEquals((Long)9L, symbolTable.value("n")); |
|
230 |
} |
|
231 |
|
|
232 |
public void testCase() { |
|
233 |
MutableSymbolTable symbolTable = createSymbolTable(); |
|
234 |
Compiler compiler = createCompiler(); |
|
235 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
236 |
|
|
237 |
symbolTable.setVar("software","unknown"); |
|
238 |
String source = "CASE WHEN software LIKE '%gvSIG%' THEN 'gvSIG' ELSE 'Other' END"; // ;) |
|
239 |
Code code = compiler.compileExpression(source); |
|
240 |
Object v = interpreter.run(code); |
|
241 |
assertEquals("Other", v); |
|
242 |
|
|
243 |
symbolTable.setVar("software","gvSIG desktop"); |
|
244 |
source = "CASE WHEN software LIKE '%gvSIG%' THEN 'gvSIG' ELSE 'Other' END"; // ;) |
|
245 |
code = compiler.compileExpression(source); |
|
246 |
v = interpreter.run(code); |
|
247 |
assertEquals("gvSIG", v); |
|
248 |
} |
|
249 |
|
|
250 |
public void testCase2() { |
|
251 |
MutableSymbolTable symbolTable = createSymbolTable(); |
|
252 |
Compiler compiler = createCompiler(); |
|
253 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
254 |
|
|
255 |
symbolTable.setVar("Field_1",77); |
|
256 |
String source = "CASE WHEN Field_1 >= 75 AND Field_1 <=79 THEN 100 WHEN Field_1 >=80 AND Field_1 <=84 THEN 110 END"; // ;) |
|
257 |
Code code = compiler.compileExpression(source); |
|
258 |
Object v = interpreter.run(code); |
|
259 |
assertEquals((Integer)100, v); |
|
260 |
|
|
261 |
symbolTable.setVar("Field_1",81); |
|
262 |
source = "CASE WHEN Field_1 >= 75 AND Field_1 <=79 THEN 100 WHEN Field_1 >=80 AND Field_1 <=84 THEN 110 END"; // ;) |
|
263 |
code = compiler.compileExpression(source); |
|
264 |
v = interpreter.run(code); |
|
265 |
assertEquals((Integer)110, v); |
|
266 |
} |
|
267 |
|
|
268 |
public void testCase3() { |
|
269 |
MutableSymbolTable symbolTable = createSymbolTable(); |
|
270 |
Compiler compiler = createCompiler(); |
|
271 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
272 |
|
|
273 |
symbolTable.setVar("Field_1",100); |
|
274 |
String source = "CASE WHEN Field_1 >= 75 AND Field_1 <=79 THEN 100 WHEN Field_1 >=80 AND Field_1 <=84 THEN 110 ELSE 120 END"; // ;) |
|
275 |
Code code = compiler.compileExpression(source); |
|
276 |
Object v = interpreter.run(code); |
|
277 |
assertEquals((Integer)120, v); |
|
278 |
} |
|
279 |
|
|
280 |
public void testDef1() { |
|
281 |
MutableSymbolTable symbolTable = createSymbolTable(); |
|
282 |
Compiler compiler = createCompiler(); |
|
283 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
284 |
|
|
285 |
String source = "DEF test1() 'Hola'"; |
|
286 |
Code code = compiler.compileExpression(source); |
|
287 |
Object v = interpreter.run(code); |
|
288 |
|
|
289 |
source = "test1()"; |
|
290 |
code = compiler.compileExpression(source); |
|
291 |
v = interpreter.run(code); |
|
292 |
|
|
293 |
assertEquals("Hola", v); |
|
294 |
} |
|
295 |
|
|
296 |
public void testDef2() { |
|
297 |
MutableSymbolTable symbolTable = createSymbolTable(); |
|
298 |
Compiler compiler = createCompiler(); |
|
299 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
300 |
|
|
301 |
String source = "DEF test1(nombre) 'Hola ' || nombre"; |
|
302 |
Code code = compiler.compileExpression(source); |
|
303 |
Object v = interpreter.run(code); |
|
304 |
|
|
305 |
source = "test1('Joaquin')"; |
|
306 |
code = compiler.compileExpression(source); |
|
307 |
v = interpreter.run(code); |
|
308 |
|
|
309 |
assertEquals("Hola Joaquin", v); |
|
310 |
} |
|
311 |
|
|
312 |
public void testReturn1() { |
|
313 |
MutableSymbolTable symbolTable = createSymbolTable(); |
|
314 |
Compiler compiler = createCompiler(); |
|
315 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
316 |
|
|
317 |
String source = "DEF test1(nombre) BEGIN RETURN 'Hola ' || nombre END"; |
|
318 |
Code code = compiler.compileExpression(source); |
|
319 |
Object v = interpreter.run(code); |
|
320 |
|
|
321 |
source = "test1('Joaquin')"; |
|
322 |
code = compiler.compileExpression(source); |
|
323 |
v = interpreter.run(code); |
|
324 |
|
|
325 |
assertEquals("Hola Joaquin", v); |
|
326 |
} |
|
327 |
|
|
328 |
public void testReturn2() { |
|
329 |
MutableSymbolTable symbolTable = createSymbolTable(); |
|
330 |
Compiler compiler = createCompiler(); |
|
331 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
332 |
|
|
333 |
String source = "DEF test1(nombre) BEGIN RETURN 'Hola ' || nombre; 'Oh!...'; END"; |
|
334 |
Code code = compiler.compileExpression(source); |
|
335 |
Object v = interpreter.run(code); |
|
336 |
|
|
337 |
source = "test1('Joaquin')"; |
|
338 |
code = compiler.compileExpression(source); |
|
339 |
v = interpreter.run(code); |
|
340 |
|
|
341 |
assertEquals("Hola Joaquin", v); |
|
342 |
} |
|
343 |
|
|
344 |
public void testUseCase1() { |
|
345 |
MutableSymbolTable symbolTable = createSymbolTable(); |
|
346 |
Compiler compiler = createCompiler(); |
|
347 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
348 |
|
|
349 |
String source = "begin set x = ''; for n in list('hola','adios','fin'): let x = x || ' ' || n end"; |
|
350 |
Code code = compiler.compileExpression(source); |
|
351 |
Object v = interpreter.run(code); |
|
352 |
|
|
353 |
assertEquals(" hola adios fin", v); |
|
354 |
} |
|
355 |
|
|
356 |
public void testUseCase2() { |
|
357 |
MutableSymbolTable symbolTable = createSymbolTable(); |
|
358 |
Compiler compiler = createCompiler(); |
|
359 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
360 |
|
|
361 |
String source = "begin set s = ''; set x = LIST('hola','adios','fin'); FOR n in RANGE(3): set s = s || ' ' || x[n] end"; |
|
362 |
Code code = compiler.compileExpression(source); |
|
363 |
Object v = interpreter.run(code); |
|
364 |
|
|
365 |
assertEquals(" hola adios fin", v); |
|
366 |
} |
|
367 |
|
|
368 |
|
|
369 |
} |
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/TestCase1.java | ||
---|---|---|
149 | 149 |
code = compiler.compileExpression(expr2.toString()); |
150 | 150 |
System.out.println(code.toString()); |
151 | 151 |
assertEquals( |
152 |
"and(>(\"campo1\", 10), ST_Intersects(ST_GeomFromText('POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))', 4326), \"GEOMETRY\"))",
|
|
152 |
"AND(>(\"campo1\", 10), ST_Intersects(ST_GeomFromText('POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))', 4326), \"GEOMETRY\"))",
|
|
153 | 153 |
code.toString() |
154 | 154 |
); |
155 | 155 |
|
... | ... | |
157 | 157 |
code = compiler.compileExpression(expr2.toString()); |
158 | 158 |
System.out.println(code.toString()); |
159 | 159 |
assertEquals( |
160 |
"and(>(\"campo1\", 10), ST_Intersects(ST_GeomFromWKB(DECODE('000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000', 'hex'), 4326), \"GEOMETRY\"))",
|
|
160 |
"AND(>(\"campo1\", 10), ST_Intersects(ST_GeomFromWKB(DECODE('000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000', 'hex'), 4326), \"GEOMETRY\"))",
|
|
161 | 161 |
code.toString() |
162 | 162 |
); |
163 | 163 |
|
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/TestCodeToStringConverter.java | ||
---|---|---|
5 | 5 |
import org.gvsig.expressionevaluator.spi.AbstractCodeToStringConverter; |
6 | 6 |
import org.gvsig.expressionevaluator.Code; |
7 | 7 |
import org.gvsig.expressionevaluator.CodeToStringConverter; |
8 |
import org.gvsig.expressionevaluator.Codes; |
|
8 | 9 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
9 | 10 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
10 | 11 |
import org.gvsig.expressionevaluator.Function; |
... | ... | |
70 | 71 |
} |
71 | 72 |
|
72 | 73 |
@Override |
73 |
protected String functionToString(String functionName, Code.Caller.Arguments args) {
|
|
74 |
protected String functionToString(String functionName, Codes args) { |
|
74 | 75 |
switch (functionName.toLowerCase()) { |
75 | 76 |
case "date": |
76 | 77 |
return "DATE " + toString(args.get(0)) + " "; |
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/TestSQLLexer.java | ||
---|---|---|
53 | 53 |
String expression = "[precio]"; |
54 | 54 |
|
55 | 55 |
LexicalAnalyzer lex = createLexicalAnalyzer(expression); |
56 |
lex.setUseBracketsForIdentifiers(true); |
|
57 |
|
|
56 | 58 |
Token t1 = lex.next(); |
57 | 59 |
assertEquals(Token.IDENTIFIER, t1.getType()); |
58 | 60 |
assertEquals("precio", t1.getLiteral()); |
... | ... | |
125 | 127 |
Token t1 = lex.next(); |
126 | 128 |
assertEquals(Token.INTEGER_LITERAL, t1.getType()); |
127 | 129 |
assertEquals("23", t1.getLiteral()); |
128 |
assertEquals(new Long(23), t1.getValue());
|
|
130 |
assertEquals((Integer)23, t1.getValue());
|
|
129 | 131 |
} |
130 | 132 |
|
131 | 133 |
public void testDecimal() { |
... | ... | |
173 | 175 |
Token t3 = lex.next(); |
174 | 176 |
assertEquals(Token.INTEGER_LITERAL, t3.getType()); |
175 | 177 |
assertEquals("23", t3.getLiteral()); |
176 |
assertEquals(new Long(23), t3.getValue());
|
|
178 |
assertEquals((Integer)23, t3.getValue());
|
|
177 | 179 |
} |
178 | 180 |
|
179 | 181 |
public void testOperators() { |
... | ... | |
218 | 220 |
t1 = lex.next(); |
219 | 221 |
assertEquals(Token.INTEGER_LITERAL, t1.getType()); |
220 | 222 |
assertEquals("23", t1.getLiteral()); |
221 |
assertEquals(new Long(23), t1.getValue());
|
|
223 |
assertEquals((Integer)23, t1.getValue());
|
|
222 | 224 |
|
223 | 225 |
t1 = lex.next(); |
224 | 226 |
assertEquals(Token.OP_ADD, t1.getType()); |
... | ... | |
227 | 229 |
t1 = lex.next(); |
228 | 230 |
assertEquals(Token.INTEGER_LITERAL, t1.getType()); |
229 | 231 |
assertEquals("5", t1.getLiteral()); |
230 |
assertEquals(new Long(5), t1.getValue());
|
|
232 |
assertEquals((Integer)5, t1.getValue());
|
|
231 | 233 |
|
232 | 234 |
t1 = lex.next(); |
233 | 235 |
assertEquals(Token.PARENTHESIS_CLOSE, t1.getType()); |
... | ... | |
257 | 259 |
t1 = lex.next(); |
258 | 260 |
assertEquals(Token.INTEGER_LITERAL, t1.getType()); |
259 | 261 |
assertEquals("23", t1.getLiteral()); |
260 |
assertEquals(new Long(23), t1.getValue());
|
|
262 |
assertEquals((Integer)23, t1.getValue());
|
|
261 | 263 |
|
262 | 264 |
t1 = lex.next(); |
263 | 265 |
assertEquals(Token.COMA, t1.getType()); |
... | ... | |
266 | 268 |
t1 = lex.next(); |
267 | 269 |
assertEquals(Token.INTEGER_LITERAL, t1.getType()); |
268 | 270 |
assertEquals("5", t1.getLiteral()); |
269 |
assertEquals(new Long(5), t1.getValue());
|
|
271 |
assertEquals((Integer)5, t1.getValue());
|
|
270 | 272 |
|
271 | 273 |
t1 = lex.next(); |
272 | 274 |
assertEquals(Token.PARENTHESIS_CLOSE, t1.getType()); |
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/TestGrammarCompiler.java | ||
---|---|---|
1 |
package org.gvsig.expresionevaluator.impl; |
|
2 |
|
|
3 |
import static junit.framework.Assert.assertEquals; |
|
4 |
import junit.framework.TestCase; |
|
5 |
import org.gvsig.expressionevaluator.Code; |
|
6 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
|
7 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
|
8 |
import org.gvsig.expressionevaluator.Interpreter; |
|
9 |
import org.gvsig.expressionevaluator.LexicalAnalyzer; |
|
10 |
import org.gvsig.expressionevaluator.SymbolTable; |
|
11 |
import org.gvsig.expressionevaluator.Compiler; |
|
12 |
import org.gvsig.expressionevaluator.MutableSymbolTable; |
|
13 |
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer; |
|
14 |
|
|
15 |
/** |
|
16 |
* |
|
17 |
* @author jjdelcerro |
|
18 |
*/ |
|
19 |
public class TestGrammarCompiler extends TestCase { |
|
20 |
|
|
21 |
public TestGrammarCompiler(String testName) { |
|
22 |
super(testName); |
|
23 |
} |
|
24 |
|
|
25 |
@Override |
|
26 |
protected void setUp() throws Exception { |
|
27 |
super.setUp(); |
|
28 |
new DefaultLibrariesInitializer().fullInitialize(); |
|
29 |
} |
|
30 |
|
|
31 |
@Override |
|
32 |
protected void tearDown() throws Exception { |
|
33 |
super.tearDown(); |
|
34 |
} |
|
35 |
|
|
36 |
// TODO add test methods here. The name must begin with 'test'. For example: |
|
37 |
// public void testHello() {} |
|
38 |
|
|
39 |
protected LexicalAnalyzer createLexicalAnalyzer() { |
|
40 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
41 |
LexicalAnalyzer lexer = manager.createLexicalAnalyzer(); |
|
42 |
return lexer; |
|
43 |
} |
|
44 |
|
|
45 |
protected org.gvsig.expressionevaluator.Compiler createCompiler() { |
|
46 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
47 |
Compiler compiler = manager.createCompiler(); |
|
48 |
compiler.setLexicalAnalyzer(createLexicalAnalyzer()); |
|
49 |
return compiler; |
|
50 |
} |
|
51 |
|
|
52 |
protected SymbolTable createSymbolTable() { |
|
53 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
54 |
MutableSymbolTable symbolTable = manager.createSymbolTable(); |
|
55 |
symbolTable.setVar("precio", 200); |
|
56 |
symbolTable.setVar("1990", 0.168873933773767); |
|
57 |
return symbolTable; |
|
58 |
} |
|
59 |
|
|
60 |
protected Interpreter createInterpreter(SymbolTable symbolTable) { |
|
61 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
62 |
Interpreter interpreter = manager.createInterpreter(); |
|
63 |
interpreter.setSymbolTable(symbolTable); |
|
64 |
return interpreter; |
|
65 |
} |
|
66 |
|
|
67 |
public void testLet() { |
|
68 |
String source = "LET V1 = 23"; |
|
69 |
|
|
70 |
Compiler compiler = createCompiler(); |
|
71 |
|
|
72 |
Code code = compiler.compileExpression(source); |
|
73 |
assertEquals("LET('V1', 23)", code.toString()); |
|
74 |
} |
|
75 |
|
|
76 |
public void testBlock() { |
|
77 |
String source = "BEGIN LET V1 = 23 END"; |
|
78 |
|
|
79 |
Compiler compiler = createCompiler(); |
|
80 |
|
|
81 |
Code code = compiler.compileExpression(source); |
|
82 |
assertEquals("BLOCK(LET('V1', 23))", code.toString()); |
|
83 |
} |
|
84 |
|
|
85 |
public void testBlock2() { |
|
86 |
String source = "BEGIN LET V1 = 11; LET V2 = 22 END"; |
|
87 |
|
|
88 |
Compiler compiler = createCompiler(); |
|
89 |
|
|
90 |
Code code = compiler.compileExpression(source); |
|
91 |
assertEquals("BLOCK(LET('V1', 11), LET('V2', 22))", code.toString()); |
|
92 |
} |
|
93 |
|
|
94 |
public void testBlock3() { |
|
95 |
Compiler compiler = createCompiler(); |
|
96 |
|
|
97 |
String source = "BEGIN LET V1 = 11; LET V2 = 22; END"; |
|
98 |
Code code = compiler.compileExpression(source); |
|
99 |
assertEquals("BLOCK(LET('V1', 11), LET('V2', 22))", code.toString()); |
|
100 |
|
|
101 |
source = "BEGIN LET V1 = 11;; LET V2 = 22;;; END"; |
|
102 |
code = compiler.compileExpression(source); |
|
103 |
assertEquals("BLOCK(LET('V1', 11), LET('V2', 22))", code.toString()); |
|
104 |
} |
|
105 |
|
|
106 |
public void testIfThen() { |
|
107 |
String source = "IF V1 = 11 THEN LET V2 = 22"; |
|
108 |
|
|
109 |
Compiler compiler = createCompiler(); |
|
110 |
|
|
111 |
Code code = compiler.compileExpression(source); |
|
112 |
assertEquals("IFF(=(\"V1\", 11), LET('V2', 22))", code.toString()); |
|
113 |
} |
|
114 |
|
|
115 |
public void testIfThen2() { |
|
116 |
String source = "IF V1 = 11 LET V2 = 22"; |
|
117 |
|
|
118 |
Compiler compiler = createCompiler(); |
|
119 |
|
|
120 |
Code code = compiler.compileExpression(source); |
|
121 |
assertEquals("IFF(=(\"V1\", 11), LET('V2', 22))", code.toString()); |
|
122 |
} |
|
123 |
|
|
124 |
public void testIfThen3() { |
|
125 |
String source = "IF V1 = 11: LET V2 = 22"; |
|
126 |
|
|
127 |
Compiler compiler = createCompiler(); |
|
128 |
|
|
129 |
Code code = compiler.compileExpression(source); |
|
130 |
assertEquals("IFF(=(\"V1\", 11), LET('V2', 22))", code.toString()); |
|
131 |
} |
|
132 |
|
|
133 |
public void testIfThenElse() { |
|
134 |
String source = "IF V1 = 11 THEN LET V2 = 11 ELSE LET V2 = 22"; |
|
135 |
|
|
136 |
Compiler compiler = createCompiler(); |
|
137 |
|
|
138 |
Code code = compiler.compileExpression(source); |
|
139 |
assertEquals("IFF(=(\"V1\", 11), LET('V2', 11), LET('V2', 22))", code.toString()); |
|
140 |
} |
|
141 |
|
|
142 |
public void testIfThenBlock() { |
|
143 |
String source = "IF V1 = 11 THEN BEGIN LET V2 = 22; LET V1 = 10 END"; |
|
144 |
|
|
145 |
Compiler compiler = createCompiler(); |
|
146 |
|
|
147 |
Code code = compiler.compileExpression(source); |
|
148 |
assertEquals("IFF(=(\"V1\", 11), BLOCK(LET('V2', 22), LET('V1', 10)))", code.toString()); |
|
149 |
} |
|
150 |
|
|
151 |
public void testWhile() { |
|
152 |
String source = "WHILE n < 10 LET n = n + 1"; |
|
153 |
|
|
154 |
Compiler compiler = createCompiler(); |
|
155 |
|
|
156 |
Code code = compiler.compileExpression(source); |
|
157 |
assertEquals("WHILE(<(\"n\", 10), LET('n', +(\"n\", 1)))", code.toString()); |
|
158 |
} |
|
159 |
|
|
160 |
public void testWhileBlock() { |
|
161 |
String source = "WHILE n < 10 BEGIN LET n = n + 1; print(n) END"; |
|
162 |
|
|
163 |
Compiler compiler = createCompiler(); |
|
164 |
|
|
165 |
Code code = compiler.compileExpression(source); |
|
166 |
assertEquals("WHILE(<(\"n\", 10), BLOCK(LET('n', +(\"n\", 1)), print(\"n\")))", code.toString()); |
|
167 |
} |
|
168 |
|
|
169 |
public void testCast() { |
|
170 |
String source = "CAST(V1 AS INTEGER)"; |
|
171 |
|
|
172 |
Compiler compiler = createCompiler(); |
|
173 |
|
|
174 |
Code code = compiler.compileExpression(source); |
|
175 |
assertEquals("CAST(\"V1\", 'INTEGER')", code.toString()); |
|
176 |
} |
|
177 |
|
|
178 |
public void testCast2() { |
|
179 |
String source = "CAST V1 AS INTEGER"; |
|
180 |
|
|
181 |
Compiler compiler = createCompiler(); |
|
182 |
|
|
183 |
Code code = compiler.compileExpression(source); |
|
184 |
assertEquals("CAST(\"V1\", 'INTEGER')", code.toString()); |
|
185 |
} |
|
186 |
|
|
187 |
public void testMatch() { |
|
188 |
Compiler compiler = createCompiler(); |
|
189 |
String source; |
|
190 |
Code code; |
|
191 |
|
|
192 |
source = "MATCH 'Hola', '[Hh]ola'"; |
|
193 |
code = compiler.compileExpression(source); |
|
194 |
assertEquals("~('Hola', '[Hh]ola')", code.toString()); |
|
195 |
|
|
196 |
source = "MATCH 'Hola' '[Hh]ola'"; |
|
197 |
code = compiler.compileExpression(source); |
|
198 |
assertEquals("~('Hola', '[Hh]ola')", code.toString()); |
|
199 |
|
|
200 |
source = "MATCH('Hola', '[Hh]ola')"; |
|
201 |
code = compiler.compileExpression(source); |
|
202 |
assertEquals("~('Hola', '[Hh]ola')", code.toString()); |
|
203 |
} |
|
204 |
|
|
205 |
public void testForEach() { |
|
206 |
String source = "FOR n in RANGE(10) print(n)"; |
|
207 |
|
|
208 |
Compiler compiler = createCompiler(); |
|
209 |
|
|
210 |
Code code = compiler.compileExpression(source); |
|
211 |
assertEquals("FOREACH('n', RANGE(10), print(\"n\"))", code.toString()); |
|
212 |
} |
|
213 |
|
|
214 |
// public void testFor() { |
|
215 |
// String source = "FOR LET n = 0 ; n < 10 ; LET n = n + 1 print(n)"; |
|
216 |
// |
|
217 |
// Compiler compiler = createCompiler(); |
|
218 |
// |
|
219 |
// Code code = compiler.compileExpression(source); |
|
220 |
// assertEquals("FOR(LET('n', 0), <(\"n\", 10), LET('n', +(\"n\", 1)), print(\"n\"))", code.toString()); |
|
221 |
// } |
|
222 |
|
|
223 |
public void testCase() { |
|
224 |
String source = "CASE WHEN software LIKE '%gvSIG%' THEN 'gvSIG' ELSE 'Other' END"; // ;) |
|
225 |
|
|
226 |
Compiler compiler = createCompiler(); |
|
227 |
|
|
228 |
Code code = compiler.compileExpression(source); |
|
229 |
assertEquals("CASE(LIKE(\"software\", '%gvSIG%'), 'gvSIG', 'Other')", code.toString()); |
|
230 |
} |
|
231 |
|
|
232 |
public void testCase1() { |
|
233 |
String source = "CASE WHEN software LIKE '%gvSIG%' THEN 'gvSIG' ELSE 'Other'"; // ;) |
|
234 |
|
|
235 |
Compiler compiler = createCompiler(); |
|
236 |
|
|
237 |
Code code = compiler.compileExpression(source); |
|
238 |
assertEquals("CASE(LIKE(\"software\", '%gvSIG%'), 'gvSIG', 'Other')", code.toString()); |
|
239 |
} |
|
240 |
|
|
241 |
public void testCase2() { |
|
242 |
String source = "CASE WHEN Field_1 >= 75 AND Field_1 <=79 THEN 100 WHEN Field_1 >=80 AND Field_1 <=84 THEN 110 END"; // ;) |
|
243 |
|
|
244 |
Compiler compiler = createCompiler(); |
|
245 |
|
|
246 |
Code code = compiler.compileExpression(source); |
|
247 |
assertEquals("CASE(AND(>=(\"Field_1\", 75), <=(\"Field_1\", 79)), AND(>=(\"Field_1\", 80), <=(\"Field_1\", 84)), 100, 110)", code.toString()); |
|
248 |
} |
|
249 |
|
|
250 |
public void testCase3() { |
|
251 |
String source = "CASE WHEN Field_1 >= 75 AND Field_1 <=79 THEN 100 WHEN Field_1 >=80 AND Field_1 <=84 THEN 110 ELSE 120 END"; // ;) |
|
252 |
|
|
253 |
Compiler compiler = createCompiler(); |
|
254 |
|
|
255 |
Code code = compiler.compileExpression(source); |
|
256 |
assertEquals("CASE(AND(>=(\"Field_1\", 75), <=(\"Field_1\", 79)), AND(>=(\"Field_1\", 80), <=(\"Field_1\", 84)), 100, 110, 120)", code.toString()); |
|
257 |
} |
|
258 |
|
|
259 |
public void testDef1() { |
|
260 |
String source = "DEF test1() print('Hola')"; |
|
261 |
|
|
262 |
Compiler compiler = createCompiler(); |
|
263 |
|
|
264 |
Code code = compiler.compileExpression(source); |
|
265 |
assertEquals("CREATE_FUNCTION('test1', print('Hola'))", code.toString()); |
|
266 |
} |
|
267 |
|
|
268 |
public void testDef2() { |
|
269 |
String source = "DEF test1(nombre) print('Hola '+nombre)"; |
|
270 |
|
|
271 |
Compiler compiler = createCompiler(); |
|
272 |
|
|
273 |
Code code = compiler.compileExpression(source); |
|
274 |
assertEquals("CREATE_FUNCTION('test1', LIST('nombre'), print(+('Hola ', \"nombre\")))", code.toString()); |
|
275 |
} |
|
276 |
|
|
277 |
public void testDef3() { |
|
278 |
String source = "DEF test1(nombre) BEGIN RETURN 'Hola '||nombre END"; |
|
279 |
|
|
280 |
Compiler compiler = createCompiler(); |
|
281 |
|
|
282 |
Code code = compiler.compileExpression(source); |
|
283 |
assertEquals("CREATE_FUNCTION('test1', LIST('nombre'), BLOCK(RETURN(||('Hola ', \"nombre\"))))", code.toString()); |
|
284 |
} |
|
285 |
|
|
286 |
public void testUseCase1() { |
|
287 |
String source = "begin set x = ''; for n in list('hola','adios','fin'): let x = x || ' ' || n end"; |
|
288 |
|
|
289 |
Compiler compiler = createCompiler(); |
|
290 |
|
|
291 |
Code code = compiler.compileExpression(source); |
|
292 |
assertEquals("BLOCK(LET('x', ''), FOREACH('n', list('hola', 'adios', 'fin'), LET('x', ||(||(\"x\", ' '), \"n\"))))", code.toString()); |
|
293 |
} |
|
294 |
|
|
295 |
public void testUseCase2() { |
|
296 |
String source = "begin set s = ''; set x = LIST('hola','adios','fin'); FOR n in RANGE(3): set s = s || ' ' || x[n] end"; |
|
297 |
|
|
298 |
Compiler compiler = createCompiler(); |
|
299 |
|
|
300 |
Code code = compiler.compileExpression(source); |
|
301 |
assertEquals("BLOCK(LET('s', ''), LET('x', LIST('hola', 'adios', 'fin')), FOREACH('n', RANGE(3), LET('s', ||(||(\"s\", ' '), GETITEM(\"x\", \"n\")))))", code.toString()); |
|
302 |
} |
|
303 |
|
|
304 |
|
|
305 |
} |
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/TestOptimizer.java | ||
---|---|---|
126 | 126 |
} |
127 | 127 |
|
128 | 128 |
public void testIdentifier2() { |
129 |
Compiler compiler = createCompiler(); |
|
130 |
compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true); |
|
131 |
|
|
129 | 132 |
String source = "[precio]"; |
130 | 133 |
|
131 |
Compiler compiler = createCompiler(); |
|
132 | 134 |
Code code = compiler.compileExpression(source); |
133 | 135 |
assertEquals("\"precio\"", code.toString()); |
134 | 136 |
|
... | ... | |
156 | 158 |
|
157 | 159 |
Compiler compiler = createCompiler(); |
158 | 160 |
Code code = compiler.compileExpression(source); |
159 |
assertEquals("true", code.toString());
|
|
161 |
assertEquals("TRUE", code.toString());
|
|
160 | 162 |
|
161 | 163 |
SymbolTable symbolTable = createSymbolTable(); |
162 | 164 |
Optimizer optimizer = createOptimizer(symbolTable); |
163 | 165 |
Code code2 = optimizer.optimize(code); |
164 |
assertEquals("true", code2.toString());
|
|
166 |
assertEquals("TRUE", code2.toString());
|
|
165 | 167 |
} |
166 | 168 |
|
167 | 169 |
public void testFalse() { |
... | ... | |
169 | 171 |
|
170 | 172 |
Compiler compiler = createCompiler(); |
171 | 173 |
Code code = compiler.compileExpression(source); |
172 |
assertEquals("false", code.toString());
|
|
174 |
assertEquals("FALSE", code.toString());
|
|
173 | 175 |
|
174 | 176 |
SymbolTable symbolTable = createSymbolTable(); |
175 | 177 |
Optimizer optimizer = createOptimizer(symbolTable); |
176 | 178 |
Code code2 = optimizer.optimize(code); |
177 |
assertEquals("false", code2.toString());
|
|
179 |
assertEquals("FALSE", code2.toString());
|
|
178 | 180 |
} |
179 | 181 |
|
180 | 182 |
public void testNull() { |
... | ... | |
182 | 184 |
|
183 | 185 |
Compiler compiler = createCompiler(); |
184 | 186 |
Code code = compiler.compileExpression(source); |
185 |
assertEquals("null", code.toString());
|
|
187 |
assertEquals("NULL", code.toString());
|
|
186 | 188 |
|
187 | 189 |
SymbolTable symbolTable = createSymbolTable(); |
188 | 190 |
Optimizer optimizer = createOptimizer(symbolTable); |
189 | 191 |
Code code2 = optimizer.optimize(code); |
190 |
assertEquals("null", code2.toString());
|
|
192 |
assertEquals("NULL", code2.toString());
|
|
191 | 193 |
} |
192 | 194 |
|
193 | 195 |
public void testNotTrue() { |
... | ... | |
195 | 197 |
|
196 | 198 |
Compiler compiler = createCompiler(); |
197 | 199 |
Code code = compiler.compileExpression(source); |
198 |
assertEquals("not(true)", code.toString());
|
|
200 |
assertEquals("NOT(TRUE)", code.toString());
|
|
199 | 201 |
|
200 | 202 |
SymbolTable symbolTable = createSymbolTable(); |
201 | 203 |
Optimizer optimizer = createOptimizer(symbolTable); |
202 | 204 |
Code code2 = optimizer.optimize(code); |
203 |
assertEquals("false", code2.toString());
|
|
205 |
assertEquals("FALSE", code2.toString());
|
|
204 | 206 |
} |
205 | 207 |
|
206 | 208 |
public void testInteger() { |
... | ... | |
237 | 239 |
operator(">="); |
238 | 240 |
operator("<"); |
239 | 241 |
operator("<="); |
240 |
operator("like"); |
|
241 |
operator("ilike"); |
|
242 |
operator("LIKE"); |
|
243 |
operator("ILIKE"); |
|
244 |
operator("||"); |
|
242 | 245 |
operator("+"); |
243 | 246 |
operator("-"); |
244 | 247 |
operator("*"); |
245 | 248 |
// operator("^"); |
246 |
operator("or");
|
|
247 |
operator("and");
|
|
249 |
operator("OR");
|
|
250 |
operator("AND");
|
|
248 | 251 |
operator("%"); |
249 |
operator("is");
|
|
252 |
operator("IS");
|
|
250 | 253 |
} |
251 | 254 |
|
252 | 255 |
|
... | ... | |
354 | 357 |
Compiler compiler = createCompiler(); |
355 | 358 |
|
356 | 359 |
Code code = compiler.compileExpression(source); |
357 |
assertEquals("+(\"precio\", abs(negate(10)))", code.toString());
|
|
360 |
assertEquals("+(\"precio\", abs(NEGATE(10)))", code.toString());
|
|
358 | 361 |
|
359 | 362 |
SymbolTable symbolTable = createSymbolTable(); |
360 | 363 |
Optimizer optimizer = createOptimizer(symbolTable); |
... | ... | |
404 | 407 |
assertEquals("CONCAT(\"precio\", ' euros')", code2.toString()); |
405 | 408 |
} |
406 | 409 |
|
410 |
public void testConcat2() { |
|
411 |
String source = "CONCAT(precio,' euros')"; |
|
412 |
|
|
413 |
Compiler compiler = createCompiler(); |
|
414 |
|
|
415 |
Code code = compiler.compileExpression(source); |
|
416 |
assertEquals("CONCAT(\"precio\", ' euros')", code.toString()); |
|
417 |
|
|
418 |
SymbolTable symbolTable = createSymbolTable(); |
|
419 |
Optimizer optimizer = createOptimizer(symbolTable); |
|
420 |
Code code2 = optimizer.optimize(code); |
|
421 |
assertEquals("CONCAT(\"precio\", ' euros')", code2.toString()); |
|
422 |
} |
|
423 |
|
|
407 | 424 |
public void testInvokeFunction1() { |
408 | 425 |
String source = "ST_Area(GEOMETRY)"; |
409 | 426 |
|
... | ... | |
454 | 471 |
Code code = compiler.compileExpression(source); |
455 | 472 |
System.out.println(code.toString()); |
456 | 473 |
assertEquals( |
457 |
"and(>(\"campo1\", 10), ST_Intersects(ST_GeomFromWKB(DECODE('000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000', 'hex'), 4326), \"GEOMETRY\"))",
|
|
474 |
"AND(>(\"campo1\", 10), ST_Intersects(ST_GeomFromWKB(DECODE('000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000', 'hex'), 4326), \"GEOMETRY\"))",
|
|
458 | 475 |
code.toString() |
459 | 476 |
); |
460 | 477 |
|
... | ... | |
470 | 487 |
// System.out.println("Tiempo de optimizacion: " + (System.currentTimeMillis() - t1)); |
471 | 488 |
System.out.println(code2.toString()); |
472 | 489 |
assertEquals( |
473 |
"and(>(\"campo1\", 10), ST_Intersects('POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))'::geometry, \"GEOMETRY\"))",
|
|
490 |
"AND(>(\"campo1\", 10), ST_Intersects('POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))'::geometry, \"GEOMETRY\"))",
|
|
474 | 491 |
code2.toString() |
475 | 492 |
); |
476 | 493 |
|
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 | ||
---|---|---|
1 | 1 |
package org.gvsig.expresionevaluator.impl; |
2 | 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 | 3 |
import junit.framework.TestCase; |
8 | 4 |
import org.gvsig.expressionevaluator.LexicalAnalyzer; |
9 | 5 |
import org.gvsig.expressionevaluator.Compiler; |
10 | 6 |
import org.gvsig.expressionevaluator.SymbolTable; |
11 | 7 |
import org.gvsig.expressionevaluator.Interpreter; |
12 | 8 |
import org.gvsig.expressionevaluator.Code; |
9 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
|
10 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
|
11 |
import org.gvsig.expressionevaluator.MutableSymbolTable; |
|
13 | 12 |
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer; |
14 | 13 |
|
15 | 14 |
public class TestInterpreter extends TestCase { |
... | ... | |
32 | 31 |
// TODO add test methods here. The name must begin with 'test'. For example: |
33 | 32 |
// public void testHello() {} |
34 | 33 |
|
34 |
|
|
35 | 35 |
protected LexicalAnalyzer createLexicalAnalyzer() { |
36 |
SQLLexicalAnalyzer lexer = new SQLLexicalAnalyzer(); |
|
36 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
37 |
LexicalAnalyzer lexer = manager.createLexicalAnalyzer(); |
|
37 | 38 |
return lexer; |
38 | 39 |
} |
39 |
|
|
40 |
protected Compiler createCompiler() { |
|
41 |
Compiler compiler = new DefaultCompiler(); |
|
40 |
|
|
41 |
protected org.gvsig.expressionevaluator.Compiler createCompiler() { |
|
42 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
43 |
Compiler compiler = manager.createCompiler(); |
|
42 | 44 |
compiler.setLexicalAnalyzer(createLexicalAnalyzer()); |
43 | 45 |
return compiler; |
44 | 46 |
} |
47 |
|
|
45 | 48 |
|
46 | 49 |
protected SymbolTable createSymbolTable() { |
47 |
DefaultSymbolTable symbolTable = new DefaultSymbolTable(); |
|
50 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
51 |
MutableSymbolTable symbolTable = manager.createSymbolTable(); |
|
48 | 52 |
symbolTable.setVar("precio", 200); |
49 | 53 |
symbolTable.setVar("1990", 0.168873933773767); |
50 | 54 |
return symbolTable; |
51 | 55 |
} |
52 | 56 |
|
53 | 57 |
protected Interpreter createInterpreter(SymbolTable symbolTable) { |
54 |
Interpreter interpreter = new DefaultInterpreter(); |
|
58 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
59 |
Interpreter interpreter = manager.createInterpreter(); |
|
55 | 60 |
interpreter.setSymbolTable(symbolTable); |
56 | 61 |
return interpreter; |
57 | 62 |
} |
58 | 63 |
|
59 | 64 |
public void testIdentifier1() { |
60 |
String source = "precio"; |
|
61 |
|
|
62 | 65 |
SymbolTable symbolTable = createSymbolTable(); |
63 | 66 |
Compiler compiler = createCompiler(); |
64 | 67 |
Interpreter interpreter = createInterpreter(symbolTable); |
65 | 68 |
|
69 |
String source = "precio"; |
|
70 |
|
|
66 | 71 |
Code code = compiler.compileExpression(source); |
67 | 72 |
Object v = interpreter.run(code); |
68 | 73 |
assertEquals(200, ((Number)v).intValue()); |
69 | 74 |
} |
70 | 75 |
|
71 | 76 |
public void testInteger() { |
72 |
String source = "23"; |
|
73 |
|
|
74 | 77 |
SymbolTable symbolTable = createSymbolTable(); |
75 | 78 |
Compiler compiler = createCompiler(); |
76 | 79 |
Interpreter interpreter = createInterpreter(symbolTable); |
77 | 80 |
|
81 |
String source = "23"; |
|
82 |
|
|
78 | 83 |
Code code = compiler.compileExpression(source); |
79 | 84 |
Object v = interpreter.run(code); |
80 | 85 |
assertEquals(23, ((Number)v).intValue()); |
81 | 86 |
} |
82 | 87 |
|
83 | 88 |
public void testTrue() { |
84 |
String source = "true"; |
|
85 |
|
|
86 | 89 |
SymbolTable symbolTable = createSymbolTable(); |
87 | 90 |
Compiler compiler = createCompiler(); |
88 | 91 |
Interpreter interpreter = createInterpreter(symbolTable); |
89 | 92 |
|
93 |
String source = "true"; |
|
94 |
|
|
90 | 95 |
Code code = compiler.compileExpression(source); |
91 | 96 |
assertEquals(Boolean.TRUE, interpreter.run(code)); |
92 | 97 |
} |
93 | 98 |
|
94 | 99 |
public void testFalse() { |
95 |
String source = "false"; |
|
96 |
|
|
97 | 100 |
SymbolTable symbolTable = createSymbolTable(); |
98 | 101 |
Compiler compiler = createCompiler(); |
99 | 102 |
Interpreter interpreter = createInterpreter(symbolTable); |
100 | 103 |
|
104 |
String source = "false"; |
|
105 |
|
|
101 | 106 |
Code code = compiler.compileExpression(source); |
102 | 107 |
assertEquals(Boolean.FALSE, interpreter.run(code)); |
103 | 108 |
} |
104 | 109 |
|
105 | 110 |
public void testNull() { |
106 |
String source = "null"; |
|
107 |
|
|
108 | 111 |
SymbolTable symbolTable = createSymbolTable(); |
109 | 112 |
Compiler compiler = createCompiler(); |
110 | 113 |
Interpreter interpreter = createInterpreter(symbolTable); |
111 | 114 |
|
115 |
String source = "null"; |
|
116 |
|
|
112 | 117 |
Code code = compiler.compileExpression(source); |
113 | 118 |
assertEquals(null, interpreter.run(code)); |
114 | 119 |
} |
115 | 120 |
|
116 | 121 |
public void testAdd1() { |
117 |
String source = "precio + 10"; |
|
118 |
|
|
119 | 122 |
SymbolTable symbolTable = createSymbolTable(); |
120 | 123 |
Compiler compiler = createCompiler(); |
121 | 124 |
Interpreter interpreter = createInterpreter(symbolTable); |
122 | 125 |
|
126 |
String source = "precio + 10"; |
|
127 |
|
|
123 | 128 |
Code code = compiler.compileExpression(source); |
124 | 129 |
Object v = interpreter.run(code); |
125 | 130 |
assertEquals(210, ((Number)v).intValue()); |
126 | 131 |
} |
127 | 132 |
|
128 | 133 |
public void testSimpleAdd1() { |
129 |
String source = "5+10"; |
|
130 |
|
|
131 | 134 |
SymbolTable symbolTable = createSymbolTable(); |
132 | 135 |
Compiler compiler = createCompiler(); |
133 | 136 |
Interpreter interpreter = createInterpreter(symbolTable); |
134 | 137 |
|
138 |
String source = "5+10"; |
|
139 |
|
|
135 | 140 |
Code code = compiler.compileExpression(source); |
136 | 141 |
Object v = interpreter.run(code); |
137 | 142 |
assertEquals(15, ((Number)v).intValue()); |
138 | 143 |
} |
139 | 144 |
|
140 | 145 |
public void testSimpleAdd2() { |
141 |
String source = "5 + 10"; |
|
142 |
|
|
143 | 146 |
SymbolTable symbolTable = createSymbolTable(); |
144 | 147 |
Compiler compiler = createCompiler(); |
145 | 148 |
Interpreter interpreter = createInterpreter(symbolTable); |
146 | 149 |
|
150 |
String source = "5 + 10"; |
|
151 |
|
|
147 | 152 |
Code code = compiler.compileExpression(source); |
148 | 153 |
Object v = interpreter.run(code); |
149 | 154 |
assertEquals(15, ((Number)v).intValue()); |
150 | 155 |
} |
151 | 156 |
|
152 | 157 |
public void testSimpleAdd3() { |
153 |
String source = "10+-5"; |
|
154 |
|
|
155 | 158 |
SymbolTable symbolTable = createSymbolTable(); |
156 | 159 |
Compiler compiler = createCompiler(); |
157 | 160 |
Interpreter interpreter = createInterpreter(symbolTable); |
158 | 161 |
|
162 |
String source = "10+-5"; |
|
163 |
|
|
159 | 164 |
Code code = compiler.compileExpression(source); |
160 | 165 |
Object v = interpreter.run(code); |
161 | 166 |
assertEquals(5, ((Number)v).intValue()); |
162 | 167 |
} |
163 | 168 |
|
164 | 169 |
public void testSimpleSub1() { |
165 |
String source = "10-5"; |
|
166 |
|
|
167 | 170 |
SymbolTable symbolTable = createSymbolTable(); |
168 | 171 |
Compiler compiler = createCompiler(); |
169 | 172 |
Interpreter interpreter = createInterpreter(symbolTable); |
170 | 173 |
|
174 |
String source = "10-5"; |
|
175 |
|
|
171 | 176 |
Code code = compiler.compileExpression(source); |
172 | 177 |
Object v = interpreter.run(code); |
173 | 178 |
assertEquals(5, ((Number)v).intValue()); |
174 | 179 |
} |
175 | 180 |
|
176 | 181 |
public void testSimpleSub2() { |
177 |
String source = "10 - 5"; |
|
178 |
|
|
179 | 182 |
SymbolTable symbolTable = createSymbolTable(); |
180 | 183 |
Compiler compiler = createCompiler(); |
181 | 184 |
Interpreter interpreter = createInterpreter(symbolTable); |
182 | 185 |
|
186 |
String source = "10 - 5"; |
|
187 |
|
|
183 | 188 |
Code code = compiler.compileExpression(source); |
184 | 189 |
Object v = interpreter.run(code); |
185 | 190 |
assertEquals(5, ((Number)v).intValue()); |
186 | 191 |
} |
187 | 192 |
|
188 | 193 |
public void testSimpleNumber() { |
189 |
String source = "23"; |
|
190 |
|
|
191 | 194 |
SymbolTable symbolTable = createSymbolTable(); |
192 | 195 |
Compiler compiler = createCompiler(); |
193 | 196 |
Interpreter interpreter = createInterpreter(symbolTable); |
194 | 197 |
|
198 |
String source = "23"; |
|
199 |
|
|
195 | 200 |
Code code = compiler.compileExpression(source); |
196 | 201 |
Object v = interpreter.run(code); |
197 | 202 |
assertEquals(23, ((Number)v).intValue()); |
198 | 203 |
} |
199 | 204 |
|
200 | 205 |
public void testSimpleNegativeNumber() { |
201 |
String source = "-23"; |
|
202 |
|
|
203 | 206 |
SymbolTable symbolTable = createSymbolTable(); |
204 | 207 |
Compiler compiler = createCompiler(); |
205 | 208 |
Interpreter interpreter = createInterpreter(symbolTable); |
206 | 209 |
|
210 |
String source = "-23"; |
|
211 |
|
|
207 | 212 |
Code code = compiler.compileExpression(source); |
208 | 213 |
Object v = interpreter.run(code); |
209 | 214 |
assertEquals(-23, ((Number)v).intValue()); |
210 | 215 |
} |
211 | 216 |
|
212 | 217 |
public void testNegateFunction() { |
213 |
String source = "-PI()"; |
|
214 |
|
|
215 | 218 |
SymbolTable symbolTable = createSymbolTable(); |
216 | 219 |
Compiler compiler = createCompiler(); |
217 | 220 |
Interpreter interpreter = createInterpreter(symbolTable); |
218 | 221 |
|
222 |
String source = "-PI()"; |
|
223 |
|
|
219 | 224 |
Code code = compiler.compileExpression(source); |
220 | 225 |
Object v = interpreter.run(code); |
221 | 226 |
assertEquals(-Math.PI, ((Number)v).doubleValue()); |
222 | 227 |
} |
223 | 228 |
|
224 | 229 |
public void testSub1() { |
225 |
String source = "precio - 10"; |
|
226 |
|
|
227 | 230 |
SymbolTable symbolTable = createSymbolTable(); |
228 | 231 |
Compiler compiler = createCompiler(); |
229 | 232 |
Interpreter interpreter = createInterpreter(symbolTable); |
230 | 233 |
|
234 |
String source = "precio - 10"; |
|
235 |
|
|
231 | 236 |
Code code = compiler.compileExpression(source); |
232 | 237 |
Object v = interpreter.run(code); |
233 | 238 |
assertEquals(190, ((Number)v).intValue()); |
234 | 239 |
} |
235 | 240 |
|
236 | 241 |
public void testMul1() { |
237 |
String source = "precio * 10"; |
|
238 |
|
|
239 | 242 |
SymbolTable symbolTable = createSymbolTable(); |
240 | 243 |
Compiler compiler = createCompiler(); |
241 | 244 |
Interpreter interpreter = createInterpreter(symbolTable); |
242 | 245 |
|
246 |
String source = "precio * 10"; |
|
247 |
|
|
243 | 248 |
Code code = compiler.compileExpression(source); |
244 | 249 |
Object v = interpreter.run(code); |
245 | 250 |
assertEquals(2000, ((Number)v).intValue()); |
246 | 251 |
} |
247 | 252 |
|
248 | 253 |
public void testDiv1() { |
249 |
String source = "precio / 10"; |
|
250 |
|
|
251 | 254 |
SymbolTable symbolTable = createSymbolTable(); |
252 | 255 |
Compiler compiler = createCompiler(); |
253 | 256 |
Interpreter interpreter = createInterpreter(symbolTable); |
254 | 257 |
|
258 |
String source = "precio / 10"; |
|
259 |
|
|
255 | 260 |
Code code = compiler.compileExpression(source); |
256 | 261 |
Object v = interpreter.run(code); |
257 | 262 |
assertEquals(20, ((Number)v).intValue()); |
258 | 263 |
} |
259 | 264 |
|
260 | 265 |
public void testAdd2() { |
261 |
String source = "precio + 10 + 20 + 30"; |
|
262 |
|
|
263 | 266 |
SymbolTable symbolTable = createSymbolTable(); |
264 | 267 |
Compiler compiler = createCompiler(); |
265 | 268 |
Interpreter interpreter = createInterpreter(symbolTable); |
266 | 269 |
|
270 |
String source = "precio + 10 + 20 + 30"; |
|
271 |
|
|
267 | 272 |
Code code = compiler.compileExpression(source); |
268 | 273 |
Object v = interpreter.run(code); |
269 | 274 |
assertEquals(260, ((Number)v).intValue()); |
270 | 275 |
} |
271 | 276 |
|
272 | 277 |
public void testAddMul() { |
273 |
String source = "precio + 10 * 2 + 20 + 30"; |
|
274 |
|
|
275 | 278 |
SymbolTable symbolTable = createSymbolTable(); |
276 | 279 |
Compiler compiler = createCompiler(); |
277 | 280 |
Interpreter interpreter = createInterpreter(symbolTable); |
278 | 281 |
|
282 |
String source = "precio + 10 * 2 + 20 + 30"; |
|
283 |
|
|
279 | 284 |
Code code = compiler.compileExpression(source); |
280 | 285 |
Object v = interpreter.run(code); |
281 | 286 |
assertEquals(270, ((Number)v).intValue()); |
282 | 287 |
} |
283 | 288 |
|
284 | 289 |
public void testAddMulPar() { |
285 |
String source = "(precio + 10) * 2 + 20 + 30"; |
|
286 |
|
|
287 | 290 |
SymbolTable symbolTable = createSymbolTable(); |
288 | 291 |
Compiler compiler = createCompiler(); |
289 | 292 |
Interpreter interpreter = createInterpreter(symbolTable); |
290 | 293 |
|
294 |
String source = "(precio + 10) * 2 + 20 + 30"; |
|
295 |
|
|
291 | 296 |
Code code = compiler.compileExpression(source); |
292 | 297 |
Object v = interpreter.run(code); |
293 | 298 |
assertEquals(470, ((Number)v).intValue()); |
294 | 299 |
} |
295 | 300 |
|
296 | 301 |
public void testAbs() { |
297 |
String source = "precio + abs(10)"; |
|
298 |
|
|
299 | 302 |
SymbolTable symbolTable = createSymbolTable(); |
300 | 303 |
Compiler compiler = createCompiler(); |
301 | 304 |
Interpreter interpreter = createInterpreter(symbolTable); |
302 | 305 |
|
306 |
String source = "precio + abs(10)"; |
|
307 |
|
|
303 | 308 |
Code code = compiler.compileExpression(source); |
304 | 309 |
Object v = interpreter.run(code); |
305 | 310 |
assertEquals(210, ((Number)v).intValue()); |
306 | 311 |
} |
307 | 312 |
|
308 | 313 |
public void testAbs2() { |
309 |
String source = "precio + abs(-10)"; |
|
310 |
|
|
311 | 314 |
SymbolTable symbolTable = createSymbolTable(); |
312 | 315 |
Compiler compiler = createCompiler(); |
313 | 316 |
Interpreter interpreter = createInterpreter(symbolTable); |
314 | 317 |
|
318 |
String source = "precio + abs(-10)"; |
|
319 |
|
|
315 | 320 |
Code code = compiler.compileExpression(source); |
316 | 321 |
Object v = interpreter.run(code); |
317 | 322 |
assertEquals(210, ((Number)v).intValue()); |
318 | 323 |
} |
319 | 324 |
|
320 | 325 |
public void testCeil() { |
321 |
String source = "precio + CEIL(PI())"; |
|
322 |
|
|
323 | 326 |
SymbolTable symbolTable = createSymbolTable(); |
324 | 327 |
Compiler compiler = createCompiler(); |
325 | 328 |
Interpreter interpreter = createInterpreter(symbolTable); |
326 | 329 |
|
330 |
String source = "precio + CEIL(PI())"; |
|
331 |
|
|
327 | 332 |
Code code = compiler.compileExpression(source); |
328 | 333 |
Object v = interpreter.run(code); |
329 | 334 |
assertEquals(204, ((Number)v).intValue()); |
Also available in: Unified diff