Mercurial > hg > truffle
diff truffle/com.oracle.truffle.tools.test/src/com/oracle/truffle/tools/test/NodeExecCounterTest.java @ 22223:964e789e17f7
Truffle/Tools; rewrite tests for simple counting tools, e.g. CoverageTracker
author | Michael Van De Vanter <michael.van.de.vanter@oracle.com> |
---|---|
date | Sat, 19 Sep 2015 13:26:06 -0700 |
parents | 1c0f490984d5 |
children | 1f19e3cada3d |
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.tools.test/src/com/oracle/truffle/tools/test/NodeExecCounterTest.java Sat Sep 19 13:25:41 2015 -0700 +++ b/truffle/com.oracle.truffle.tools.test/src/com/oracle/truffle/tools/test/NodeExecCounterTest.java Sat Sep 19 13:26:06 2015 -0700 @@ -24,30 +24,28 @@ */ package com.oracle.truffle.tools.test; -import static com.oracle.truffle.tools.test.TestNodes.createExpr13TestCallTarget; -import static com.oracle.truffle.tools.test.TestNodes.createExpr13TestRootNode; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; +import java.io.IOException; +import java.lang.reflect.Field; + import org.junit.Test; -import com.oracle.truffle.api.CallTarget; import com.oracle.truffle.api.instrument.Instrumenter; -import com.oracle.truffle.api.instrument.Probe; -import com.oracle.truffle.api.instrument.StandardSyntaxTag; -import com.oracle.truffle.api.nodes.Node; -import com.oracle.truffle.api.nodes.RootNode; +import com.oracle.truffle.api.source.Source; +import com.oracle.truffle.api.vm.TruffleVM; import com.oracle.truffle.tools.NodeExecCounter; import com.oracle.truffle.tools.NodeExecCounter.NodeExecutionCount; -import com.oracle.truffle.tools.test.TestNodes.TestAddNode; -import com.oracle.truffle.tools.test.TestNodes.TestValueNode; public class NodeExecCounterTest { @Test public void testNoExecution() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { - final Instrumenter instrumenter = TestNodes.createInstrumenter(); + final TruffleVM vm = TruffleVM.newVM().build(); + final Field field = TruffleVM.class.getDeclaredField("instrumenter"); + field.setAccessible(true); + final Instrumenter instrumenter = (Instrumenter) field.get(vm); final NodeExecCounter tool = new NodeExecCounter(); assertEquals(tool.getCounts().length, 0); tool.install(instrumenter); @@ -62,117 +60,45 @@ assertEquals(tool.getCounts().length, 0); } - @Test - public void testToolCreatedTooLate() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { - final Instrumenter instrumenter = TestNodes.createInstrumenter(); - final CallTarget expr13callTarget = createExpr13TestCallTarget(instrumenter); - final NodeExecCounter tool = new NodeExecCounter(); - tool.install(instrumenter); - assertEquals(13, expr13callTarget.call()); - assertEquals(tool.getCounts().length, 0); - tool.dispose(); - } - - @Test - public void testToolInstalledcTooLate() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { - final Instrumenter instrumenter = TestNodes.createInstrumenter(); - final NodeExecCounter tool = new NodeExecCounter(); - final CallTarget expr13callTarget = createExpr13TestCallTarget(instrumenter); - tool.install(instrumenter); - assertEquals(13, expr13callTarget.call()); - assertEquals(tool.getCounts().length, 0); - tool.dispose(); + void checkCounts(NodeExecCounter execTool, int addCount, int valueCount) { + NodeExecutionCount[] counts = execTool.getCounts(); + assertEquals(counts.length, 2); + for (NodeExecutionCount counter : counts) { + if (counter.nodeClass() == ToolTestUtil.TestAdditionNode.class) { + assertEquals(counter.executionCount(), addCount); + } else if (counter.nodeClass() == ToolTestUtil.TestValueNode.class) { + assertEquals(counter.executionCount(), valueCount); + } else { + fail("correct classes counted"); + } + } } @Test - public void testCountingAll() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { - final Instrumenter instrumenter = TestNodes.createInstrumenter(); - final NodeExecCounter tool = new NodeExecCounter(); - tool.install(instrumenter); - final CallTarget expr13callTarget = createExpr13TestCallTarget(instrumenter); + public void testCounting() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, IOException { + final TruffleVM vm = TruffleVM.newVM().build(); + final Field field = TruffleVM.class.getDeclaredField("instrumenter"); + field.setAccessible(true); + final Instrumenter instrumenter = (Instrumenter) field.get(vm); + final Source source = ToolTestUtil.createTestSource("testCounting"); + final NodeExecCounter execTool = new NodeExecCounter(); + execTool.install(instrumenter); - // execute once - assertEquals(13, expr13callTarget.call()); - final NodeExecutionCount[] count1 = tool.getCounts(); - assertNotNull(count1); - assertEquals(count1.length, 2); - for (NodeExecutionCount count : count1) { - final Class<?> class1 = count.nodeClass(); - final long executionCount = count.executionCount(); - if (class1 == TestAddNode.class) { - assertEquals(executionCount, 1); - } else if (class1 == TestValueNode.class) { - assertEquals(executionCount, 2); - } else { - fail(); - } - } + assertEquals(execTool.getCounts().length, 0); - // Execute 99 more times - for (int i = 0; i < 99; i++) { - assertEquals(13, expr13callTarget.call()); - } - final NodeExecutionCount[] counts100 = tool.getCounts(); - assertNotNull(counts100); - assertEquals(counts100.length, 2); - for (NodeExecutionCount count : counts100) { - final Class<?> class1 = count.nodeClass(); - final long executionCount = count.executionCount(); - if (class1 == TestAddNode.class) { - assertEquals(executionCount, 100); - } else if (class1 == TestValueNode.class) { - assertEquals(executionCount, 200); - } else { - fail(); - } - } - - tool.dispose(); - } + assertEquals(vm.eval(source).get(), 13); - @Test - public void testCountingTagged() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { - final Instrumenter instrumenter = TestNodes.createInstrumenter(); - final NodeExecCounter tool = new NodeExecCounter(StandardSyntaxTag.STATEMENT); - tool.install(instrumenter); - final RootNode expr13rootNode = createExpr13TestRootNode(instrumenter); - - // Not probed yet. - assertEquals(13, expr13rootNode.execute(null)); - assertEquals(tool.getCounts().length, 0); - - final Node addNode = expr13rootNode.getChildren().iterator().next(); - final Probe probe = instrumenter.probe(addNode); - - // Probed but not tagged yet. - assertEquals(13, expr13rootNode.execute(null)); - assertEquals(tool.getCounts().length, 0); - - probe.tagAs(StandardSyntaxTag.STATEMENT, "fake statement for testing"); + checkCounts(execTool, 1, 2); - // Counting now; execute once - assertEquals(13, expr13rootNode.execute(null)); - final NodeExecutionCount[] counts1 = tool.getCounts(); - assertNotNull(counts1); - assertEquals(counts1.length, 1); - final NodeExecutionCount count1 = counts1[0]; - assertNotNull(count1); - assertEquals(count1.nodeClass(), addNode.getClass()); - assertEquals(count1.executionCount(), 1); + for (int i = 0; i < 99; i++) { + assertEquals(vm.eval(source).get(), 13); + } + checkCounts(execTool, 100, 200); - // Execute 99 more times - for (int i = 0; i < 99; i++) { - assertEquals(13, expr13rootNode.execute(null)); - } + execTool.setEnabled(false); + assertEquals(vm.eval(source).get(), 13); + checkCounts(execTool, 100, 200); - final NodeExecutionCount[] counts100 = tool.getCounts(); - assertNotNull(counts100); - assertEquals(counts100.length, 1); - final NodeExecutionCount count100 = counts100[0]; - assertNotNull(count100); - assertEquals(count100.nodeClass(), addNode.getClass()); - assertEquals(count100.executionCount(), 100); - - tool.dispose(); + execTool.dispose(); } }