comparison graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/LazyClassLoadingTest.java @ 18761:a665483c3881

Truffle-DSL: new node layout implementation.
author Christian Humer <christian.humer@gmail.com>
date Mon, 29 Dec 2014 23:38:54 +0100
parents dd95dff835f9
children 15fe16c45d64
comparison
equal deleted inserted replaced
18760:6fa3999631d8 18761:a665483c3881
26 26
27 import org.junit.*; 27 import org.junit.*;
28 28
29 import com.oracle.truffle.api.dsl.*; 29 import com.oracle.truffle.api.dsl.*;
30 import com.oracle.truffle.api.dsl.test.LazyClassLoadingTestFactory.TestNodeFactory; 30 import com.oracle.truffle.api.dsl.test.LazyClassLoadingTestFactory.TestNodeFactory;
31 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode; 31 import com.oracle.truffle.api.dsl.test.TypeSystemTest.*;
32 32
33 public class LazyClassLoadingTest { 33 public class LazyClassLoadingTest {
34 @Test 34 @Test
35 public void test() { 35 public void test() {
36 String testClassName = getClass().getName(); 36 String factoryName = TestNodeFactory.class.getName();
37 String factoryClassName = testClassName + "Factory"; 37 String nodeName = factoryName + "$" + TestNode.class.getSimpleName() + "Gen";
38 String nodeFactoryClassName = factoryClassName + "$TestNodeFactory"; 38 Assert.assertTrue(isLoaded(factoryName));
39 39 Assert.assertFalse(isLoaded(nodeName));
40 Assert.assertFalse(isLoaded(factoryClassName + "$TestNode"));
41 Assert.assertFalse(isLoaded(nodeFactoryClassName));
42 40
43 NodeFactory<TestNode> factory = TestNodeFactory.getInstance(); 41 NodeFactory<TestNode> factory = TestNodeFactory.getInstance();
42 Assert.assertTrue(isLoaded(factoryName));
43 Assert.assertTrue(isLoaded(nodeName));
44 44
45 Assert.assertTrue(isLoaded(nodeFactoryClassName)); 45 Assert.assertFalse(isLoaded(nodeName + "$UninitializedNode"));
46 Assert.assertFalse(isLoaded(nodeFactoryClassName + "$TestBaseNode")); 46 Assert.assertFalse(isLoaded(nodeName + "$BaseNode"));
47 Assert.assertFalse(isLoaded(nodeName + "$IntNode"));
48 Assert.assertFalse(isLoaded(nodeName + "$BooleanNode"));
49 Assert.assertFalse(isLoaded(nodeName + "$PolymorphicNode"));
47 50
48 TestHelper.createRoot(factory); 51 TestRootNode<TestNode> root = TestHelper.createRoot(factory);
49 52
50 Assert.assertTrue(isLoaded(nodeFactoryClassName + "$TestBaseNode")); 53 Assert.assertTrue(isLoaded(nodeName + "$BaseNode"));
51 Assert.assertTrue(isLoaded(nodeFactoryClassName + "$TestUninitializedNode")); 54 Assert.assertTrue(isLoaded(nodeName + "$UninitializedNode"));
52 Assert.assertFalse(isLoaded(nodeFactoryClassName + "$TestGenericNode")); 55 Assert.assertFalse(isLoaded(nodeName + "$IntNode"));
56 Assert.assertFalse(isLoaded(nodeName + "$BooleanNode"));
57 Assert.assertFalse(isLoaded(nodeName + "$PolymorphicNode"));
58
59 Assert.assertEquals(42, TestHelper.executeWith(root, 42));
60
61 Assert.assertTrue(isLoaded(nodeName + "$IntNode"));
62 Assert.assertFalse(isLoaded(nodeName + "$BooleanNode"));
63 Assert.assertFalse(isLoaded(nodeName + "$PolymorphicNode"));
64
65 Assert.assertEquals(true, TestHelper.executeWith(root, true));
66
67 Assert.assertTrue(isLoaded(nodeName + "$IntNode"));
68 Assert.assertTrue(isLoaded(nodeName + "$BooleanNode"));
69 Assert.assertTrue(isLoaded(nodeName + "$PolymorphicNode"));
53 } 70 }
54 71
55 private boolean isLoaded(String className) { 72 private boolean isLoaded(String className) {
56 ClassLoader classLoader = getClass().getClassLoader(); 73 ClassLoader classLoader = getClass().getClassLoader();
57 Method m; 74 Method m;
62 } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { 79 } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
63 throw new RuntimeException(e); 80 throw new RuntimeException(e);
64 } 81 }
65 } 82 }
66 83
67 @SuppressWarnings("unused") 84 @NodeChild("a")
68 @NodeChildren({@NodeChild("left"), @NodeChild("right")})
69 abstract static class TestNode extends ValueNode { 85 abstract static class TestNode extends ValueNode {
70 @Specialization(order = 1) 86
71 int add(int left, int right) { 87 @Specialization
72 return 42; 88 int s(int a) {
89 return a;
73 } 90 }
74 91
75 @Specialization(order = 2) 92 @Specialization
76 int add(boolean left, boolean right) { 93 boolean s(boolean a) {
77 return 21; 94 return a;
78 } 95 }
79 96
80 @Specialization(order = 4)
81 String add(boolean left, int right) {
82 return "(boolean,int)";
83 }
84 } 97 }
85 } 98 }