diff --git a/src/test/apiUsageSample/com/android/tools/apiusagesample/D8ApiUsageSample.java b/src/test/apiUsageSample/com/android/tools/apiusagesample/D8ApiUsageSample.java
index 41b328c..642a4ab 100644
--- a/src/test/apiUsageSample/com/android/tools/apiusagesample/D8ApiUsageSample.java
+++ b/src/test/apiUsageSample/com/android/tools/apiusagesample/D8ApiUsageSample.java
@@ -4,6 +4,7 @@
 package com.android.tools.apiusagesample;
 
 import com.android.tools.r8.ArchiveProgramResourceProvider;
+import com.android.tools.r8.AssertionsConfiguration;
 import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.D8;
@@ -105,6 +106,7 @@
     useLibraryAndClasspathProvider(minApiLevel, libraries, classpath, inputs);
     useMainDexListFiles(minApiLevel, libraries, classpath, inputs, mainDexList);
     useMainDexClasses(minApiLevel, libraries, classpath, inputs, mainDexList);
+    useAssertionConfig(minApiLevel, libraries, classpath, inputs);
     useVArgVariants(minApiLevel, libraries, classpath, inputs, mainDexList);
     incrementalCompileAndMerge(minApiLevel, libraries, classpath, inputs);
   }
@@ -281,6 +283,54 @@
     }
   }
 
+  private static void useAssertionConfig(
+      int minApiLevel,
+      Collection<Path> libraries,
+      Collection<Path> classpath,
+      Collection<Path> inputs) {
+    try {
+      D8.run(
+          D8Command.builder(handler)
+              .setMinApiLevel(minApiLevel)
+              .setProgramConsumer(new EnsureOutputConsumer())
+              .addLibraryFiles(libraries)
+              .addClasspathFiles(classpath)
+              .addProgramFiles(inputs)
+              .addAssertionsConfiguration(b -> b.setScopeAll().setEnable().build())
+              .addAssertionsConfiguration(b -> b.setScopeAll().setDisable().build())
+              .addAssertionsConfiguration(
+                  b -> b.setScopePackage("com.android.tools.apiusagesample").setEnable().build())
+              .addAssertionsConfiguration(
+                  b ->
+                      b.setScopePackage("com.android.tools.apiusagesample")
+                          .setPassthrough()
+                          .build())
+              .addAssertionsConfiguration(
+                  b -> b.setScopePackage("com.android.tools.apiusagesample").setDisable().build())
+              .addAssertionsConfiguration(
+                  b ->
+                      b.setScopeClass("com.android.tools.apiusagesample.D8ApiUsageSample")
+                          .setEnable()
+                          .build())
+              .addAssertionsConfiguration(
+                  b ->
+                      b.setScopeClass("com.android.tools.apiusagesample.D8ApiUsageSample")
+                          .setPassthrough()
+                          .build())
+              .addAssertionsConfiguration(
+                  b ->
+                      b.setScopeClass("com.android.tools.apiusagesample.D8ApiUsageSample")
+                          .setDisable()
+                          .build())
+              .addAssertionsConfiguration(AssertionsConfiguration.Builder::enableAllAssertions)
+              .addAssertionsConfiguration(AssertionsConfiguration.Builder::passthroughAllAssertions)
+              .addAssertionsConfiguration(AssertionsConfiguration.Builder::disableAllAssertions)
+              .build());
+    } catch (CompilationFailedException e) {
+      throw new RuntimeException("Unexpected compilation exceptions", e);
+    }
+  }
+
   // Check API support for all the varg variants.
   private static void useVArgVariants(
       int minApiLevel,
diff --git a/src/test/apiUsageSample/com/android/tools/apiusagesample/R8ApiUsageSample.java b/src/test/apiUsageSample/com/android/tools/apiusagesample/R8ApiUsageSample.java
index 7203f39..8f57473 100644
--- a/src/test/apiUsageSample/com/android/tools/apiusagesample/R8ApiUsageSample.java
+++ b/src/test/apiUsageSample/com/android/tools/apiusagesample/R8ApiUsageSample.java
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.ArchiveClassFileProvider;
 import com.android.tools.r8.ArchiveProgramResourceProvider;
+import com.android.tools.r8.AssertionsConfiguration;
 import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.DexIndexedConsumer;
@@ -117,6 +118,7 @@
     useMainDexRules(minApiLevel, libraries, inputs, mainDexRules);
     useProguardConfigFiles(minApiLevel, libraries, inputs, mainDexList, pgConf);
     useProguardConfigLines(minApiLevel, libraries, inputs, mainDexList, pgConf);
+    useAssertionConfig(minApiLevel, libraries, inputs);
     useVArgVariants(minApiLevel, libraries, inputs, mainDexList, mainDexRules, pgConf);
     useProguardConfigConsumers(minApiLevel, libraries, inputs, pgConf);
   }
@@ -402,6 +404,50 @@
     }
   }
 
+  private static void useAssertionConfig(
+      int minApiLevel, Collection<Path> libraries, Collection<Path> inputs) {
+    try {
+      R8.run(
+          R8Command.builder(handler)
+              .setMinApiLevel(minApiLevel)
+              .setProgramConsumer(new R8ApiUsageSample.EnsureOutputConsumer())
+              .addLibraryFiles(libraries)
+              .addProgramFiles(inputs)
+              .addAssertionsConfiguration(b -> b.setScopeAll().setEnable().build())
+              .addAssertionsConfiguration(b -> b.setScopeAll().setDisable().build())
+              .addAssertionsConfiguration(
+                  b -> b.setScopePackage("com.android.tools.apiusagesample").setEnable().build())
+              .addAssertionsConfiguration(
+                  b ->
+                      b.setScopePackage("com.android.tools.apiusagesample")
+                          .setPassthrough()
+                          .build())
+              .addAssertionsConfiguration(
+                  b -> b.setScopePackage("com.android.tools.apiusagesample").setDisable().build())
+              .addAssertionsConfiguration(
+                  b ->
+                      b.setScopeClass("com.android.tools.apiusagesample.D8ApiUsageSample")
+                          .setEnable()
+                          .build())
+              .addAssertionsConfiguration(
+                  b ->
+                      b.setScopeClass("com.android.tools.apiusagesample.D8ApiUsageSample")
+                          .setPassthrough()
+                          .build())
+              .addAssertionsConfiguration(
+                  b ->
+                      b.setScopeClass("com.android.tools.apiusagesample.D8ApiUsageSample")
+                          .setDisable()
+                          .build())
+              .addAssertionsConfiguration(AssertionsConfiguration.Builder::enableAllAssertions)
+              .addAssertionsConfiguration(AssertionsConfiguration.Builder::passthroughAllAssertions)
+              .addAssertionsConfiguration(AssertionsConfiguration.Builder::disableAllAssertions)
+              .build());
+    } catch (CompilationFailedException e) {
+      throw new RuntimeException("Unexpected compilation exceptions", e);
+    }
+  }
+
   // Check API support for all the varg variants.
   private static void useVArgVariants(
       int minApiLevel,
diff --git a/tests/d8_api_usage_sample.jar b/tests/d8_api_usage_sample.jar
index e47a3ad..da01fdb 100644
--- a/tests/d8_api_usage_sample.jar
+++ b/tests/d8_api_usage_sample.jar
Binary files differ
diff --git a/tests/r8_api_usage_sample.jar b/tests/r8_api_usage_sample.jar
index 4970fe1..da01fdb 100644
--- a/tests/r8_api_usage_sample.jar
+++ b/tests/r8_api_usage_sample.jar
Binary files differ
