Extend soft verifcation testing to include members
Bug: b/242078642
Change-Id: I61a6ff1c67fea35da6d1079a78ce6e12d1a48572
diff --git a/src/test/java/com/android/tools/r8/softverification/TestInstanceFieldWithOtherMembers.java b/src/test/java/com/android/tools/r8/softverification/TestInstanceFieldWithOtherMembers.java
new file mode 100644
index 0000000..b13476d
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/softverification/TestInstanceFieldWithOtherMembers.java
@@ -0,0 +1,186 @@
+// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.softverification;
+
+public class TestInstanceFieldWithOtherMembers {
+
+ public static String run() {
+ return run(null);
+ }
+
+ public static String run(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ System.out.println(missingClass.instanceField);
+ }
+ if (System.currentTimeMillis() == 0) {
+ System.out.println(missingClass.instanceField);
+ }
+ String currentString = "foobar";
+ for (int i = 0; i < 10; i++) {
+ currentString = "foobar" + (i + currentString.length());
+ }
+ return currentString;
+ }
+
+ public static String run1(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run2(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run3(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run4(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run5(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run6(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run7(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run8(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run9(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run10(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run11(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run12(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run13(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run14(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run15(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run16(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run17(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run18(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run19(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run20(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/softverification/TestRunner.java b/src/test/java/com/android/tools/r8/softverification/TestRunner.java
index dbe5ab1..a29ad21 100644
--- a/src/test/java/com/android/tools/r8/softverification/TestRunner.java
+++ b/src/test/java/com/android/tools/r8/softverification/TestRunner.java
@@ -41,12 +41,18 @@
measure.start("StaticField");
TestStaticField.run();
sb.append(measure.stop());
+ measure.start("StaticFieldWithOtherMembers");
+ TestStaticFieldWithOtherMembers.run();
+ sb.append(measure.stop());
measure.start("StaticMethod");
TestStaticMethod.run();
sb.append(measure.stop());
measure.start("InstanceField");
TestInstanceField.run();
sb.append(measure.stop());
+ measure.start("InstanceFieldWithOtherMembers");
+ TestInstanceFieldWithOtherMembers.run();
+ sb.append(measure.stop());
measure.start("HashCode");
TestHashCode.run();
sb.append(measure.stop());
diff --git a/src/test/java/com/android/tools/r8/softverification/TestRunnerBuilder.java b/src/test/java/com/android/tools/r8/softverification/TestRunnerBuilder.java
index c3f91db..185c3bc 100644
--- a/src/test/java/com/android/tools/r8/softverification/TestRunnerBuilder.java
+++ b/src/test/java/com/android/tools/r8/softverification/TestRunnerBuilder.java
@@ -72,9 +72,10 @@
.build();
}
- private static final Path ANDROID_STUDIO_LIB_PATH = Paths.get("PATH_TO_PROJECT/libs/library.jar");
+ private static final Path ANDROID_STUDIO_LIB_PATH =
+ Paths.get("<path-to-project>/app/libs/library.jar");
- private static final int COUNT = 800;
+ private static final int COUNT = 400;
private static final List<Class<?>> referenceClasses =
ImmutableList.of(
@@ -86,8 +87,10 @@
TestTypeReference.class,
TestNewInstance.class,
TestStaticField.class,
+ TestStaticFieldWithOtherMembers.class,
TestStaticMethod.class,
TestInstanceField.class,
+ TestInstanceFieldWithOtherMembers.class,
TestInstanceMethod.class,
TestHashCode.class,
TestTryCatch.class);
diff --git a/src/test/java/com/android/tools/r8/softverification/TestStaticFieldWithOtherMembers.java b/src/test/java/com/android/tools/r8/softverification/TestStaticFieldWithOtherMembers.java
new file mode 100644
index 0000000..be3d6b0
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/softverification/TestStaticFieldWithOtherMembers.java
@@ -0,0 +1,182 @@
+// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.softverification;
+
+public class TestStaticFieldWithOtherMembers {
+
+ public static String run() {
+ if (System.currentTimeMillis() == 0) {
+ System.out.println(MissingClass.staticField);
+ }
+ if (System.currentTimeMillis() == 0) {
+ System.out.println(MissingClass.staticField);
+ }
+ String currentString = "foobar";
+ for (int i = 0; i < 10; i++) {
+ currentString = "foobar" + (i + currentString.length());
+ }
+ return currentString;
+ }
+
+ public static String run1(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run2(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run3(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run4(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run5(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run6(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run7(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run8(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run9(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run10(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run11(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run12(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run13(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run14(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run15(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run16(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run17(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run18(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run19(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+
+ public static String run20(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.instanceMethod();
+ return "foo";
+ }
+ return "bar";
+ }
+}