diff --git a/src/test/java/com/android/tools/r8/R8RunExamplesTest.java b/src/test/java/com/android/tools/r8/R8RunExamplesTest.java
index c2a1ba2..e2b1b04 100644
--- a/src/test/java/com/android/tools/r8/R8RunExamplesTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunExamplesTest.java
@@ -26,9 +26,6 @@
   public static Collection<String[]> data() {
     String[] tests = {
         "arithmetic.Arithmetic",
-        "constants.Constants",
-        "controlflow.ControlFlow",
-        "conversions.Conversions",
         "floating_point_annotations.FloatingPointValuedAnnotationTest",
         "filledarray.FilledArray",
         "hello.Hello",
diff --git a/src/test/java/com/android/tools/r8/debug/ExamplesDebugTest.java b/src/test/java/com/android/tools/r8/debug/ExamplesDebugTest.java
index 563fc09..3e716f0 100644
--- a/src/test/java/com/android/tools/r8/debug/ExamplesDebugTest.java
+++ b/src/test/java/com/android/tools/r8/debug/ExamplesDebugTest.java
@@ -60,21 +60,6 @@
   }
 
   @Test
-  public void testConstants() throws Exception {
-    testDebugging("constants", "Constants");
-  }
-
-  @Test
-  public void testControlFlow() throws Exception {
-    testDebugging("controlflow", "ControlFlow");
-  }
-
-  @Test
-  public void testConversions() throws Exception {
-    testDebugging("conversions", "Conversions");
-  }
-
-  @Test
   public void testFloatingPointValuedAnnotation() throws Exception {
     testDebugging("floating_point_annotations", "FloatingPointValuedAnnotationTest");
   }
diff --git a/src/test/examples/constants/Constants.java b/src/test/java/com/android/tools/r8/examples/constants/Constants.java
similarity index 97%
rename from src/test/examples/constants/Constants.java
rename to src/test/java/com/android/tools/r8/examples/constants/Constants.java
index 6349749..83aed19 100644
--- a/src/test/examples/constants/Constants.java
+++ b/src/test/java/com/android/tools/r8/examples/constants/Constants.java
@@ -4,7 +4,7 @@
 
 // This code is not run directly. It needs to be compiled to dex code.
 // 'constants.dex' is what is run.
-package constants;
+package com.android.tools.r8.examples.constants;
 
 class Constants {
 
diff --git a/src/test/java/com/android/tools/r8/examples/constants/ConstantsTestRunner.java b/src/test/java/com/android/tools/r8/examples/constants/ConstantsTestRunner.java
new file mode 100644
index 0000000..40432f5
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/examples/constants/ConstantsTestRunner.java
@@ -0,0 +1,56 @@
+// Copyright (c) 2023, 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.examples.constants;
+
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.examples.ExamplesTestBase;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+@RunWith(Parameterized.class)
+public class ConstantsTestRunner extends ExamplesTestBase {
+
+  @Parameterized.Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withAllRuntimesAndApiLevels().enableApiLevelsForCf().build();
+  }
+
+  public ConstantsTestRunner(TestParameters parameters) {
+    super(parameters);
+  }
+
+  @Override
+  public Class<?> getMainClass() {
+    return Constants.class;
+  }
+
+  @Override
+  public String getExpected() {
+    return "-8-1017-32768-9832767-65536-26843545625165824015728640983040-214748364865536-3276932768"
+        + "-65535-26843545525165824115728641983041-214748364765537-32768-10132767-32769"
+        + "-2147483648214748364732768-281474976710656"
+        + "-11529215046068469761080863910568919040675539944105574404222124650659840"
+        + "-92233720368547758082814749767106569223090561878065152-21474836492147483648"
+        + "-140737488355329-281474976710655"
+        + "-11529215046068469751080863910568919041675539944105574414222124650659841"
+        + "-922337203685477580728147497671065792233720368547758079223090561878065153";
+  }
+
+  @Test
+  public void testDesugaring() throws Exception {
+    runTestDesugaring();
+  }
+
+  @Test
+  public void testR8() throws Exception {
+    runTestR8();
+  }
+
+  @Test
+  public void testDebug() throws Exception {
+    runTestDebugComparator();
+  }
+}
diff --git a/src/test/examples/controlflow/ControlFlow.java b/src/test/java/com/android/tools/r8/examples/controlflow/ControlFlow.java
similarity index 97%
rename from src/test/examples/controlflow/ControlFlow.java
rename to src/test/java/com/android/tools/r8/examples/controlflow/ControlFlow.java
index ffdabe0..5296c77 100644
--- a/src/test/examples/controlflow/ControlFlow.java
+++ b/src/test/java/com/android/tools/r8/examples/controlflow/ControlFlow.java
@@ -5,7 +5,7 @@
 // This code is not run directly. It needs to be compiled to dex code.
 // 'controlflow.dex' is what is run.
 
-package controlflow;
+package com.android.tools.r8.examples.controlflow;
 
 public class ControlFlow {
 
diff --git a/src/test/java/com/android/tools/r8/examples/controlflow/ControlFlowTestRunner.java b/src/test/java/com/android/tools/r8/examples/controlflow/ControlFlowTestRunner.java
new file mode 100644
index 0000000..770ec02
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/examples/controlflow/ControlFlowTestRunner.java
@@ -0,0 +1,82 @@
+// Copyright (c) 2023, 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.examples.controlflow;
+
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.examples.ExamplesTestBase;
+import com.android.tools.r8.utils.StringUtils;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+@RunWith(Parameterized.class)
+public class ControlFlowTestRunner extends ExamplesTestBase {
+
+  @Parameterized.Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withAllRuntimesAndApiLevels().enableApiLevelsForCf().build();
+  }
+
+  public ControlFlowTestRunner(TestParameters parameters) {
+    super(parameters);
+  }
+
+  @Override
+  public Class<?> getMainClass() {
+    return ControlFlow.class;
+  }
+
+  @Override
+  public String getExpected() {
+    return StringUtils.lines(
+        "Fisk",
+        "Hest",
+        "Fisk 1 1.1 true",
+        "Hest 2 2.2 false",
+        "Fisk",
+        "Hep!",
+        "10",
+        "10",
+        "5",
+        "10",
+        "5",
+        "2",
+        "10",
+        "10",
+        "5",
+        "10",
+        "5",
+        "2",
+        "simpleLoop",
+        "simpleLoop",
+        "count: 0",
+        "simpleLoop",
+        "count: 0",
+        "count: 1",
+        "count: 2",
+        "count: 3",
+        "count: 4",
+        "count: 5",
+        "count: 6",
+        "count: 7",
+        "count: 8",
+        "count: 9");
+  }
+
+  @Test
+  public void testDesugaring() throws Exception {
+    runTestDesugaring();
+  }
+
+  @Test
+  public void testR8() throws Exception {
+    runTestR8();
+  }
+
+  @Test
+  public void testDebug() throws Exception {
+    runTestDebugComparator();
+  }
+}
diff --git a/src/test/examples/conversions/Conversions.java b/src/test/java/com/android/tools/r8/examples/conversions/Conversions.java
similarity index 96%
rename from src/test/examples/conversions/Conversions.java
rename to src/test/java/com/android/tools/r8/examples/conversions/Conversions.java
index 456972d..28f3c55 100644
--- a/src/test/examples/conversions/Conversions.java
+++ b/src/test/java/com/android/tools/r8/examples/conversions/Conversions.java
@@ -1,7 +1,7 @@
 // Copyright (c) 2016, 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 conversions;
+package com.android.tools.r8.examples.conversions;
 
 public class Conversions {
 
diff --git a/src/test/java/com/android/tools/r8/examples/conversions/ConversionsTestRunner.java b/src/test/java/com/android/tools/r8/examples/conversions/ConversionsTestRunner.java
new file mode 100644
index 0000000..15ccd76
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/examples/conversions/ConversionsTestRunner.java
@@ -0,0 +1,51 @@
+// Copyright (c) 2023, 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.examples.conversions;
+
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.examples.ExamplesTestBase;
+import com.android.tools.r8.utils.StringUtils;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+@RunWith(Parameterized.class)
+public class ConversionsTestRunner extends ExamplesTestBase {
+
+  @Parameterized.Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withAllRuntimesAndApiLevels().enableApiLevelsForCf().build();
+  }
+
+  public ConversionsTestRunner(TestParameters parameters) {
+    super(parameters);
+  }
+
+  @Override
+  public Class<?> getMainClass() {
+    return Conversions.class;
+  }
+
+  @Override
+  public String getExpected() {
+    return StringUtils.lines(
+        "1", "1.0", "1.0", "1", "1.0", "1.0", "1", "1", "1.0", "1", "1", "1.0", "1", "\u0001", "1");
+  }
+
+  @Test
+  public void testDesugaring() throws Exception {
+    runTestDesugaring();
+  }
+
+  @Test
+  public void testR8() throws Exception {
+    runTestR8();
+  }
+
+  @Test
+  public void testDebug() throws Exception {
+    runTestDebugComparator();
+  }
+}
