aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java
diff options
context:
space:
mode:
authorGravatar Eric Fellheimer <felly@google.com>2015-11-19 02:16:24 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2015-11-19 10:04:36 +0000
commit26b3d8532cda8e38244b33222935e5c478d25ad0 (patch)
tree85becd59cc73bbcff56365a59fb41bfaf24c1b3c /src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java
parent3ac42bf4a979c96e73fd79fb8f5416ae7d7621eb (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.java59
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");