diff --git a/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java b/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java
index c75af92..7d7cebe 100644
--- a/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java
+++ b/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java
@@ -264,6 +264,18 @@
   }
 
   @Test
+  public void deleteDirtyCleanedValue() throws Exception {
+    SkyKey leafKey = GraphTester.skyKey("leafKey");
+    tester.getOrCreate(leafKey).setConstantValue(new StringValue("value"));
+    SkyKey topKey = GraphTester.skyKey("topKey");
+    tester.getOrCreate(topKey).addDependency(leafKey).setComputedValue(CONCATENATE);
+
+    assertThat(tester.evalAndGet(/*keepGoing=*/false, topKey)).isEqualTo(new StringValue("value"));
+    failBuildAndRemoveValue(leafKey);
+    tester.evaluator.deleteDirty(0);
+  }
+
+  @Test
   public void deleteNonexistentValues() throws Exception {
     tester.getOrCreate("d1").setConstantValue(new StringValue("1"));
     tester.delete("d1");
@@ -1466,7 +1478,8 @@
         new DeterministicInMemoryGraph(
             new Listener() {
               @Override
-              public void accept(SkyKey key, EventType type, Order order, Object context) {
+              public void accept(
+                  SkyKey key, EventType type, Order order, @Nullable Object context) {
                 if (!delayTopSignaling.get()) {
                   return;
                 }
@@ -1478,7 +1491,7 @@
                 }
                 if (key.equals(slowAddingDep)
                     && type == EventType.ADD_REVERSE_DEP
-                    && context.equals(top)
+                    && top.equals(context)
                     && order == Order.BEFORE) {
                   // If top is trying to declare a dep on slowAddingDep, wait until firstKey has
                   // signaled top. Then this add dep will return DONE and top will be signaled,
@@ -1564,6 +1577,25 @@
     dirtyChildEnqueuesParentDuringCheckDependencies(/*throwError=*/false);
   }
 
+  @Test
+  public void dirtyThenDeleted() throws Exception {
+    initializeTester();
+    SkyKey topKey = GraphTester.skyKey("top");
+    SkyKey leafKey = GraphTester.skyKey("leaf");
+    tester.getOrCreate(topKey).addDependency(leafKey).setComputedValue(CONCATENATE);
+    tester.set(leafKey, new StringValue("leafy"));
+    assertThat(tester.evalAndGet(/*keepGoing=*/false, topKey)).isEqualTo(new StringValue("leafy"));
+    tester.getOrCreate(topKey, /*markAsModified=*/true);
+    tester.invalidate();
+    assertThat(tester.evalAndGet(/*keepGoing=*/false, leafKey))
+        .isEqualTo(new StringValue("leafy"));
+    tester.delete("top");
+    tester.getOrCreate(leafKey, /*markAsModified=*/true);
+    tester.invalidate();
+    assertThat(tester.evalAndGet(/*keepGoing=*/false, leafKey))
+        .isEqualTo(new StringValue("leafy"));
+  }
+
   /**
    * The same dep is requested in two groups, but its value determines what the other dep in the
    * second group is. When it changes, the other dep in the second group should not be requested.
@@ -2456,7 +2488,7 @@
     // -> some top key builds.
     result = tester.eval(/*keepGoing=*/false, topErrorFirstKey, topBubbleKey);
     assertTrue(result.hasError());
-    assertNotNull(result.getError(topErrorFirstKey));
+    assertWithMessage(result.toString()).that(result.getError(topErrorFirstKey)).isNotNull();
   }
 
   @Test
@@ -3089,12 +3121,18 @@
                 return null;
               }
             });
-    tester.eval(/*keepGoing=*/false, cachedParentKey, uncachedParentKey, waitForShutdownKey);
+    EvaluationResult<StringValue> result =
+        tester.eval(/*keepGoing=*/false, cachedParentKey, uncachedParentKey, waitForShutdownKey);
+    assertWithMessage(result.toString()).that(result.hasError()).isTrue();
     Pair<SkyKey, ? extends Exception> unexpected = unexpectedException.get();
     if (unexpected != null) {
       throw new AssertionError(unexpected.first + ", " + unexpected.second + ", "
           + Arrays.toString(unexpected.second.getStackTrace()));
     }
+    tester.getOrCreate(invalidatedKey, /*markAsModified=*/true);
+    tester.invalidate();
+    result = tester.eval(/*keepGoing=*/false, cachedParentKey, uncachedParentKey);
+    assertWithMessage(result.toString()).that(result.hasError()).isTrue();
   }
 
   @Test
