# HG changeset patch # User Lukas Stadler # Date 1401104241 -7200 # Node ID dd863084c7ad4e038a4b1dbadb756be76be412b2 # Parent 54151c986dbb1eb538acc9906e6ff4a28032e898 tests for NodeMap diff -r 54151c986dbb -r dd863084c7ad graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/NodeMapTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/NodeMapTest.java Mon May 26 13:37:21 2014 +0200 @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.graph.test; + +import static org.junit.Assert.*; + +import org.junit.*; + +import com.oracle.graal.graph.*; + +public class NodeMapTest { + + private static class TestNode extends Node { + } + + private Graph graph; + private TestNode[] nodes = new TestNode[100]; + private NodeMap map; + + @Before + public void before() { + graph = new Graph(); + for (int i = 0; i < nodes.length; i++) { + nodes[i] = graph.add(new TestNode()); + } + map = new NodeMap<>(graph); + for (int i = 0; i < nodes.length; i += 2) { + map.set(nodes[i], i); + } + } + + @Test + public void testEmpty() { + NodeMap emptyMap = new NodeMap<>(graph); + for (TestNode node : nodes) { + assertEquals(null, emptyMap.get(node)); + } + } + + @Test + public void testSimple() { + for (int i = 0; i < nodes.length; i++) { + if ((i & 1) == 0) { + assertEquals((Integer) i, map.get(nodes[i])); + } else { + assertEquals(null, map.get(nodes[i])); + } + } + } + + @Test + public void testSimpleChanged() { + for (TestNode node : nodes) { + map.set(node, 1); + } + for (TestNode node : nodes) { + map.set(node, null); + } + for (int i = 0; i < nodes.length; i += 2) { + map.set(nodes[i], i); + } + + for (int i = 0; i < nodes.length; i++) { + if ((i & 1) == 0) { + assertEquals((Integer) i, map.get(nodes[i])); + } else { + assertEquals(null, map.get(nodes[i])); + } + } + } + + @Test(expected = AssertionError.class) + public void testNewGet() { + /* + * Failing here is not required, but if this behavior changes, usages of get need to be + * checked for compatibility. + */ + TestNode newNode = graph.add(new TestNode()); + map.get(newNode); + } + + @Test(expected = AssertionError.class) + public void testNewSet() { + /* + * Failing here is not required, but if this behavior changes, usages of set need to be + * checked for compatibility. + */ + TestNode newNode = graph.add(new TestNode()); + map.set(newNode, 1); + } + + @Test + public void testNewGetAndGrow() { + TestNode newNode = graph.add(new TestNode()); + assertEquals(null, map.getAndGrow(newNode)); + } + + @Test + public void testNewSetAndGrow() { + TestNode newNode = graph.add(new TestNode()); + map.setAndGrow(newNode, 1); + assertEquals((Integer) 1, map.get(newNode)); + } + + @Test(expected = AssertionError.class) + public void testNewSetAndGrowMultiple() { + TestNode newNode = graph.add(new TestNode()); + map.setAndGrow(newNode, 1); + assertEquals((Integer) 1, map.get(newNode)); + /* + * Failing here is not required, but if this behavior changes, usages of getAndGrow and + * setAndGrow need to be checked for compatibility. + */ + TestNode newNode2 = graph.add(new TestNode()); + map.get(newNode2); + } +}