1 package serp.bytecode;
2
3 import junit.framework.*;
4 import junit.textui.*;
5
6
7
8
9
10
11 public class TestMathInstruction extends TestCase {
12 private Code _code = new Code();
13
14 public TestMathInstruction(String test) {
15 super(test);
16 }
17
18
19
20
21 public void testInitialize() {
22 assertEquals(Constants.NOP, _code.math().getOpcode());
23 assertEquals(Constants.NOP, _code.xadd().getOpcode());
24 assertEquals(Constants.IADD, _code.iadd().getOpcode());
25 assertEquals(Constants.LADD, _code.ladd().getOpcode());
26 assertEquals(Constants.FADD, _code.fadd().getOpcode());
27 assertEquals(Constants.DADD, _code.dadd().getOpcode());
28 assertEquals(Constants.NOP, _code.xsub().getOpcode());
29 assertEquals(Constants.ISUB, _code.isub().getOpcode());
30 assertEquals(Constants.LSUB, _code.lsub().getOpcode());
31 assertEquals(Constants.FSUB, _code.fsub().getOpcode());
32 assertEquals(Constants.DSUB, _code.dsub().getOpcode());
33 assertEquals(Constants.NOP, _code.xmul().getOpcode());
34 assertEquals(Constants.IMUL, _code.imul().getOpcode());
35 assertEquals(Constants.LMUL, _code.lmul().getOpcode());
36 assertEquals(Constants.FMUL, _code.fmul().getOpcode());
37 assertEquals(Constants.DMUL, _code.dmul().getOpcode());
38 assertEquals(Constants.NOP, _code.xdiv().getOpcode());
39 assertEquals(Constants.IDIV, _code.idiv().getOpcode());
40 assertEquals(Constants.LDIV, _code.ldiv().getOpcode());
41 assertEquals(Constants.FDIV, _code.fdiv().getOpcode());
42 assertEquals(Constants.DDIV, _code.ddiv().getOpcode());
43 assertEquals(Constants.NOP, _code.xrem().getOpcode());
44 assertEquals(Constants.IREM, _code.irem().getOpcode());
45 assertEquals(Constants.LREM, _code.lrem().getOpcode());
46 assertEquals(Constants.FREM, _code.frem().getOpcode());
47 assertEquals(Constants.DREM, _code.drem().getOpcode());
48 assertEquals(Constants.NOP, _code.xneg().getOpcode());
49 assertEquals(Constants.INEG, _code.ineg().getOpcode());
50 assertEquals(Constants.LNEG, _code.lneg().getOpcode());
51 assertEquals(Constants.FNEG, _code.fneg().getOpcode());
52 assertEquals(Constants.DNEG, _code.dneg().getOpcode());
53 assertEquals(Constants.NOP, _code.xshl().getOpcode());
54 assertEquals(Constants.ISHL, _code.ishl().getOpcode());
55 assertEquals(Constants.LSHL, _code.lshl().getOpcode());
56 assertEquals(Constants.NOP, _code.xshr().getOpcode());
57 assertEquals(Constants.ISHR, _code.ishr().getOpcode());
58 assertEquals(Constants.LSHR, _code.lshr().getOpcode());
59 assertEquals(Constants.NOP, _code.xushr().getOpcode());
60 assertEquals(Constants.IUSHR, _code.iushr().getOpcode());
61 assertEquals(Constants.LUSHR, _code.lushr().getOpcode());
62 assertEquals(Constants.NOP, _code.xand().getOpcode());
63 assertEquals(Constants.IAND, _code.iand().getOpcode());
64 assertEquals(Constants.LAND, _code.land().getOpcode());
65 assertEquals(Constants.NOP, _code.xor().getOpcode());
66 assertEquals(Constants.IOR, _code.ior().getOpcode());
67 assertEquals(Constants.LOR, _code.lor().getOpcode());
68 assertEquals(Constants.NOP, _code.xxor().getOpcode());
69 assertEquals(Constants.IXOR, _code.ixor().getOpcode());
70 assertEquals(Constants.LXOR, _code.lxor().getOpcode());
71 }
72
73
74
75
76 public void testGetType() {
77 MathInstruction ins = _code.math();
78 assertNull(ins.getType());
79 assertEquals(-1, ins.getOperation());
80
81 ins = _code.xadd();
82 assertNull(ins.getType());
83 assertEquals(Constants.MATH_ADD, ins.getOperation());
84 ins = _code.iadd();
85 assertEquals(int.class, ins.getType());
86 assertEquals(Constants.MATH_ADD, ins.getOperation());
87 ins = _code.ladd();
88 assertEquals(long.class, ins.getType());
89 assertEquals(Constants.MATH_ADD, ins.getOperation());
90 ins = _code.fadd();
91 assertEquals(float.class, ins.getType());
92 assertEquals(Constants.MATH_ADD, ins.getOperation());
93 ins = _code.dadd();
94 assertEquals(double.class, ins.getType());
95 assertEquals(Constants.MATH_ADD, ins.getOperation());
96
97 ins = _code.xsub();
98 assertNull(ins.getType());
99 assertEquals(Constants.MATH_SUB, ins.getOperation());
100 ins = _code.isub();
101 assertEquals(int.class, ins.getType());
102 assertEquals(Constants.MATH_SUB, ins.getOperation());
103 ins = _code.lsub();
104 assertEquals(long.class, ins.getType());
105 assertEquals(Constants.MATH_SUB, ins.getOperation());
106 ins = _code.fsub();
107 assertEquals(float.class, ins.getType());
108 assertEquals(Constants.MATH_SUB, ins.getOperation());
109 ins = _code.dsub();
110 assertEquals(double.class, ins.getType());
111 assertEquals(Constants.MATH_SUB, ins.getOperation());
112
113 ins = _code.xmul();
114 assertNull(ins.getType());
115 assertEquals(Constants.MATH_MUL, ins.getOperation());
116 ins = _code.imul();
117 assertEquals(int.class, ins.getType());
118 assertEquals(Constants.MATH_MUL, ins.getOperation());
119 ins = _code.lmul();
120 assertEquals(long.class, ins.getType());
121 assertEquals(Constants.MATH_MUL, ins.getOperation());
122 ins = _code.fmul();
123 assertEquals(float.class, ins.getType());
124 assertEquals(Constants.MATH_MUL, ins.getOperation());
125 ins = _code.dmul();
126 assertEquals(double.class, ins.getType());
127 assertEquals(Constants.MATH_MUL, ins.getOperation());
128
129 ins = _code.xdiv();
130 assertNull(ins.getType());
131 assertEquals(Constants.MATH_DIV, ins.getOperation());
132 ins = _code.idiv();
133 assertEquals(int.class, ins.getType());
134 assertEquals(Constants.MATH_DIV, ins.getOperation());
135 ins = _code.ldiv();
136 assertEquals(long.class, ins.getType());
137 assertEquals(Constants.MATH_DIV, ins.getOperation());
138 ins = _code.fdiv();
139 assertEquals(float.class, ins.getType());
140 assertEquals(Constants.MATH_DIV, ins.getOperation());
141 ins = _code.ddiv();
142 assertEquals(double.class, ins.getType());
143 assertEquals(Constants.MATH_DIV, ins.getOperation());
144
145 ins = _code.xrem();
146 assertNull(ins.getType());
147 assertEquals(Constants.MATH_REM, ins.getOperation());
148 ins = _code.irem();
149 assertEquals(int.class, ins.getType());
150 assertEquals(Constants.MATH_REM, ins.getOperation());
151 ins = _code.lrem();
152 assertEquals(long.class, ins.getType());
153 assertEquals(Constants.MATH_REM, ins.getOperation());
154 ins = _code.frem();
155 assertEquals(float.class, ins.getType());
156 assertEquals(Constants.MATH_REM, ins.getOperation());
157 ins = _code.drem();
158 assertEquals(double.class, ins.getType());
159 assertEquals(Constants.MATH_REM, ins.getOperation());
160
161 ins = _code.xneg();
162 assertNull(ins.getType());
163 assertEquals(Constants.MATH_NEG, ins.getOperation());
164 ins = _code.ineg();
165 assertEquals(int.class, ins.getType());
166 assertEquals(Constants.MATH_NEG, ins.getOperation());
167 ins = _code.lneg();
168 assertEquals(long.class, ins.getType());
169 assertEquals(Constants.MATH_NEG, ins.getOperation());
170 ins = _code.fneg();
171 assertEquals(float.class, ins.getType());
172 assertEquals(Constants.MATH_NEG, ins.getOperation());
173 ins = _code.dneg();
174 assertEquals(double.class, ins.getType());
175 assertEquals(Constants.MATH_NEG, ins.getOperation());
176
177 ins = _code.xshl();
178 assertNull(ins.getType());
179 assertEquals(Constants.MATH_SHL, ins.getOperation());
180 ins = _code.ishl();
181 assertEquals(int.class, ins.getType());
182 assertEquals(Constants.MATH_SHL, ins.getOperation());
183 ins = _code.lshl();
184 assertEquals(long.class, ins.getType());
185 assertEquals(Constants.MATH_SHL, ins.getOperation());
186
187 ins = _code.xshr();
188 assertNull(ins.getType());
189 assertEquals(Constants.MATH_SHR, ins.getOperation());
190 ins = _code.ishr();
191 assertEquals(int.class, ins.getType());
192 assertEquals(Constants.MATH_SHR, ins.getOperation());
193 ins = _code.lshr();
194 assertEquals(long.class, ins.getType());
195 assertEquals(Constants.MATH_SHR, ins.getOperation());
196
197 ins = _code.xushr();
198 assertNull(ins.getType());
199 assertEquals(Constants.MATH_USHR, ins.getOperation());
200 ins = _code.iushr();
201 assertEquals(int.class, ins.getType());
202 assertEquals(Constants.MATH_USHR, ins.getOperation());
203 ins = _code.lushr();
204 assertEquals(long.class, ins.getType());
205 assertEquals(Constants.MATH_USHR, ins.getOperation());
206
207 ins = _code.xand();
208 assertNull(ins.getType());
209 assertEquals(Constants.MATH_AND, ins.getOperation());
210 ins = _code.iand();
211 assertEquals(int.class, ins.getType());
212 assertEquals(Constants.MATH_AND, ins.getOperation());
213 ins = _code.land();
214 assertEquals(long.class, ins.getType());
215 assertEquals(Constants.MATH_AND, ins.getOperation());
216
217 ins = _code.xor();
218 assertNull(ins.getType());
219 assertEquals(Constants.MATH_OR, ins.getOperation());
220 ins = _code.ior();
221 assertEquals(int.class, ins.getType());
222 assertEquals(Constants.MATH_OR, ins.getOperation());
223 ins = _code.lor();
224 assertEquals(long.class, ins.getType());
225 assertEquals(Constants.MATH_OR, ins.getOperation());
226
227 ins = _code.xxor();
228 assertNull(ins.getType());
229 assertEquals(Constants.MATH_XOR, ins.getOperation());
230 ins = _code.ixor();
231 assertEquals(int.class, ins.getType());
232 assertEquals(Constants.MATH_XOR, ins.getOperation());
233 ins = _code.lxor();
234 assertEquals(long.class, ins.getType());
235 assertEquals(Constants.MATH_XOR, ins.getOperation());
236 }
237
238
239
240
241
242 public void testOpcodeMorph() {
243 MathInstruction math = _code.math();
244
245 math.setOperation(Constants.MATH_ADD);
246 assertEquals(Constants.NOP, math.setType((String) null).getOpcode());
247 assertEquals(Constants.NOP, math.setType((Class) null).getOpcode());
248 assertEquals(Constants.NOP, math.setType((BCClass) null).getOpcode());
249 assertEquals(Constants.IADD, math.setType(int.class).getOpcode());
250 assertEquals(Constants.LADD, math.setType(long.class).getOpcode());
251 assertEquals(Constants.FADD, math.setType(float.class).getOpcode());
252 assertEquals(Constants.DADD, math.setType(double.class).getOpcode());
253 assertEquals(Constants.IADD, math.setType(boolean.class).getOpcode());
254 assertEquals(Constants.IADD, math.setType(short.class).getOpcode());
255 assertEquals(Constants.IADD, math.setType(char.class).getOpcode());
256
257 math.setOperation(Constants.MATH_SUB);
258 assertEquals(Constants.NOP, math.setType((Class) null).getOpcode());
259 assertEquals(Constants.ISUB, math.setType(int.class).getOpcode());
260 assertEquals(Constants.LSUB, math.setType(long.class).getOpcode());
261 assertEquals(Constants.FSUB, math.setType(float.class).getOpcode());
262 assertEquals(Constants.DSUB, math.setType(double.class).getOpcode());
263
264 math.setOperation(Constants.MATH_MUL);
265 assertEquals(Constants.NOP, math.setType((Class) null).getOpcode());
266 assertEquals(Constants.IMUL, math.setType(int.class).getOpcode());
267 assertEquals(Constants.LMUL, math.setType(long.class).getOpcode());
268 assertEquals(Constants.FMUL, math.setType(float.class).getOpcode());
269 assertEquals(Constants.DMUL, math.setType(double.class).getOpcode());
270
271 math.setOperation(Constants.MATH_DIV);
272 assertEquals(Constants.NOP, math.setType((Class) null).getOpcode());
273 assertEquals(Constants.IDIV, math.setType(int.class).getOpcode());
274 assertEquals(Constants.LDIV, math.setType(long.class).getOpcode());
275 assertEquals(Constants.FDIV, math.setType(float.class).getOpcode());
276 assertEquals(Constants.DDIV, math.setType(double.class).getOpcode());
277
278 math.setOperation(Constants.MATH_REM);
279 assertEquals(Constants.NOP, math.setType((Class) null).getOpcode());
280 assertEquals(Constants.IREM, math.setType(int.class).getOpcode());
281 assertEquals(Constants.LREM, math.setType(long.class).getOpcode());
282 assertEquals(Constants.FREM, math.setType(float.class).getOpcode());
283 assertEquals(Constants.DREM, math.setType(double.class).getOpcode());
284
285 math.setOperation(Constants.MATH_NEG);
286 assertEquals(Constants.NOP, math.setType((Class) null).getOpcode());
287 assertEquals(Constants.INEG, math.setType(int.class).getOpcode());
288 assertEquals(Constants.LNEG, math.setType(long.class).getOpcode());
289 assertEquals(Constants.FNEG, math.setType(float.class).getOpcode());
290 assertEquals(Constants.DNEG, math.setType(double.class).getOpcode());
291
292 math.setOperation(Constants.MATH_SHL);
293 assertEquals(Constants.NOP, math.setType((Class) null).getOpcode());
294 assertEquals(Constants.ISHL, math.setType(int.class).getOpcode());
295 assertEquals(Constants.LSHL, math.setType(long.class).getOpcode());
296
297 math.setOperation(Constants.MATH_SHR);
298 assertEquals(Constants.NOP, math.setType((Class) null).getOpcode());
299 assertEquals(Constants.ISHR, math.setType(int.class).getOpcode());
300 assertEquals(Constants.LSHR, math.setType(long.class).getOpcode());
301
302 math.setOperation(Constants.MATH_USHR);
303 assertEquals(Constants.NOP, math.setType((Class) null).getOpcode());
304 assertEquals(Constants.IUSHR, math.setType(int.class).getOpcode());
305 assertEquals(Constants.LUSHR, math.setType(long.class).getOpcode());
306
307 math.setOperation(Constants.MATH_AND);
308 assertEquals(Constants.NOP, math.setType((Class) null).getOpcode());
309 assertEquals(Constants.IAND, math.setType(int.class).getOpcode());
310 assertEquals(Constants.LAND, math.setType(long.class).getOpcode());
311
312 math.setOperation(Constants.MATH_OR);
313 assertEquals(Constants.NOP, math.setType((Class) null).getOpcode());
314 assertEquals(Constants.IOR, math.setType(int.class).getOpcode());
315 assertEquals(Constants.LOR, math.setType(long.class).getOpcode());
316
317 math.setOperation(Constants.MATH_XOR);
318 assertEquals(Constants.NOP, math.setType((Class) null).getOpcode());
319 assertEquals(Constants.IXOR, math.setType(int.class).getOpcode());
320 assertEquals(Constants.LXOR, math.setType(long.class).getOpcode());
321 }
322
323 public static Test suite() {
324 return new TestSuite(TestMathInstruction.class);
325 }
326
327 public static void main(String[] args) {
328 TestRunner.run(suite());
329 }
330 }