Mercurial > hg > truffle
diff graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java @ 9682:86d24f120b78
Allow tests to check for deoptimizations, provide Method object in before hook.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Tue, 14 May 2013 15:02:07 +0200 |
parents | e97dc9bbfedc |
children | e415e58e0db2 |
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java Tue May 14 14:11:04 2013 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java Tue May 14 15:02:07 2013 +0200 @@ -77,8 +77,8 @@ protected final Backend backend; public GraalCompilerTest() { + this.replacements = Graal.getRequiredCapability(Replacements.class); this.runtime = Graal.getRequiredCapability(GraalCodeCacheProvider.class); - this.replacements = Graal.getRequiredCapability(Replacements.class); this.backend = Graal.getRequiredCapability(Backend.class); } @@ -247,12 +247,17 @@ this.returnValue = returnValue; this.exception = exception; } + + @Override + public String toString() { + return exception == null ? returnValue == null ? "null" : returnValue.toString() : "!" + exception; + } } /** * Called before a test is executed. */ - protected void before() { + protected void before(@SuppressWarnings("unused") Method method) { } /** @@ -262,7 +267,7 @@ } protected Result executeExpected(Method method, Object receiver, Object... args) { - before(); + before(method); try { // This gives us both the expected return value as well as ensuring that the method to // be compiled is fully resolved @@ -277,7 +282,7 @@ } protected Result executeActual(Method method, Object receiver, Object... args) { - before(); + before(method); Object[] executeArgs = argsWithReceiver(receiver, args); ResolvedJavaMethod javaMethod = runtime.lookupJavaMethod(method); @@ -347,11 +352,24 @@ } protected void test(Method method, Result expect, Object receiver, Object... args) { + test(method, expect, Collections.<DeoptimizationReason> emptySet(), receiver, args); + } + + protected void test(Method method, Result expect, Set<DeoptimizationReason> shouldNotDeopt, Object receiver, Object... args) { + Map<DeoptimizationReason, Integer> deoptCounts = new EnumMap<>(DeoptimizationReason.class); + ProfilingInfo profile = runtime.lookupJavaMethod(method).getProfilingInfo(); + for (DeoptimizationReason reason : shouldNotDeopt) { + deoptCounts.put(reason, profile.getDeoptimizationCount(reason)); + } Result actual = executeActual(method, receiver, args); + for (DeoptimizationReason reason : shouldNotDeopt) { + Assert.assertEquals((int) deoptCounts.get(reason), profile.getDeoptimizationCount(reason)); + } if (expect.exception != null) { Assert.assertTrue("expected " + expect.exception, actual.exception != null); Assert.assertEquals(expect.exception.getClass(), actual.exception.getClass()); + Assert.assertEquals(expect.exception.getMessage(), actual.exception.getMessage()); } else { if (actual.exception != null) { actual.exception.printStackTrace();