Exercise sun.misc.Unsafe.getObject.

Change-Id: I6b3c090e1db7302d6f5b81ab91d5a1dc218fae93
diff --git a/test/004-UnsafeTest/src/Main.java b/test/004-UnsafeTest/src/Main.java
index 708f61f..2554b76 100644
--- a/test/004-UnsafeTest/src/Main.java
+++ b/test/004-UnsafeTest/src/Main.java
@@ -36,6 +36,13 @@
     }
   }
 
+  private static void check(Object actual, Object expected, String msg) {
+    if (actual != expected) {
+      System.out.println(msg + " : " + actual + " != " + expected);
+      System.exit(1);
+    }
+  }
+
   private static Unsafe getUnsafe() throws Exception {
     Class<?> unsafeClass = Class.forName("sun.misc.Unsafe");
     Field f = unsafeClass.getDeclaredField("theUnsafe");
@@ -80,6 +87,7 @@
         "Unsafe.arrayIndexScale(Object[])");
 
     TestClass t = new TestClass();
+
     int intValue = 12345678;
     Field intField = TestClass.class.getDeclaredField("intVar");
     long intOffset = unsafe.objectFieldOffset(intField);
@@ -87,14 +95,23 @@
     unsafe.putInt(t, intOffset, intValue);
     check(t.intVar, intValue, "Unsafe.putInt(Object, long, int)");
     check(unsafe.getInt(t, intOffset), intValue, "Unsafe.getInt(Object, long)");
+
+    long longValue = 1234567887654321L;
     Field longField = TestClass.class.getDeclaredField("longVar");
     long longOffset = unsafe.objectFieldOffset(longField);
-    long longValue = 1234567887654321L;
     check(unsafe.getLong(t, longOffset), 0, "Unsafe.getLong(Object, long) - initial");
     unsafe.putLong(t, longOffset, longValue);
     check(t.longVar, longValue, "Unsafe.putLong(Object, long, long)");
     check(unsafe.getLong(t, longOffset), longValue, "Unsafe.getLong(Object, long)");
 
+    Object objectValue = new Object();
+    Field objectField = TestClass.class.getDeclaredField("objectVar");
+    long objectOffset = unsafe.objectFieldOffset(objectField);
+    check(unsafe.getObject(t, objectOffset), null, "Unsafe.getObject(Object, long) - initial");
+    unsafe.putObject(t, objectOffset, objectValue);
+    check(t.objectVar, objectValue, "Unsafe.putObject(Object, long, Object)");
+    check(unsafe.getObject(t, objectOffset), objectValue, "Unsafe.getObject(Object, long)");
+
     if (unsafe.compareAndSwapInt(t, intOffset, 0, 1)) {
         System.out.println("Unexpectedly succeeding compareAndSwap...");
     }
@@ -119,6 +136,7 @@
   private static class TestClass {
     public int intVar = 0;
     public long longVar = 0;
+    public Object objectVar = null;
   }
 
   private static native int vmArrayBaseOffset(Class clazz);