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));
         }