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";
+  }
+}