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
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
        symbolTable.addVar("1990", 0.168873933773767);
49
        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
    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

    
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
}