Mercurial > hg > graal-compiler
diff graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/UnsupportedSpecializationTest.java @ 13861:28479abd1a69
Truffle-DSL: implemented support for UnsupportedSpecializationException#getSuppliedNodes().
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Mon, 03 Feb 2014 20:59:57 +0100 |
parents | f270f09616da |
children |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/UnsupportedSpecializationTest.java Mon Feb 03 15:49:58 2014 +0100 +++ b/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/UnsupportedSpecializationTest.java Mon Feb 03 20:59:57 2014 +0100 @@ -22,18 +22,22 @@ */ package com.oracle.truffle.api.dsl.test; +import java.util.*; + import org.junit.*; import com.oracle.truffle.api.dsl.*; import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode; import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode; -import com.oracle.truffle.api.dsl.test.UnsupportedSpecializationTestFactory.Undefined1Factory; +import com.oracle.truffle.api.dsl.test.UnsupportedSpecializationTestFactory.Unsupported1Factory; +import com.oracle.truffle.api.dsl.test.UnsupportedSpecializationTestFactory.Unsupported2Factory; +import com.oracle.truffle.api.nodes.*; public class UnsupportedSpecializationTest { @Test - public void testUndefined1() { - TestRootNode<Undefined1> root = TestHelper.createRoot(Undefined1Factory.getInstance()); + public void testUnsupported1() { + TestRootNode<Unsupported1> root = TestHelper.createRoot(Unsupported1Factory.getInstance()); try { TestHelper.executeWith(root, ""); Assert.fail(); @@ -41,12 +45,13 @@ Assert.assertNotNull(e.getSuppliedValues()); Assert.assertEquals(1, e.getSuppliedValues().length); Assert.assertEquals("", e.getSuppliedValues()[0]); + Assert.assertSame(root.getNode().getChildren().iterator().next(), e.getSuppliedNodes()[0]); Assert.assertEquals(root.getNode(), e.getNode()); } } @NodeChild("a") - abstract static class Undefined1 extends ValueNode { + abstract static class Unsupported1 extends ValueNode { @Specialization public int doInteger(@SuppressWarnings("unused") int a) { @@ -54,5 +59,41 @@ } } - // TODO more tests required + @Test + public void testUnsupported2() { + TestRootNode<Unsupported2> root = TestHelper.createRoot(Unsupported2Factory.getInstance()); + try { + TestHelper.executeWith(root, "", 1); + Assert.fail(); + } catch (UnsupportedSpecializationException e) { + Assert.assertNotNull(e.getSuppliedValues()); + Assert.assertNotNull(e.getSuppliedNodes()); + Assert.assertEquals(3, e.getSuppliedValues().length); + Assert.assertEquals(3, e.getSuppliedNodes().length); + Assert.assertEquals("", e.getSuppliedValues()[0]); + Assert.assertEquals(false, e.getSuppliedValues()[1]); + Assert.assertEquals(null, e.getSuppliedValues()[2]); + List<Node> children = NodeUtil.findNodeChildren(root.getNode()); + Assert.assertSame(children.get(0), e.getSuppliedNodes()[0]); + Assert.assertNull(e.getSuppliedNodes()[1]); + Assert.assertSame(children.get(1), e.getSuppliedNodes()[2]); + Assert.assertEquals(root.getNode(), e.getNode()); + } + } + + @SuppressWarnings("unused") + @NodeChildren({@NodeChild("a"), @NodeChild("b")}) + abstract static class Unsupported2 extends ValueNode { + + @ShortCircuit("b") + public boolean needsB(Object a) { + return false; + } + + @Specialization + public int doInteger(int a, boolean hasB, int b) { + throw new AssertionError(); + } + } + }