diff --git a/src/test/java/com/android/tools/r8/apimodel/ApiModelOutlineHorizontalMergingTest.java b/src/test/java/com/android/tools/r8/apimodel/ApiModelOutlineHorizontalMergingTest.java
index eae582d..f5642b5 100644
--- a/src/test/java/com/android/tools/r8/apimodel/ApiModelOutlineHorizontalMergingTest.java
+++ b/src/test/java/com/android/tools/r8/apimodel/ApiModelOutlineHorizontalMergingTest.java
@@ -100,10 +100,12 @@
         .inspect(
             inspector -> {
               // TODO(b/187675788): Update when horizontal merging is enabled for D8 for debug mode.
-              if (parameters.getApiLevel().isLessThan(libraryClassApiLevel)) {
+              if (parameters.getApiLevel().isLessThan(AndroidApiLevel.L)) {
+                assertEquals(7, inspector.allClasses().size());
+              } else if (parameters.getApiLevel().isLessThan(libraryClassApiLevel)) {
                 // We have generated 4 outlines two having api level 23 and two having api level 27
                 // and 2 outlines for each instance initializer.
-                assertEquals(9, inspector.allClasses().size());
+                assertEquals(11, inspector.allClasses().size());
               } else if (parameters.getApiLevel().isLessThan(firstMethodApiLevel)) {
                 // We have generated 4 outlines two having api level 23 and two having api level 27.
                 assertEquals(7, inspector.allClasses().size());
@@ -172,7 +174,9 @@
       // If less than the library api level then we have synthesized two instance initializer
       // outlines as well.
       // Check that the levels are horizontally merged.
-      boolean willOutlineInitializers = parameters.getApiLevel().isLessThan(libraryClassApiLevel);
+      boolean willOutlineInitializers =
+          parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.L)
+              && parameters.getApiLevel().isLessThan(libraryClassApiLevel);
       assertEquals(willOutlineInitializers ? 6 : 5, inspector.allClasses().size());
       assertEquals(2, outlinedAddedOn23.size());
       assertTrue(
diff --git a/src/test/java/com/android/tools/r8/apimodel/ApiModelOutlineInstanceInitializerTest.java b/src/test/java/com/android/tools/r8/apimodel/ApiModelOutlineInstanceInitializerTest.java
index 987270a..ab3716d 100644
--- a/src/test/java/com/android/tools/r8/apimodel/ApiModelOutlineInstanceInitializerTest.java
+++ b/src/test/java/com/android/tools/r8/apimodel/ApiModelOutlineInstanceInitializerTest.java
@@ -73,7 +73,7 @@
         .setMode(CompilationMode.DEBUG)
         .apply(this::setupTestBuilder)
         .compile()
-        .inspect(this::inspect)
+        .inspect(inspector -> inspect(inspector, false))
         .applyIf(
             addToBootClasspath(),
             b -> b.addBootClasspathClasses(LibraryClass.class, Argument.class))
@@ -88,7 +88,7 @@
         .setMode(CompilationMode.RELEASE)
         .apply(this::setupTestBuilder)
         .compile()
-        .inspect(this::inspect)
+        .inspect(inspector -> inspect(inspector, false))
         .applyIf(
             addToBootClasspath(),
             b -> b.addBootClasspathClasses(LibraryClass.class, Argument.class))
@@ -102,7 +102,7 @@
         .apply(this::setupTestBuilder)
         .addKeepMainRule(Main.class)
         .compile()
-        .inspect(this::inspect)
+        .inspect(inspector -> inspect(inspector, true))
         .applyIf(
             addToBootClasspath(),
             b -> b.addBootClasspathClasses(LibraryClass.class, Argument.class))
@@ -110,14 +110,16 @@
         .apply(this::checkOutput);
   }
 
-  private void inspect(CodeInspector inspector) throws Exception {
+  private void inspect(CodeInspector inspector, boolean isR8) throws Exception {
     Method mainMethod = Main.class.getMethod("main", String[].class);
     verifyThat(inspector, parameters, Argument.class.getDeclaredConstructor(String.class))
-        .isOutlinedFromUntil(mainMethod, classApiLevel);
+        .isOutlinedFromBetween(mainMethod, AndroidApiLevel.L, classApiLevel);
     verifyThat(inspector, parameters, LibraryClass.class.getDeclaredConstructor(Argument.class))
-        .isOutlinedFromUntil(mainMethod, classApiLevel);
+        .isOutlinedFromBetween(mainMethod, AndroidApiLevel.L, classApiLevel);
+    // For R8 we inline into the method with an instance initializer when we do not outline it.
     verifyThat(inspector, parameters, LibraryClass.class.getMethod("print"))
-        .isOutlinedFromUntil(mainMethod, classApiLevel);
+        .isOutlinedFromBetween(
+            mainMethod, isR8 ? AndroidApiLevel.L : AndroidApiLevel.B, classApiLevel);
   }
 
   private void checkOutput(SingleTestRunResult<?> runResult) {
