Statistics
| Revision:

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
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
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
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
        new DefaultLibrariesInitializer().fullInitialize();
25
    }
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
        DefaultSymbolTable symbolTable = new DefaultSymbolTable();
48
        symbolTable.setVar("precio", 200);
49
        symbolTable.setVar("1990", 0.168873933773767);
50
        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
    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
    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
    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

    
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
    }    
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
    }
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
}