Reworked a couple of method inlining test cases for better coverage.
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@1505 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/test/com/google/gwt/dev/jjs/test/MethodCallTest.java b/user/test/com/google/gwt/dev/jjs/test/MethodCallTest.java
index 78b7652..70f7a43 100644
--- a/user/test/com/google/gwt/dev/jjs/test/MethodCallTest.java
+++ b/user/test/com/google/gwt/dev/jjs/test/MethodCallTest.java
@@ -92,6 +92,54 @@
return "com.google.gwt.dev.jjs.CompilerSuite";
}
+ /**
+ * Ensure that call-site side-effects happen before expressions in the callee
+ * are evaluated.
+ */
+ public void testArgumentEffectPreceedsCalleeEffect() {
+ value = 10;
+ int result = doubleValueAndAdd(value += 2);
+ assertEquals(24, value);
+ assertEquals(36, result);
+ }
+
+ /**
+ * Ensure that call-site side-effects happen before expressions in the callee
+ * are evaluated.
+ */
+ public void testArgumentEffectPreceedsCalleeValue() {
+ value = 0;
+ int result = addToValue(value = 10);
+ assertEquals(10, value);
+ assertEquals(20, result);
+ }
+
+ /**
+ * Ensure that side-effects are processed in the correct order.
+ */
+ public void testArgumentsEvalInCorrectOrder() {
+ value = 10;
+ int result = checkOrder(value, ++value);
+ assertEquals(11, value);
+ assertEquals(11010, result);
+
+ int localValue = 20;
+ result = checkOrder(localValue, ++localValue);
+ assertEquals(21, localValue);
+ assertEquals(21020, result);
+ }
+
+ /**
+ * Ensure that call-site evaluation happens before effects in the callee
+ * occur.
+ */
+ public void testArgumentValuePreceedsCalleeEffect() {
+ value = 10;
+ int result = resetValueAndAdd(value);
+ assertEquals(0, value);
+ assertEquals(10, result);
+ }
+
public void testManyArgs() {
assertEquals(32385, manyArgs(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
@@ -158,15 +206,6 @@
/**
* Ensure that call-site side-effects happen before callee side-effects.
*/
- public void testSideEffectsBeforeCallee() {
- value = 10;
- int result = checkSideEffectBeforeCallee(value = 0);
- assertEquals(0, result);
- }
-
- /**
- * Ensure that call-site side-effects happen before callee side-effects.
- */
public void testSideEffectsInFields() {
value = 10;
int result = add(++value, ++value);
@@ -174,19 +213,6 @@
}
/**
- * Ensure that side-effects are processed in the correct order.
- */
- public void testSideEffectsInWrongOrder() {
- value = 10;
- value = checkOrder(value, ++value);
- assertEquals(11010, value);
-
- int localValue = 20;
- localValue = checkOrder(localValue, ++localValue);
- assertEquals(21020, localValue);
- }
-
- /**
* Ensure that side-effects always happen before the exception.
*/
public void testSideEffectsVersusExceptions1() {
@@ -263,12 +289,12 @@
return j + i;
}
- private int checkOrder(int x, int y) {
- return y * 1000 + x;
+ private int addToValue(int i) {
+ return value + i;
}
- private int checkSideEffectBeforeCallee(int i) {
- return value + i;
+ private int checkOrder(int x, int y) {
+ return y * 1000 + x;
}
private int conditional1(int i) {
@@ -283,6 +309,10 @@
return (this.value != Integer.MAX_VALUE) || (i == 1);
}
+ private int doubleValueAndAdd(int i) {
+ return (value *= 2) + i;
+ }
+
private int recursiveSum(int x) {
if (x == 0) {
return 0;
@@ -291,6 +321,10 @@
}
}
+ private int resetValueAndAdd(int i) {
+ return (value = 0) + i;
+ }
+
private int throwExceptionAndReturn(int i) {
return throwMyException() + i;
}