diff --git a/test/model_test.dart b/test/model_test.dart
index ff7ea0f..8982039 100644
--- a/test/model_test.dart
+++ b/test/model_test.dart
@@ -53,6 +53,7 @@
   PackageGraph packageGraph;
   PackageGraph packageGraphSmall;
   PackageGraph packageGraphErrors;
+  PackageGraph packageGraphExperiments;
   PackageGraph ginormousPackageGraph;
   Library exLibrary;
   Library fakeLibrary;
@@ -67,6 +68,7 @@
     packageGraph = utils.testPackageGraph;
     packageGraphSmall = utils.testPackageGraphSmall;
     packageGraphErrors = utils.testPackageGraphErrors;
+    packageGraphExperiments = utils.testPackageGraphExperiments;
     ginormousPackageGraph = utils.testPackageGraphGinormous;
     exLibrary = packageGraph.libraries.firstWhere((lib) => lib.name == 'ex');
     errorLibrary = packageGraphErrors.libraries
@@ -82,6 +84,40 @@
     sdkAsPackageGraph = utils.testPackageGraphSdk;
   });
 
+  // Experimental features not yet enabled by default.  Move tests out of this block
+  // when the feature is enabled by default.
+  group('Experiments', () {
+    Library main;
+    TopLevelVariable aComplexSet, inferredTypeSet, specifiedSet, untypedMap, typedSet;
+
+    setUpAll(() {
+      main = packageGraphExperiments.libraries.firstWhere((lib) => lib.name == 'main');
+      aComplexSet = main.constants.firstWhere((v) => v.name == 'aComplexSet');
+      inferredTypeSet = main.constants.firstWhere((v) => v.name == 'inferredTypeSet');
+      specifiedSet = main.constants.firstWhere((v) => v.name == 'specifiedSet');
+      untypedMap = main.constants.firstWhere((v) => v.name == 'untypedMap');
+      typedSet = main.constants.firstWhere((v) => v.name == 'typedSet');
+    });
+
+    test('Set literals test', () {
+      expect(aComplexSet.modelType.name, equals('Set'));
+      expect(aComplexSet.modelType.typeArguments.map((a) => a.name).toList(), equals(['AClassContainingLiterals']));
+      expect(aComplexSet.constantValue, equals('const {const AClassContainingLiterals(3, 5)}'));
+      expect(inferredTypeSet.modelType.name, equals('Set'));
+      expect(inferredTypeSet.modelType.typeArguments.map((a) => a.name).toList(), equals(['num']));
+      expect(inferredTypeSet.constantValue, equals('const {1, 2.5, 3}'));
+      expect(specifiedSet.modelType.name, equals('Set'));
+      expect(specifiedSet.modelType.typeArguments.map((a) => a.name).toList(), equals(['int']));
+      expect(specifiedSet.constantValue, equals('const {}'));
+      expect(untypedMap.modelType.name, equals('Map'));
+      expect(untypedMap.modelType.typeArguments.map((a) => a.name).toList(), equals(['dynamic', 'dynamic']));
+      expect(untypedMap.constantValue, equals('const {}'));
+      expect(typedSet.modelType.name, equals('Set'));
+      expect(typedSet.modelType.typeArguments.map((a) => a.name).toList(), equals(['String']));
+      expect(typedSet.constantValue, equals('const &lt;String&gt; {}'));
+    });
+  });
+
   group('Tools', () {
     Class toolUser;
     Class _NonCanonicalToolUser, CanonicalToolUser, PrivateLibraryToolUser;
diff --git a/test/src/utils.dart b/test/src/utils.dart
index acfcad0..ff6f728 100644
--- a/test/src/utils.dart
+++ b/test/src/utils.dart
@@ -21,6 +21,7 @@
 Directory sdkDir;
 PackageMeta sdkPackageMeta;
 PackageGraph testPackageGraph;
+PackageGraph testPackageGraphExperiments;
 PackageGraph testPackageGraphGinormous;
 PackageGraph testPackageGraphSmall;
 PackageGraph testPackageGraphErrors;
@@ -28,6 +29,7 @@
 
 final Directory testPackageBadDir = new Directory('testing/test_package_bad');
 final Directory testPackageDir = new Directory('testing/test_package');
+final Directory testPackageExperimentsDir = new Directory('testing/test_package_experiments');
 final Directory testPackageMinimumDir =
     new Directory('testing/test_package_minimum');
 final Directory testPackageWithEmbedderYaml =
@@ -78,6 +80,11 @@
       additionalArguments:
           additionalArguments + ['--auto-include-dependencies']);
 
+  testPackageGraphExperiments = await bootBasicPackage(
+      'testing/test_package_experiments', [],
+      additionalArguments: additionalArguments + ['--enable-experiment', 'set-literals']
+  );
+
   testPackageGraphSmall = await bootBasicPackage(
       'testing/test_package_small', [],
       additionalArguments: additionalArguments);
diff --git a/testing/test_package_experiments/lib/main.dart b/testing/test_package_experiments/lib/main.dart
new file mode 100644
index 0000000..23c65c0
--- /dev/null
+++ b/testing/test_package_experiments/lib/main.dart
@@ -0,0 +1,16 @@
+const inferredTypeSet = {1, 2.5, 3};
+const Set<int> specifiedSet = const {};
+const untypedMap = {};
+const typedSet = <String>{};
+
+class AClassContainingLiterals {
+  final int value1;
+  final int value2;
+
+  const AClassContainingLiterals(this.value1, this.value2);
+
+  @override
+  bool operator==(Object other) => other is AClassContainingLiterals && value1 == other.value1;
+}
+
+const aComplexSet = {AClassContainingLiterals(3, 5)};
\ No newline at end of file
diff --git a/testing/test_package_experiments/pubspec.yaml b/testing/test_package_experiments/pubspec.yaml
new file mode 100644
index 0000000..35afe7f
--- /dev/null
+++ b/testing/test_package_experiments/pubspec.yaml
@@ -0,0 +1,3 @@
+name: test_package_experiments
+version: 0.0.1
+description: Experimental flags are tested here.
diff --git a/tool/grind.dart b/tool/grind.dart
index a5cfdd4..64ef21b 100644
--- a/tool/grind.dart
+++ b/tool/grind.dart
@@ -801,7 +801,6 @@
 Future<void> checkBuild() async {
   var originalFileContents = new Map<String, String>();
   var differentFiles = <String>[];
-  var launcher = new SubprocessLauncher('check-build');
 
   // Load original file contents into memory before running the builder;
   // it modifies them in place.
