diff options
author | 2015-11-19 02:16:24 +0000 | |
---|---|---|
committer | 2015-11-19 10:04:36 +0000 | |
commit | 26b3d8532cda8e38244b33222935e5c478d25ad0 (patch) | |
tree | 85becd59cc73bbcff56365a59fb41bfaf24c1b3c /src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java | |
parent | 3ac42bf4a979c96e73fd79fb8f5416ae7d7621eb (diff) |
Allow SkyValues to be marked not "comparable". Such values are not compared for the purpose of change pruning.
--
MOS_MIGRATED_REVID=108203369
Diffstat (limited to 'src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java')
-rw-r--r-- | src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java | 59 |
1 files changed, 59 insertions, 0 deletions
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 fdae6b25c0..a24e93cff1 100644 --- a/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java +++ b/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java @@ -45,12 +45,14 @@ import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.events.EventKind; import com.google.devtools.build.lib.testutil.TestThread; import com.google.devtools.build.lib.testutil.TestUtils; +import com.google.devtools.build.skyframe.GraphTester.NotComparableStringValue; import com.google.devtools.build.skyframe.GraphTester.StringValue; import com.google.devtools.build.skyframe.GraphTester.TestFunction; import com.google.devtools.build.skyframe.GraphTester.ValueComputer; import com.google.devtools.build.skyframe.NotifyingInMemoryGraph.EventType; import com.google.devtools.build.skyframe.NotifyingInMemoryGraph.Listener; import com.google.devtools.build.skyframe.NotifyingInMemoryGraph.Order; +import com.google.devtools.build.skyframe.SkyFunction.Environment; import com.google.devtools.build.skyframe.SkyFunctionException.Transience; import org.junit.After; @@ -3113,6 +3115,63 @@ public class MemoizingEvaluatorTest { } @Test + public void notComparableNotPrunedNoEvent() throws Exception { + checkNotComparableNotPruned(false); + } + + @Test + public void notComparableNotPrunedEvent() throws Exception { + checkNotComparableNotPruned(true); + } + + private void checkNotComparableNotPruned(boolean hasEvent) throws Exception { + initializeTester(); + SkyKey parent = GraphTester.toSkyKey("parent"); + SkyKey child = GraphTester.toSkyKey("child"); + NotComparableStringValue notComparableString = new NotComparableStringValue("not comparable"); + if (hasEvent) { + tester.getOrCreate(child).setConstantValue(notComparableString).setWarning("shmoop"); + } else { + tester.getOrCreate(child).setConstantValue(notComparableString); + } + final AtomicInteger parentEvaluated = new AtomicInteger(); + final String val = "some val"; + tester + .getOrCreate(parent) + .addDependency(child) + .setComputedValue(new ValueComputer() { + @Override + public SkyValue compute(Map<SkyKey, SkyValue> deps, Environment env) + throws InterruptedException { + parentEvaluated.incrementAndGet(); + return new StringValue(val); + } + }); + assertStringValue(val, tester.evalAndGet( /*keepGoing=*/false, parent)); + assertThat(parentEvaluated.get()).isEqualTo(1); + if (hasEvent) { + assertContainsEvent(eventCollector, "shmoop"); + } else { + assertEventCount(0, eventCollector); + } + + tester.resetPlayedEvents(); + tester.getOrCreate(child, /*markAsModified=*/true); + tester.invalidate(); + assertStringValue(val, tester.evalAndGet( /*keepGoing=*/false, parent)); + assertThat(parentEvaluated.get()).isEqualTo(2); + if (hasEvent) { + assertContainsEvent(eventCollector, "shmoop"); + } else { + assertEventCount(0, eventCollector); + } + } + + private static void assertStringValue(String expected, SkyValue val) { + assertThat(((StringValue) val).getValue()).isEqualTo(expected); + } + + @Test public void changePruningWithEvent() throws Exception { initializeTester(); SkyKey parent = GraphTester.toSkyKey("parent"); |