package io.trane.future;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class UnsafeTest {
class TestClass {
private volatile Object field = null;
public Object getField() {
return field;
}
}
@Test
public void unsafeInstance() {
assertEquals(Unsafe.instance, Unsafe.getDeclaredStaticField(sun.misc.Unsafe.class, "theUnsafe"));
}
@Test(expected = RuntimeException.class)
public void getDeclaredStaticField() {
Unsafe.getDeclaredStaticField(TestClass.class, "wrongField");
}
@Test
public void objectFieldOffset() throws NoSuchFieldException, SecurityException {
long actual = Unsafe.objectFieldOffset(TestClass.class, "field");
long expected = Unsafe.instance.objectFieldOffset(TestClass.class.getDeclaredField("field"));
assertEquals(actual, expected);
}
@Test(expected = RuntimeException.class)
public void objectFieldOffsetException() {
Unsafe.objectFieldOffset(TestClass.class, "wrongField");
}
}