changeset 2554:9db994445118

more tests for GraalGraph, some changes and fixes
author Gilles Duboscq <gilles.duboscq@oracle.com>
date Thu, 28 Apr 2011 14:27:42 +0200
parents d9b2a8653054
children ce6b25792103
files graal/GraalGraph/src/com/oracle/graal/graph/Graph.java graal/GraalGraph/src/com/oracle/graal/graph/Node.java graal/GraalGraph/src/com/oracle/graal/graph/NullNode.java graal/GraalGraph/test/com/oracle/graal/graph/NodeTest.java
diffstat 4 files changed, 96 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/graal/GraalGraph/src/com/oracle/graal/graph/Graph.java	Wed Apr 27 22:13:30 2011 +0200
+++ b/graal/GraalGraph/src/com/oracle/graal/graph/Graph.java	Thu Apr 28 14:27:42 2011 +0200
@@ -46,7 +46,7 @@
     }
 
     public Node local(Node node) {
-        if (node.getGraph() == this) {
+        if (node.graph() == this) {
             return node;
         }
         return node.cloneNode(this);
--- a/graal/GraalGraph/src/com/oracle/graal/graph/Node.java	Wed Apr 27 22:13:30 2011 +0200
+++ b/graal/GraalGraph/src/com/oracle/graal/graph/Node.java	Thu Apr 28 14:27:42 2011 +0200
@@ -48,6 +48,12 @@
         this.successors = new NodeArray(successors);
         this.predecessors = new ArrayList<Node>();
         this.usages = new ArrayList<Node>();
+        for(Node input : inputs) {
+            input.usages.add(this);
+        }
+        for(Node successor : successors) {
+            successor.predecessors.add(this);
+        }
     }
 
     public Node(int inputs, int successors, Graph graph) {
@@ -69,7 +75,8 @@
 
         public Node set(int index, Node node) {
             if (node.graph != Node.this.graph) {
-                // fail ?
+                // fail
+                System.err.println("node.graph != Node.this.graph");
             }
             Node old = nodes[index];
             nodes[index] = node;
@@ -109,6 +116,10 @@
             System.arraycopy(nodes, 0, copy, 0, nodes.length);
             return copy;
         }
+        
+        public int size() {
+            return nodes.length;
+        }
     }
 
     public Collection<Node> getPredecessors() {
@@ -127,11 +138,11 @@
         return successors;
     }
 
-    public int getId() {
+    public int id() {
         return id;
     }
 
-    public Graph getGraph() {
+    public Graph graph() {
         return graph;
     }
 
@@ -143,7 +154,8 @@
         for (int i = 0; i < myInputs.length; i++) {
             other.inputs.set(i, myInputs[i]);
         }
-        for (Node usage : usages) {
+        while(!usages.isEmpty()) {
+            Node usage = usages.get(0);
             usage.inputs.replace(this, other);
         }
 
@@ -155,23 +167,17 @@
             predecessor.successors.replace(this, other);
         }
     }
+    
+    protected Node setInput(int index, Node in) {
+        return this.getInputs().set(index, in);
+    }
+    
+    protected Node setSuccessor(int index, Node sux) {
+        return this.getSuccessors().set(index, sux);
+    }
 
     public abstract Node cloneNode(Graph into);
 
-    @Override
-    public boolean equals(Object obj) {
-        if (obj == this) {
-            return true;
-        }
-        if (obj.getClass() == this.getClass()) {
-            Node other = (Node) obj;
-            if (other.id == this.id && other.graph == this.graph) {
-                return true;
-            }
-        }
-        return false;
-    }
-
     protected Node getInput(int index) {
         return this.inputs.nodes[index];
     }
@@ -187,4 +193,4 @@
         }
         return nodes;
     }
-}
+}
\ No newline at end of file
--- a/graal/GraalGraph/src/com/oracle/graal/graph/NullNode.java	Wed Apr 27 22:13:30 2011 +0200
+++ b/graal/GraalGraph/src/com/oracle/graal/graph/NullNode.java	Thu Apr 28 14:27:42 2011 +0200
@@ -27,6 +27,10 @@
     public NullNode(int inputs, int successors, Graph graph) {
         super(inputs, successors, graph);
     }
+    
+    public NullNode(Graph graph) {
+        super(0, 0, graph);
+    }
 
     @Override
     public NullNode cloneNode(Graph into) {
--- a/graal/GraalGraph/test/com/oracle/graal/graph/NodeTest.java	Wed Apr 27 22:13:30 2011 +0200
+++ b/graal/GraalGraph/test/com/oracle/graal/graph/NodeTest.java	Thu Apr 28 14:27:42 2011 +0200
@@ -29,13 +29,48 @@
 public class NodeTest {
 
     @Test
-    public void testReplace() {
+    public void testBasics() {
         DummyNode n1 = new DummyNode(2, 1, null);
 
         Graph g1 = new Graph();
 
         DummyNode n2 = new DummyNode(1, 1, g1);
-        assertNotSame(n1, n2);
+        NullNode null1 = new NullNode(g1);
+        DummyNode n3 = new DummyNode(0, 0, g1);
+        n2.dummySetInput(0, null1);
+        n2.dummySetSuccessor(0, n3);
+        
+        assertSame(null1, n2.getInput(0));
+        assertSame(n3, n2.getSuccessor(0));
+        
+        for(Node in : n1.getInputs())
+            assertNotNull(in);
+        for(Node sux : n1.getSuccessors())
+            assertNotNull(sux);
+        assertEquals(n1.getInputs().size(), 2);
+        assertEquals(n1.getSuccessors().size(), 1);
+    }
+    
+    @Test
+    public void testReplace() {
+        Graph g2 = new Graph();
+        
+        NullNode null2 = new NullNode(g2);
+        NullNode null3 = new NullNode(g2);
+        NullNode null4 = new NullNode(g2);
+        NullNode null5 = new NullNode(g2);
+        
+        DummyOp2 o1 = new DummyOp2(null2, null3, g2);
+        DummyOp2 o2 = new DummyOp2(o1, null4, g2);
+        DummyOp2 o3 = new DummyOp2(o2, null4, g2);
+        DummyOp2 o4 = new DummyOp2(null5, null5, g2);
+        
+        o2.replace(o4);
+        
+        assertTrue(o1.getUsages().contains(o4));
+        assertTrue(null4.getUsages().contains(o4));
+        assertFalse(o3.getInputs().contains(o2));
+        assertTrue(o3.getInputs().contains(o4));
     }
 
     private static class DummyNode extends Node {
@@ -47,6 +82,14 @@
         public DummyNode(Node[] inputs, Node[] successors, Graph graph) {
             super(inputs, successors, graph);
         }
+        
+        public void dummySetInput(int idx, Node n) {
+            this.setInput(idx, n);
+        }
+        
+        public void dummySetSuccessor(int idx, Node n) {
+            this.setSuccessor(idx, n);
+        }
 
         @Override
         public Node cloneNode(Graph into) {
@@ -54,4 +97,25 @@
         }
 
     }
+    
+    private static class DummyOp2 extends Node{
+
+        public DummyOp2(Node x, Node y, Graph graph) {
+            super(new Node[] {x, y}, new Node[] {}, graph);
+        }
+        
+        public Node x() {
+            return this.getInput(0);
+        }
+
+        public Node y() {
+            return this.getInput(1);
+        }
+        
+        @Override
+        public Node cloneNode(Graph into) {
+            return new DummyOp2(x(), y(), into); // this may create a Node which has inputs which do not belong to its graph
+        }
+        
+    }
 }