diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java
index e9b687c..6697bed 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java
@@ -10,7 +10,6 @@
 import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsent;
 import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsentIf;
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static com.android.tools.r8.utils.codeinspector.Matchers.onlyIf;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -71,35 +70,26 @@
                         "class_inliner_lambda_j_style.SamIface$Consumer")
                     .addHorizontallyMergedClassesInspector(
                         inspector -> {
-                          if (!hasKotlinCGeneratedLambdaClasses && testParameters.isCfRuntime()) {
-                            inspector.assertNoClassesMerged();
-                          } else if (!hasKotlinCGeneratedLambdaClasses) {
+                          if (hasKotlinCGeneratedLambdaClasses) {
+                            inspector.assertIsCompleteMergeGroup(
+                                "class_inliner_lambda_j_style.MainKt$testStateful$1",
+                                "class_inliner_lambda_j_style.MainKt$testStateful$2",
+                                "class_inliner_lambda_j_style.MainKt$testStateful$2$1",
+                                "class_inliner_lambda_j_style.MainKt$testStateful$3",
+                                "class_inliner_lambda_j_style.MainKt$testStateful2$1",
+                                "class_inliner_lambda_j_style.MainKt$testStateful3$1");
+                          } else if (testParameters.isDexRuntime()) {
                             Set<Set<DexType>> mergeGroups = inspector.getMergeGroups();
                             assertEquals(1, mergeGroups.size());
-                            inspector
-                                .assertIsCompleteMergeGroup(
-                                    "class_inliner_lambda_j_style.MainKt$$ExternalSyntheticLambda0",
-                                    "class_inliner_lambda_j_style.MainKt$$ExternalSyntheticLambda2",
-                                    "class_inliner_lambda_j_style.MainKt$$ExternalSyntheticLambda4",
-                                    "class_inliner_lambda_j_style.MainKt$$ExternalSyntheticLambda3",
-                                    "class_inliner_lambda_j_style.MainKt$$ExternalSyntheticLambda5",
-                                    "class_inliner_lambda_j_style.MainKt$$ExternalSyntheticLambda6")
-                                .assertNoOtherClassesMerged();
-                          } else {
-                            inspector
-                                .assertIsCompleteMergeGroup(
-                                    "class_inliner_lambda_j_style.MainKt$testStateless$1",
-                                    "class_inliner_lambda_j_style.MainKt$testStateless$2",
-                                    "class_inliner_lambda_j_style.MainKt$testStateless$3")
-                                .assertIsCompleteMergeGroup(
-                                    "class_inliner_lambda_j_style.MainKt$testStateful$1",
-                                    "class_inliner_lambda_j_style.MainKt$testStateful$2",
-                                    "class_inliner_lambda_j_style.MainKt$testStateful$2$1",
-                                    "class_inliner_lambda_j_style.MainKt$testStateful$3",
-                                    "class_inliner_lambda_j_style.MainKt$testStateful2$1",
-                                    "class_inliner_lambda_j_style.MainKt$testStateful3$1")
-                                .assertNoOtherClassesMerged();
+                            inspector.assertIsCompleteMergeGroup(
+                                "class_inliner_lambda_j_style.MainKt$$ExternalSyntheticLambda0",
+                                "class_inliner_lambda_j_style.MainKt$$ExternalSyntheticLambda2",
+                                "class_inliner_lambda_j_style.MainKt$$ExternalSyntheticLambda4",
+                                "class_inliner_lambda_j_style.MainKt$$ExternalSyntheticLambda3",
+                                "class_inliner_lambda_j_style.MainKt$$ExternalSyntheticLambda5",
+                                "class_inliner_lambda_j_style.MainKt$$ExternalSyntheticLambda6");
                           }
+                          inspector.assertNoOtherClassesMerged();
                         })
                     .noClassInlining())
         .inspect(
@@ -118,7 +108,7 @@
               } else {
                 assertThat(
                     inspector.clazz("class_inliner_lambda_j_style.MainKt$testStateless$1"),
-                    isPresent());
+                    isAbsent());
                 assertThat(
                     inspector.clazz("class_inliner_lambda_j_style.MainKt$testStateful$1"),
                     isPresent());
@@ -155,12 +145,16 @@
                     isAbsent());
               }
 
-              assertThat(
-                  inspector.clazz(
-                      !hasKotlinCGeneratedLambdaClasses
-                          ? "class_inliner_lambda_j_style.MainKt$$ExternalSyntheticLambda2"
-                          : "class_inliner_lambda_j_style.MainKt$testStateful$1"),
-                  onlyIf(hasKotlinCGeneratedLambdaClasses, isPresent()));
+              if (hasKotlinCGeneratedLambdaClasses) {
+                assertThat(
+                    inspector.clazz("class_inliner_lambda_j_style.MainKt$testStateful$2"),
+                    isPresent());
+              } else {
+                assertThat(
+                    inspector.clazz(
+                        "class_inliner_lambda_j_style.MainKt$$ExternalSyntheticLambda2"),
+                    isAbsent());
+              }
             });
   }
 
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaSplitByCodeCorrectnessTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaSplitByCodeCorrectnessTest.java
index c72ed7a..35fe619 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaSplitByCodeCorrectnessTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaSplitByCodeCorrectnessTest.java
@@ -38,7 +38,7 @@
   @Parameters(name = "{0}, {1}, splitGroup: {2}")
   public static List<Object[]> data() {
     return buildParameters(
-        getTestParameters().withDexRuntimes().withAllApiLevels().build(),
+        getTestParameters().withDexRuntimesAndAllApiLevels().build(),
         getKotlinTestParameters().withAllCompilersAndTargetVersions().build(),
         BooleanUtils.values());
   }
@@ -77,7 +77,10 @@
             inspector ->
                 inspector
                     .applyIf(
-                        !kotlinc.is(KotlinCompilerVersion.KOTLINC_1_7_0) || splitGroup,
+                        kotlinc.isOneOf(
+                                KotlinCompilerVersion.KOTLINC_1_8_0,
+                                KotlinCompilerVersion.KOTLINC_1_9_21)
+                            || splitGroup,
                         i ->
                             i.assertIsCompleteMergeGroup(
                                 "com.android.tools.r8.kotlin.lambda.b159688129.SimpleKt$main$1",
@@ -97,18 +100,27 @@
                       "com.android.tools.r8.kotlin.lambda.b159688129.SimpleKt$main$1");
               assertThat(
                   mergeTarget,
-                  isPresentIf(!kotlinc.is(KotlinCompilerVersion.KOTLINC_1_7_0) || splitGroup));
+                  isPresentIf(
+                      kotlinc.isOneOf(
+                              KotlinCompilerVersion.KOTLINC_1_8_0,
+                              KotlinCompilerVersion.KOTLINC_1_9_21)
+                          || splitGroup));
 
               if (mergeTarget.isAbsent()) {
                 return;
               }
 
+              boolean isKotlinOld =
+                  kotlinc.isOneOf(
+                      KotlinCompilerVersion.KOTLINC_1_3_72, KotlinCompilerVersion.KOTLINC_1_4_20);
               MethodSubject virtualMethodSubject =
                   mergeTarget.uniqueMethodThatMatches(
                       method ->
                           method.isVirtual()
                               && !method.isSynthetic()
-                              && method.getOriginalName(false).equals("invoke"));
+                              && method
+                                  .getOriginalName(false)
+                                  .equals(isKotlinOld ? "invoke$1" : "invoke"));
               assertThat(virtualMethodSubject, isPresent());
 
               int found = 0;
