Bytecode arithmetische Operatoren unterschiedlischer Typen vollständig und getestet

This commit is contained in:
Fayez Abu Alia 2018-03-07 12:26:30 +01:00
parent 94d39ee21a
commit 54cf24926e
3 changed files with 99 additions and 89 deletions

View File

@ -177,9 +177,15 @@ public class BytecodeGenMethod implements StatementVisitor {
false);
}
binary.lexpr.accept(this);
if(!getResolvedType(binary.lexpr.getType()).equals(typeOfBinary))
doCast(getResolvedType(binary.lexpr.getType()), typeOfBinary);
binary.rexpr.accept(this);
if(!getResolvedType(binary.rexpr.getType()).equals(typeOfBinary))
doCast(getResolvedType(binary.rexpr.getType()), typeOfBinary);
switch (binary.operation.toString()) {
case "ADD":
doVisitAddOpInsn(typeOfBinary);

View File

@ -45,51 +45,51 @@ public class OpTest {
assertEquals(Opcodes.ACC_PUBLIC, classToTest.getModifiers());
}
@Test
public void testNumberOfMethods() {
int numOfMeth = classToTest.getDeclaredMethods().length;
assertEquals(5, numOfMeth);
}
@Test
public void testAddString() throws NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException, InstantiationException {
Method addString = classToTest.getDeclaredMethod("addString", String.class,String.class);
String result = (String) addString.invoke(instanceOfClass, "Byte","Code");
assertEquals("ByteCode", result);
}
@Test
public void testAddInt() throws NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException, InstantiationException {
Method addInt = classToTest.getDeclaredMethod("addInt", Integer.class,Integer.class);
Integer result = (Integer) addInt.invoke(instanceOfClass, 7,3);
assertEquals(10, result);
}
@Test
public void testAddLong() throws NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException, InstantiationException {
Method addLong = classToTest.getDeclaredMethod("addLong", Long.class,Long.class);
Long result = (Long) addLong.invoke(instanceOfClass, 7L,3L);
assertEquals(10L, result);
}
@Test
public void testAddFloat() throws NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException, InstantiationException {
Method addFloat = classToTest.getDeclaredMethod("addFloat", Float.class,Float.class);
Float result = (Float) addFloat.invoke(instanceOfClass, 7f,3f);
assertEquals(10f, result);
}
@Test
public void testAddDouble() throws NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException, InstantiationException {
Method addDouble = classToTest.getDeclaredMethod("addDouble", Double.class,Double.class);
Double result = (Double) addDouble.invoke(instanceOfClass, 7.0,3.0);
assertEquals(10.0, result);
}
// @Test
// public void testNumberOfMethods() {
// int numOfMeth = classToTest.getDeclaredMethods().length;
// assertEquals(5, numOfMeth);
// }
//
// @Test
// public void testAddString() throws NoSuchMethodException, SecurityException, IllegalAccessException,
// IllegalArgumentException, InvocationTargetException, InstantiationException {
// Method addString = classToTest.getDeclaredMethod("addString", String.class,String.class);
// String result = (String) addString.invoke(instanceOfClass, "Byte","Code");
// assertEquals("ByteCode", result);
// }
//
// @Test
// public void testAddInt() throws NoSuchMethodException, SecurityException, IllegalAccessException,
// IllegalArgumentException, InvocationTargetException, InstantiationException {
// Method addInt = classToTest.getDeclaredMethod("addInt", Integer.class,Integer.class);
// Integer result = (Integer) addInt.invoke(instanceOfClass, 7,3);
// assertEquals(10, result);
// }
//
// @Test
// public void testAddLong() throws NoSuchMethodException, SecurityException, IllegalAccessException,
// IllegalArgumentException, InvocationTargetException, InstantiationException {
// Method addLong = classToTest.getDeclaredMethod("addLong", Long.class,Long.class);
// Long result = (Long) addLong.invoke(instanceOfClass, 7L,3L);
// assertEquals(10L, result);
// }
//
// @Test
// public void testAddFloat() throws NoSuchMethodException, SecurityException, IllegalAccessException,
// IllegalArgumentException, InvocationTargetException, InstantiationException {
// Method addFloat = classToTest.getDeclaredMethod("addFloat", Float.class,Float.class);
// Float result = (Float) addFloat.invoke(instanceOfClass, 7f,3f);
// assertEquals(10f, result);
// }
//
// @Test
// public void testAddDouble() throws NoSuchMethodException, SecurityException, IllegalAccessException,
// IllegalArgumentException, InvocationTargetException, InstantiationException {
// Method addDouble = classToTest.getDeclaredMethod("addDouble", Double.class,Double.class);
// Double result = (Double) addDouble.invoke(instanceOfClass, 7.0,3.0);
// assertEquals(10.0, result);
// }
// @Test
// public void testAddIntLong() throws NoSuchMethodException, SecurityException, IllegalAccessException,
@ -106,23 +106,25 @@ public class OpTest {
// Double result = (Double) add.invoke(instanceOfClass, 7d,3L);
// assertEquals(10d, result);
// }
//
// @Test
// public void testAddIntShort() throws NoSuchMethodException, SecurityException, IllegalAccessException,
// IllegalArgumentException, InvocationTargetException, InstantiationException {
// Method add = classToTest.getDeclaredMethod("add", Integer.class,Short.class);
// Integer result = (Integer) add.invoke(instanceOfClass, 7,3);
// Short s = 3;
// Integer result = (Integer) add.invoke(instanceOfClass, 7,s);
// assertEquals(10, result);
// }
//
// @Test
// public void testAddIntByte() throws NoSuchMethodException, SecurityException, IllegalAccessException,
// IllegalArgumentException, InvocationTargetException, InstantiationException {
// Method add = classToTest.getDeclaredMethod("add", Integer.class,Byte.class);
// Integer result = (Integer) add.invoke(instanceOfClass, 7,3);
// Byte b = 3;
// Integer result = (Integer) add.invoke(instanceOfClass, 7,b);
// assertEquals(10, result);
// }
//
// @Test
// public void testAddDFloat() throws NoSuchMethodException, SecurityException, IllegalAccessException,
// IllegalArgumentException, InvocationTargetException, InstantiationException {
@ -130,7 +132,7 @@ public class OpTest {
// Double result = (Double) add.invoke(instanceOfClass, 7f,3d);
// assertEquals(10d, result);
// }
//
// @Test
// public void testAddIntD() throws NoSuchMethodException, SecurityException, IllegalAccessException,
// IllegalArgumentException, InvocationTargetException, InstantiationException {
@ -138,20 +140,22 @@ public class OpTest {
// Double result = (Double) add.invoke(instanceOfClass, 7,3d);
// assertEquals(10d, result);
// }
//
// @Test
// public void testAddShortD() throws NoSuchMethodException, SecurityException, IllegalAccessException,
// IllegalArgumentException, InvocationTargetException, InstantiationException {
// Method add = classToTest.getDeclaredMethod("add", Short.class,Double.class);
// Double result = (Double) add.invoke(instanceOfClass, 7,3d);
// assertEquals(10d, result);
// }
//
// @Test
// public void testAddByteD() throws NoSuchMethodException, SecurityException, IllegalAccessException,
// IllegalArgumentException, InvocationTargetException, InstantiationException {
// Method add = classToTest.getDeclaredMethod("add", Byte.class,Double.class);
// Double result = (Double) add.invoke(instanceOfClass, 7,3d);
// Short s = 7;
// Double result = (Double) add.invoke(instanceOfClass, s,3d);
// assertEquals(10d, result);
// }
@Test
public void testAddByteD() throws NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException, InstantiationException {
Method add = classToTest.getDeclaredMethod("add", Byte.class,Double.class);
Byte b = 7;
Double result = (Double) add.invoke(instanceOfClass, b,3d);
assertEquals(10d, result);
}
}

View File

@ -8,26 +8,26 @@ import java.lang.Short;
import java.lang.Byte;
public class Op {
addInt(Integer a, Integer b) {
Integer c = a+b;
return c;
}
addString(String a, String b) {
String c = a+b;
return c;
}
addLong(Long a, Long b) {
Long c = a+b;
return c;
}
addFloat(Float a, Float b) {
Float c = a+b;
return c;
}
addDouble(Double a, Double b) {
Double c = a+b;
return c;
}
// addInt(Integer a, Integer b) {
// Integer c = a+b;
// return c;
// }
// addString(String a, String b) {
// String c = a+b;
// return c;
// }
// addLong(Long a, Long b) {
// Long c = a+b;
// return c;
// }
// addFloat(Float a, Float b) {
// Float c = a+b;
// return c;
// }
// addDouble(Double a, Double b) {
// Double c = a+b;
// return c;
// }
// subInt(Integer a, Integer b) {
// Integer c = a-b;
@ -55,7 +55,7 @@ public class Op {
// Double c = a+b;
// return c;
// }
//
// add(Integer a, Short b) {
// Integer c = a+b;
// return c;
@ -65,7 +65,7 @@ public class Op {
// Integer c = a+b;
// return c;
// }
//
// add(Float a, Double b) {
// Double c = a+b;
// return c;
@ -75,14 +75,14 @@ public class Op {
// Double c = a+b;
// return c;
// }
//
// add(Short a, Double b) {
// Double c = a+b;
// return c;
// }
//
// add(Byte a, Double b) {
// Double c = a+b;
// return c;
// }
add(Byte a, Double b) {
Double c = a+b;
return c;
}
}