Mercurial > hg > truffle
changeset 22409:8a4f54878160
add test that specializations are removed once invalid
author | Benoit Daloze <benoit.daloze@jku.at> |
---|---|
date | Mon, 23 Nov 2015 18:25:55 +0100 |
parents | fecae2501987 |
children | ee2f300d47be |
files | truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/AssumptionsTest.java |
diffstat | 1 files changed, 40 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/AssumptionsTest.java Sun Nov 22 19:10:51 2015 +0000 +++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/AssumptionsTest.java Mon Nov 23 18:25:55 2015 +0100 @@ -30,6 +30,7 @@ import java.util.HashMap; import java.util.Map; +import org.junit.Ignore; import org.junit.Test; import com.oracle.truffle.api.Assumption; @@ -40,6 +41,8 @@ import com.oracle.truffle.api.dsl.NodeField; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.dsl.UnsupportedSpecializationException; +import com.oracle.truffle.api.dsl.internal.SpecializationNode; +import com.oracle.truffle.api.dsl.internal.SpecializedNode; import com.oracle.truffle.api.dsl.test.AssumptionsTestFactory.AssumptionArrayTestFactory; import com.oracle.truffle.api.dsl.test.AssumptionsTestFactory.CacheAssumptionTestFactory; import com.oracle.truffle.api.dsl.test.AssumptionsTestFactory.FieldTestFactory; @@ -47,6 +50,7 @@ import com.oracle.truffle.api.dsl.test.AssumptionsTestFactory.MultipleAssumptionArraysTestFactory; import com.oracle.truffle.api.dsl.test.AssumptionsTestFactory.MultipleAssumptionsTestFactory; import com.oracle.truffle.api.dsl.test.AssumptionsTestFactory.NodeFieldTest2Factory; +import com.oracle.truffle.api.dsl.test.AssumptionsTestFactory.RemoveSpecializationTestFactory; import com.oracle.truffle.api.dsl.test.AssumptionsTestFactory.StaticFieldTestFactory; import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode; @@ -319,6 +323,42 @@ } + @Ignore + @Test + public void testAssumptionRemovesSpecializationBefore() { + // This only test if a specialization on the chain before the matching one is removed. + CallTarget root = createCallTarget(RemoveSpecializationTestFactory.getInstance()); + RemoveSpecializationTest node = getNode(root); + + assertEquals(true, root.call(true)); + SpecializationNode start0 = ((SpecializedNode) node).getSpecializationNode(); + assertEquals("ValidAssumptionNode_", start0.getClass().getSimpleName()); + + node.assumption.invalidate(); + // The specialization should be removed on the next call, even if the guard does not pass + assertEquals(false, root.call(false)); + SpecializationNode start1 = ((SpecializedNode) node).getSpecializationNode(); + assertEquals("InvalidatedNode_", start1.getClass().getSimpleName()); + } + + @NodeChild + @SuppressWarnings("unused") + static class RemoveSpecializationTest extends ValueNode { + + protected final Assumption assumption = Truffle.getRuntime().createAssumption(); + + @Specialization(guards = "value", assumptions = "assumption") + boolean validAssumption(boolean value) { + return true; + } + + @Specialization + boolean invalidated(boolean value) { + return false; + } + + } + @NodeChild static class ErrorIncompatibleReturnType extends ValueNode { @ExpectError("Incompatible return type int. Assumptions must be assignable to Assumption or Assumption[].")