src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph.test/src/org/graalvm/compiler/graph/test/TypedNodeIteratorTest.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph.test/src/org/graalvm/compiler/graph/test

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph.test/src/org/graalvm/compiler/graph/test/TypedNodeIteratorTest.java

Print this page




  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 package org.graalvm.compiler.graph.test;
  24 
  25 import static org.graalvm.compiler.nodeinfo.NodeCycles.CYCLES_IGNORED;
  26 import static org.graalvm.compiler.nodeinfo.NodeSize.SIZE_IGNORED;
  27 import static org.junit.Assert.assertEquals;
  28 import static org.junit.Assert.assertFalse;
  29 import static org.junit.Assert.assertNotNull;
  30 import static org.junit.Assert.assertTrue;
  31 import static org.junit.Assert.fail;
  32 
  33 import java.util.Iterator;
  34 
  35 import org.junit.Test;
  36 
  37 import org.graalvm.compiler.graph.Graph;
  38 import org.graalvm.compiler.graph.IterableNodeType;
  39 import org.graalvm.compiler.graph.Node;
  40 import org.graalvm.compiler.graph.NodeClass;
  41 import org.graalvm.compiler.nodeinfo.NodeInfo;

  42 
  43 public class TypedNodeIteratorTest {
  44 
  45     @NodeInfo(cycles = CYCLES_IGNORED, size = SIZE_IGNORED)
  46     static final class TestNode extends Node implements IterableNodeType, TestNodeInterface {
  47 
  48         public static final NodeClass<TestNode> TYPE = NodeClass.create(TestNode.class);
  49         protected final String name;
  50 
  51         protected TestNode(String name) {
  52             super(TYPE);
  53             this.name = name;
  54         }
  55 
  56         @Override
  57         public String getName() {
  58             return name;
  59         }
  60     }
  61 
  62     @Test
  63     public void singleNodeTest() {
  64         Graph graph = new Graph();

  65         graph.add(new TestNode("a"));
  66         assertTrue(graph.hasNode(TestNode.TYPE));
  67         assertEquals("a", toString(graph.getNodes(TestNode.TYPE)));
  68     }
  69 




  70     @Test
  71     public void deletingNodeTest() {
  72         TestNode testNode = new TestNode("a");
  73         Graph graph = new Graph();
  74         graph.add(testNode);
  75         testNode.safeDelete();
  76         assertEquals("", toString(graph.getNodes(TestNode.TYPE)));
  77     }
  78 
  79     @Test
  80     public void deleteAndAddTest() {
  81         TestNode testNode = new TestNode("b");
  82         Graph graph = new Graph();
  83         graph.add(new TestNode("a"));
  84         graph.add(testNode);
  85         testNode.safeDelete();
  86         assertEquals("a", toString(graph.getNodes(TestNode.TYPE)));
  87         graph.add(new TestNode("c"));
  88         assertEquals("ac", toString(graph.getNodes(TestNode.TYPE)));
  89     }
  90 
  91     @Test
  92     public void iteratorBehaviorTest() {
  93         Graph graph = new Graph();
  94         graph.add(new TestNode("a"));
  95         Iterator<TestNode> iterator = graph.getNodes(TestNode.TYPE).iterator();
  96         assertTrue(iterator.hasNext());
  97         assertEquals("a", iterator.next().getName());
  98         assertFalse(iterator.hasNext());
  99         graph.add(new TestNode("b"));
 100         assertTrue(iterator.hasNext());
 101         assertEquals("b", iterator.next().getName());
 102         assertFalse(iterator.hasNext());
 103         TestNode c = new TestNode("c");
 104         graph.add(c);
 105         assertTrue(iterator.hasNext());
 106         c.safeDelete();
 107         assertFalse(iterator.hasNext());
 108     }
 109 
 110     @Test
 111     public void complicatedIterationTest() {
 112         Graph graph = new Graph();
 113         graph.add(new TestNode("a"));
 114         for (TestNode tn : graph.getNodes(TestNode.TYPE)) {
 115             String name = tn.getName();
 116             for (int i = 0; i < name.length(); ++i) {
 117                 char c = name.charAt(i);
 118                 if (c == 'a') {
 119                     tn.safeDelete();
 120                     graph.add(new TestNode("b"));
 121                     graph.add(new TestNode("c"));
 122                 } else if (c == 'b') {
 123                     tn.safeDelete();
 124                 } else if (c == 'c') {
 125                     graph.add(new TestNode("d"));
 126                     graph.add(new TestNode("e"));
 127                     graph.add(new TestNode("d"));
 128                     graph.add(new TestNode("e"));
 129                     graph.add(new TestNode("e"));
 130                     graph.add(new TestNode("d"));
 131                     graph.add(new TestNode("e"));
 132                     graph.add(new TestNode("d"));
 133                 } else if (c == 'd') {
 134                     for (TestNode tn2 : graph.getNodes(TestNode.TYPE)) {
 135                         if (tn2.getName().equals("e")) {
 136                             tn2.safeDelete();
 137                         } else if (tn2.getName().equals("c")) {
 138                             tn2.safeDelete();
 139                         }
 140                     }
 141                 } else if (c == 'e') {
 142                     fail("All e nodes must have been deleted by visiting the d node");
 143                 }
 144             }
 145         }
 146         assertEquals("dddd", toString(graph.getNodes(TestNode.TYPE)));
 147     }
 148 
 149     @Test
 150     public void addingNodeDuringIterationTest() {
 151         Graph graph = new Graph();
 152         graph.add(new TestNode("a"));
 153         StringBuilder sb = new StringBuilder();
 154         int z = 0;
 155         for (TestNode tn : graph.getNodes(TestNode.TYPE)) {
 156             if (z == 0) {
 157                 graph.add(new TestNode("b"));
 158             }
 159             sb.append(tn.getName());
 160             z++;
 161         }
 162         assertEquals(2, z);
 163         assertEquals("ab", sb.toString());
 164         z = 0;
 165         for (TestNode tn : graph.getNodes(TestNode.TYPE)) {
 166             if (z == 0) {
 167                 graph.add(new TestNode("c"));
 168             }
 169             assertNotNull(tn);
 170             z++;
 171         }


  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 package org.graalvm.compiler.graph.test;
  24 
  25 import static org.graalvm.compiler.nodeinfo.NodeCycles.CYCLES_IGNORED;
  26 import static org.graalvm.compiler.nodeinfo.NodeSize.SIZE_IGNORED;
  27 import static org.junit.Assert.assertEquals;
  28 import static org.junit.Assert.assertFalse;
  29 import static org.junit.Assert.assertNotNull;
  30 import static org.junit.Assert.assertTrue;
  31 import static org.junit.Assert.fail;
  32 
  33 import java.util.Iterator;
  34 
  35 import org.junit.Test;
  36 import org.graalvm.compiler.api.test.Graal;
  37 import org.graalvm.compiler.graph.Graph;
  38 import org.graalvm.compiler.graph.IterableNodeType;
  39 import org.graalvm.compiler.graph.Node;
  40 import org.graalvm.compiler.graph.NodeClass;
  41 import org.graalvm.compiler.nodeinfo.NodeInfo;
  42 import org.graalvm.compiler.options.OptionValues;
  43 
  44 public class TypedNodeIteratorTest extends GraphTest {
  45 
  46     @NodeInfo(cycles = CYCLES_IGNORED, size = SIZE_IGNORED)
  47     static final class TestNode extends Node implements IterableNodeType, TestNodeInterface {
  48 
  49         public static final NodeClass<TestNode> TYPE = NodeClass.create(TestNode.class);
  50         protected final String name;
  51 
  52         protected TestNode(String name) {
  53             super(TYPE);
  54             this.name = name;
  55         }
  56 
  57         @Override
  58         public String getName() {
  59             return name;
  60         }
  61     }
  62 
  63     @Test
  64     public void singleNodeTest() {
  65         getOptions();
  66         Graph graph = new Graph(getOptions());
  67         graph.add(new TestNode("a"));
  68         assertTrue(graph.hasNode(TestNode.TYPE));
  69         assertEquals("a", toString(graph.getNodes(TestNode.TYPE)));
  70     }
  71 
  72     static OptionValues getOptions() {
  73         return Graal.getRequiredCapability(OptionValues.class);
  74     }
  75 
  76     @Test
  77     public void deletingNodeTest() {
  78         TestNode testNode = new TestNode("a");
  79         Graph graph = new Graph(getOptions());
  80         graph.add(testNode);
  81         testNode.safeDelete();
  82         assertEquals("", toString(graph.getNodes(TestNode.TYPE)));
  83     }
  84 
  85     @Test
  86     public void deleteAndAddTest() {
  87         TestNode testNode = new TestNode("b");
  88         Graph graph = new Graph(getOptions());
  89         graph.add(new TestNode("a"));
  90         graph.add(testNode);
  91         testNode.safeDelete();
  92         assertEquals("a", toString(graph.getNodes(TestNode.TYPE)));
  93         graph.add(new TestNode("c"));
  94         assertEquals("ac", toString(graph.getNodes(TestNode.TYPE)));
  95     }
  96 
  97     @Test
  98     public void iteratorBehaviorTest() {
  99         Graph graph = new Graph(getOptions());
 100         graph.add(new TestNode("a"));
 101         Iterator<TestNode> iterator = graph.getNodes(TestNode.TYPE).iterator();
 102         assertTrue(iterator.hasNext());
 103         assertEquals("a", iterator.next().getName());
 104         assertFalse(iterator.hasNext());
 105         graph.add(new TestNode("b"));
 106         assertTrue(iterator.hasNext());
 107         assertEquals("b", iterator.next().getName());
 108         assertFalse(iterator.hasNext());
 109         TestNode c = new TestNode("c");
 110         graph.add(c);
 111         assertTrue(iterator.hasNext());
 112         c.safeDelete();
 113         assertFalse(iterator.hasNext());
 114     }
 115 
 116     @Test
 117     public void complicatedIterationTest() {
 118         Graph graph = new Graph(getOptions());
 119         graph.add(new TestNode("a"));
 120         for (TestNode tn : graph.getNodes(TestNode.TYPE)) {
 121             String name = tn.getName();
 122             for (int i = 0; i < name.length(); ++i) {
 123                 char c = name.charAt(i);
 124                 if (c == 'a') {
 125                     tn.safeDelete();
 126                     graph.add(new TestNode("b"));
 127                     graph.add(new TestNode("c"));
 128                 } else if (c == 'b') {
 129                     tn.safeDelete();
 130                 } else if (c == 'c') {
 131                     graph.add(new TestNode("d"));
 132                     graph.add(new TestNode("e"));
 133                     graph.add(new TestNode("d"));
 134                     graph.add(new TestNode("e"));
 135                     graph.add(new TestNode("e"));
 136                     graph.add(new TestNode("d"));
 137                     graph.add(new TestNode("e"));
 138                     graph.add(new TestNode("d"));
 139                 } else if (c == 'd') {
 140                     for (TestNode tn2 : graph.getNodes(TestNode.TYPE)) {
 141                         if (tn2.getName().equals("e")) {
 142                             tn2.safeDelete();
 143                         } else if (tn2.getName().equals("c")) {
 144                             tn2.safeDelete();
 145                         }
 146                     }
 147                 } else if (c == 'e') {
 148                     fail("All e nodes must have been deleted by visiting the d node");
 149                 }
 150             }
 151         }
 152         assertEquals("dddd", toString(graph.getNodes(TestNode.TYPE)));
 153     }
 154 
 155     @Test
 156     public void addingNodeDuringIterationTest() {
 157         Graph graph = new Graph(getOptions());
 158         graph.add(new TestNode("a"));
 159         StringBuilder sb = new StringBuilder();
 160         int z = 0;
 161         for (TestNode tn : graph.getNodes(TestNode.TYPE)) {
 162             if (z == 0) {
 163                 graph.add(new TestNode("b"));
 164             }
 165             sb.append(tn.getName());
 166             z++;
 167         }
 168         assertEquals(2, z);
 169         assertEquals("ab", sb.toString());
 170         z = 0;
 171         for (TestNode tn : graph.getNodes(TestNode.TYPE)) {
 172             if (z == 0) {
 173                 graph.add(new TestNode("c"));
 174             }
 175             assertNotNull(tn);
 176             z++;
 177         }
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph.test/src/org/graalvm/compiler/graph/test/TypedNodeIteratorTest.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File