@Test void getAndAddIntOfField() { Obj obj = new Obj(); long anIntOffset = getFieldOffset( Obj.class, "anInt" ); assertThat( getAndAddInt( obj, anIntOffset, 3 ), is( 0 ) ); assertThat( getAndAddInt( obj, anIntOffset, 2 ), is( 3 ) ); assertThat( obj.anInt, is( 5 ) ); obj.anInt = 0; assertThat( obj, is( new Obj() ) ); }
@Test void getAndSetLongField() { Obj obj = new Obj(); long offset = getFieldOffset( Obj.class, "aLong" ); assertThat( getAndSetLong( obj, offset, 42L ), equalTo( 0L ) ); assertThat( getAndSetLong( obj, offset, -1 ), equalTo( 42L ) ); }
@Test void getAndSetObjectField() { Obj obj = new Obj(); long objectOffset = getFieldOffset( Obj.class, "object" ); assertThat( getAndSetObject( obj, objectOffset, obj ), is( nullValue() ) ); assertThat( getAndSetObject( obj, objectOffset, null ), sameInstance( obj ) ); assertThat( obj, is( new Obj() ) ); }
long aBooleanOffset = getFieldOffset( Obj.class, "aBoolean" ); obj = new Obj(); putBoolean( obj, aBooleanOffset, true ); long aByteOffset = getFieldOffset( Obj.class, "aByte" ); obj = new Obj(); putByte( obj, aByteOffset, (byte) 1 ); long aShortOffset = getFieldOffset( Obj.class, "aShort" ); obj = new Obj(); putShort( obj, aShortOffset, (byte) 1 ); long aFloatOffset = getFieldOffset( Obj.class, "aFloat" ); obj = new Obj(); putFloat( obj, aFloatOffset, 1 ); long aCharOffset = getFieldOffset( Obj.class, "aChar" ); obj = new Obj(); putChar( obj, aCharOffset, '1' ); long anIntOffset = getFieldOffset( Obj.class, "anInt" ); obj = new Obj(); putInt( obj, anIntOffset, 1 ); long aLongOffset = getFieldOffset( Obj.class, "aLong" ); obj = new Obj(); putLong( obj, aLongOffset, 1 ); long aDoubleOffset = getFieldOffset( Obj.class, "aDouble" );
@Test void compareAndSwapLongField() { Obj obj = new Obj(); long aLongOffset = getFieldOffset( Obj.class, "aLong" ); assertTrue( compareAndSwapLong( obj, aLongOffset, 0, 5 ) ); assertFalse( compareAndSwapLong( obj, aLongOffset, 0, 5 ) ); assertTrue( compareAndSwapLong( obj, aLongOffset, 5, 0 ) ); assertThat( obj, is( new Obj() ) ); }
@Test void compareAndSwapObjectField() { Obj obj = new Obj(); long objectOffset = getFieldOffset( Obj.class, "object" ); assertTrue( compareAndSwapObject( obj, objectOffset, null, obj ) ); assertFalse( compareAndSwapObject( obj, objectOffset, null, obj ) ); assertTrue( compareAndSwapObject( obj, objectOffset, obj, null ) ); assertThat( obj, is( new Obj() ) ); }
@Test void compareAndSetMaxLongField() { Obj obj = new Obj(); long offset = getFieldOffset( Obj.class, "aLong" ); assertThat( getAndSetLong( obj, offset, 42L ), equalTo( 0L ) ); compareAndSetMaxLong( obj, offset, 5 ); assertEquals( 42, getLong( obj, offset ) ); compareAndSetMaxLong( obj, offset, 105 ); assertEquals( 105, getLong( obj, offset ) ); }