Mercurial > hg > graal-jvmci-8
changeset 16967:c5db657d93c1
Truffle-DSL: added test for source sections in @CreateCast methods.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Wed, 27 Aug 2014 11:35:59 +0200 |
parents | e92bc7d8e2dd |
children | cbe585ebce98 |
files | graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SourceSectionTest.java graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TestHelper.java graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TypeSystemTest.java |
diffstat | 3 files changed, 50 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SourceSectionTest.java Wed Aug 27 09:14:19 2014 +0200 +++ b/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SourceSectionTest.java Wed Aug 27 11:35:59 2014 +0200 @@ -26,12 +26,16 @@ import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; +import org.junit.*; import org.junit.experimental.theories.*; import org.junit.runner.*; import com.oracle.truffle.api.dsl.*; import com.oracle.truffle.api.dsl.test.SourceSectionTestFactory.SourceSection0Factory; -import com.oracle.truffle.api.dsl.test.TypeSystemTest.*; +import com.oracle.truffle.api.dsl.test.SourceSectionTestFactory.SourceSection1Factory; +import com.oracle.truffle.api.dsl.test.TypeSystemTest.ArgumentNode; +import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode; +import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode; import com.oracle.truffle.api.nodes.*; import com.oracle.truffle.api.source.*; @@ -54,7 +58,7 @@ expectSourceSection(root.getNode(), section); } - private void expectSourceSection(Node root, SourceSection section) { + private static void expectSourceSection(Node root, SourceSection section) { assertThat(root.getSourceSection(), is(sameInstance(section))); for (Node child : root.getChildren()) { if (child instanceof ArgumentNode) { @@ -101,4 +105,33 @@ return a; // the generic answer to all questions } } + + @Test + public void testCreateCast() { + SourceSection section = new NullSourceSection("a", "b"); + TestRootNode<SourceSection1> root = createRootPrefix(SourceSection1Factory.getInstance(), true, section); + expectSourceSection(root.getNode(), section); + assertThat((int) executeWith(root, 1), is(1)); + expectSourceSection(root.getNode(), section); + } + + @NodeChild("a") + static class SourceSection1 extends ValueNode { + + public SourceSection1(SourceSection section) { + super(section); + } + + @CreateCast("a") + public ValueNode cast(ValueNode node) { + assert getSourceSection() != null; + return node; + } + + @Specialization + int do0(int a) { + return a; + } + + } }
--- a/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TestHelper.java Wed Aug 27 09:14:19 2014 +0200 +++ b/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TestHelper.java Wed Aug 27 11:35:59 2014 +0200 @@ -24,7 +24,6 @@ import static org.junit.Assert.*; -import java.lang.reflect.*; import java.util.*; import com.oracle.truffle.api.*; @@ -47,41 +46,32 @@ return nodes; } - static <E extends ValueNode> E createNode(NodeFactory<E> factory, Object... constants) { + static <E extends ValueNode> E createNode(NodeFactory<E> factory, boolean prefixConstants, Object... constants) { ArgumentNode[] argumentNodes = arguments(factory.getExecutionSignature().size()); List<Object> argumentList = new ArrayList<>(); + if (prefixConstants) { + argumentList.addAll(Arrays.asList(constants)); + } if (ChildrenNode.class.isAssignableFrom(factory.getNodeClass())) { argumentList.add(argumentNodes); } else { argumentList.addAll(Arrays.asList(argumentNodes)); } - argumentList.addAll(Arrays.asList(constants)); + if (!prefixConstants) { + argumentList.addAll(Arrays.asList(constants)); + } return factory.createNode(argumentList.toArray(new Object[argumentList.size()])); } - static <E extends ValueNode> E createGenericNode(NodeFactory<E> factory, Object... constants) { - Method createGenericMethod; - try { - createGenericMethod = factory.getClass().getMethod("createGeneric", factory.getNodeClass()); - } catch (NoSuchMethodException e) { - throw new RuntimeException(e); - } - try { - return factory.getNodeClass().cast(createGenericMethod.invoke(null, createNode(factory, constants))); - } catch (IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException(e); - } - } - static <E extends ValueNode> TestRootNode<E> createRoot(NodeFactory<E> factory, Object... constants) { - TestRootNode<E> rootNode = new TestRootNode<>(createNode(factory, constants)); + TestRootNode<E> rootNode = new TestRootNode<>(createNode(factory, false, constants)); rootNode.adoptChildren(); return rootNode; } - static <E extends ValueNode> TestRootNode<E> createGenericRoot(NodeFactory<E> factory, Object... constants) { - TestRootNode<E> rootNode = new TestRootNode<>(createGenericNode(factory, constants)); + static <E extends ValueNode> TestRootNode<E> createRootPrefix(NodeFactory<E> factory, boolean prefixConstants, Object... constants) { + TestRootNode<E> rootNode = new TestRootNode<>(createNode(factory, prefixConstants, constants)); rootNode.adoptChildren(); return rootNode; }
--- a/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TypeSystemTest.java Wed Aug 27 09:14:19 2014 +0200 +++ b/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TypeSystemTest.java Wed Aug 27 11:35:59 2014 +0200 @@ -28,6 +28,7 @@ import com.oracle.truffle.api.dsl.*; import com.oracle.truffle.api.frame.*; import com.oracle.truffle.api.nodes.*; +import com.oracle.truffle.api.source.*; public class TypeSystemTest { @@ -69,6 +70,10 @@ super(null); } + public ValueNode(SourceSection sourceSection) { + super(sourceSection); + } + public int executeInt(VirtualFrame frame) throws UnexpectedResultException { return SimpleTypesGen.SIMPLETYPES.expectInteger(execute(frame)); }