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
24
25 package org.graalvm.compiler.test;
26
27 import static org.graalvm.compiler.debug.DebugContext.DEFAULT_LOG_STREAM;
28 import static org.graalvm.compiler.debug.DebugContext.NO_DESCRIPTION;
29
30 import java.io.PrintStream;
31 import java.io.PrintWriter;
32 import java.lang.reflect.Field;
33 import java.lang.reflect.Method;
34 import java.util.ArrayList;
35 import java.util.Arrays;
36 import java.util.Collection;
37 import java.util.Collections;
38 import java.util.concurrent.TimeUnit;
39 import java.util.List;
40
41 import org.graalvm.compiler.debug.DebugContext;
42 import org.graalvm.compiler.debug.DebugDumpHandler;
43 import org.graalvm.compiler.debug.DebugHandlersFactory;
44 import org.graalvm.compiler.debug.GlobalMetrics;
45 import org.graalvm.compiler.options.OptionValues;
46 import org.graalvm.compiler.serviceprovider.GraalServices;
47 import org.junit.After;
48 import org.junit.Assert;
49 import org.junit.internal.ComparisonCriteria;
50 import org.junit.internal.ExactComparisonCriteria;
51 import org.junit.rules.DisableOnDebug;
52 import org.junit.rules.TestRule;
53 import org.junit.rules.Timeout;
54
55 import jdk.vm.ci.meta.ResolvedJavaMethod;
56 import sun.misc.Unsafe;
57
58 /**
59 * Base class that contains common utility methods and classes useful in unit tests.
60 */
61 public class GraalTest {
62
63 public static final Unsafe UNSAFE;
64 static {
65 try {
66 Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
67 theUnsafe.setAccessible(true);
68 UNSAFE = (Unsafe) theUnsafe.get(Unsafe.class);
220 Class<?> actualClass = actual.getClass();
221 if (expectedClass.isArray()) {
222 Assert.assertEquals(message, expectedClass, actualClass);
223 if (expected instanceof double[] || expected instanceof Object[]) {
224 doubleUlpsDeltaCriteria.arrayEquals(message, expected, actual);
225 return;
226 } else if (expected instanceof float[] || expected instanceof Object[]) {
227 floatUlpsDeltaCriteria.arrayEquals(message, expected, actual);
228 return;
229 }
230 } else if (expectedClass.equals(double.class) && actualClass.equals(double.class)) {
231 doubleUlpsDeltaCriteria.arrayEquals(message, expected, actual);
232 return;
233 } else if (expectedClass.equals(float.class) && actualClass.equals(float.class)) {
234 floatUlpsDeltaCriteria.arrayEquals(message, expected, actual);
235 return;
236 }
237 }
238 // anything else just use the non-ulps version
239 assertDeepEquals(message, expected, actual, equalFloatsOrDoublesDelta());
240 }
241
242 /**
243 * Gets the value used by {@link #assertDeepEquals(Object, Object)} and
244 * {@link #assertDeepEquals(String, Object, Object)} for the maximum delta between two doubles
245 * or floats for which both numbers are still considered equal.
246 */
247 protected double equalFloatsOrDoublesDelta() {
248 return 0.0D;
249 }
250
251 // unless overridden ulpsDelta is not used
252 protected int ulpsDelta() {
253 return 0;
254 }
255
256 @SuppressWarnings("serial")
257 public static class MultiCauseAssertionError extends AssertionError {
258
259 private Throwable[] causes;
|
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
24
25 package org.graalvm.compiler.test;
26
27 import static org.graalvm.compiler.debug.DebugContext.DEFAULT_LOG_STREAM;
28 import static org.graalvm.compiler.debug.DebugContext.NO_DESCRIPTION;
29
30 import java.io.PrintStream;
31 import java.io.PrintWriter;
32 import java.lang.reflect.Field;
33 import java.lang.reflect.Method;
34 import java.util.ArrayList;
35 import java.util.Arrays;
36 import java.util.Collection;
37 import java.util.Collections;
38 import java.util.List;
39 import java.util.concurrent.TimeUnit;
40
41 import org.graalvm.compiler.debug.DebugContext;
42 import org.graalvm.compiler.debug.DebugDumpHandler;
43 import org.graalvm.compiler.debug.DebugHandlersFactory;
44 import org.graalvm.compiler.debug.GlobalMetrics;
45 import org.graalvm.compiler.options.OptionValues;
46 import org.graalvm.compiler.serviceprovider.GraalServices;
47 import org.junit.After;
48 import org.junit.Assert;
49 import org.junit.AssumptionViolatedException;
50 import org.junit.internal.ComparisonCriteria;
51 import org.junit.internal.ExactComparisonCriteria;
52 import org.junit.rules.DisableOnDebug;
53 import org.junit.rules.TestRule;
54 import org.junit.rules.Timeout;
55
56 import jdk.vm.ci.meta.ResolvedJavaMethod;
57 import sun.misc.Unsafe;
58
59 /**
60 * Base class that contains common utility methods and classes useful in unit tests.
61 */
62 public class GraalTest {
63
64 public static final Unsafe UNSAFE;
65 static {
66 try {
67 Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
68 theUnsafe.setAccessible(true);
69 UNSAFE = (Unsafe) theUnsafe.get(Unsafe.class);
221 Class<?> actualClass = actual.getClass();
222 if (expectedClass.isArray()) {
223 Assert.assertEquals(message, expectedClass, actualClass);
224 if (expected instanceof double[] || expected instanceof Object[]) {
225 doubleUlpsDeltaCriteria.arrayEquals(message, expected, actual);
226 return;
227 } else if (expected instanceof float[] || expected instanceof Object[]) {
228 floatUlpsDeltaCriteria.arrayEquals(message, expected, actual);
229 return;
230 }
231 } else if (expectedClass.equals(double.class) && actualClass.equals(double.class)) {
232 doubleUlpsDeltaCriteria.arrayEquals(message, expected, actual);
233 return;
234 } else if (expectedClass.equals(float.class) && actualClass.equals(float.class)) {
235 floatUlpsDeltaCriteria.arrayEquals(message, expected, actual);
236 return;
237 }
238 }
239 // anything else just use the non-ulps version
240 assertDeepEquals(message, expected, actual, equalFloatsOrDoublesDelta());
241 }
242
243 /** @see <a href="https://bugs.openjdk.java.net/browse/JDK-8076557">JDK-8076557</a> */
244 protected static void assumeManagementLibraryIsLoadable() {
245 try {
246 /* Trigger loading of the management library using the bootstrap class loader. */
247 GraalServices.getCurrentThreadAllocatedBytes();
248 } catch (UnsatisfiedLinkError | NoClassDefFoundError | UnsupportedOperationException e) {
249 throw new AssumptionViolatedException("Management interface is unavailable: " + e);
250 }
251 }
252
253 /**
254 * Gets the value used by {@link #assertDeepEquals(Object, Object)} and
255 * {@link #assertDeepEquals(String, Object, Object)} for the maximum delta between two doubles
256 * or floats for which both numbers are still considered equal.
257 */
258 protected double equalFloatsOrDoublesDelta() {
259 return 0.0D;
260 }
261
262 // unless overridden ulpsDelta is not used
263 protected int ulpsDelta() {
264 return 0;
265 }
266
267 @SuppressWarnings("serial")
268 public static class MultiCauseAssertionError extends AssertionError {
269
270 private Throwable[] causes;
|