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