@@ -60,26 +60,29 @@ public class TestAddressHandle {
60
60
}
61
61
62
62
@ Test (dataProvider = "addressHandles" )
63
- public void testAddressHandle (VarHandle addrHandle ) {
63
+ public void testAddressHandle (VarHandle addrHandle , int byteSize ) {
64
64
VarHandle longHandle = MemoryHandles .varHandle (long .class , ByteOrder .nativeOrder ());
65
65
try (MemorySegment segment = MemorySegment .allocateNative (8 )) {
66
+ MemoryAddress target = ByteOrder .nativeOrder () == ByteOrder .BIG_ENDIAN ?
67
+ segment .baseAddress ().addOffset (8 - byteSize ) :
68
+ segment .baseAddress ();
66
69
longHandle .set (segment .baseAddress (), 42L );
67
- MemoryAddress address = (MemoryAddress )addrHandle .get (segment . baseAddress () );
70
+ MemoryAddress address = (MemoryAddress )addrHandle .get (target );
68
71
assertEquals (address .toRawLongValue (), 42L );
69
72
try {
70
73
longHandle .get (address ); // check that address cannot be de-referenced
71
74
fail ();
72
75
} catch (UnsupportedOperationException ex ) {
73
76
assertTrue (true );
74
77
}
75
- addrHandle .set (segment . baseAddress () , address .addOffset (1 ));
78
+ addrHandle .set (target , address .addOffset (1 ));
76
79
long result = (long )longHandle .get (segment .baseAddress ());
77
80
assertEquals (43L , result );
78
81
}
79
82
}
80
83
81
84
@ Test (dataProvider = "addressHandles" )
82
- public void testNull (VarHandle addrHandle ) {
85
+ public void testNull (VarHandle addrHandle , int byteSize ) {
83
86
VarHandle longHandle = MemoryHandles .varHandle (long .class , ByteOrder .nativeOrder ());
84
87
try (MemorySegment segment = MemorySegment .allocateNative (8 )) {
85
88
longHandle .set (segment .baseAddress (), 0L );
@@ -118,29 +121,29 @@ public void testBadAdaptString() {
118
121
static Object [][] addressHandles () {
119
122
return new Object [][] {
120
123
// long
121
- { MemoryHandles .asAddressVarHandle (MemoryHandles .varHandle (long .class , ByteOrder .nativeOrder ())) },
122
- { MemoryHandles .asAddressVarHandle (MemoryHandles .withOffset (MemoryHandles .varHandle (long .class , ByteOrder .nativeOrder ()), 0 )) },
123
- { MemoryHandles .asAddressVarHandle (MemoryLayouts .JAVA_LONG .varHandle (long .class )) },
124
+ { MemoryHandles .asAddressVarHandle (MemoryHandles .varHandle (long .class , ByteOrder .nativeOrder ())), 8 },
125
+ { MemoryHandles .asAddressVarHandle (MemoryHandles .withOffset (MemoryHandles .varHandle (long .class , ByteOrder .nativeOrder ()), 0 )), 8 },
126
+ { MemoryHandles .asAddressVarHandle (MemoryLayouts .JAVA_LONG .varHandle (long .class )), 8 },
124
127
125
128
// int
126
- { MemoryHandles .asAddressVarHandle (MemoryHandles .varHandle (int .class , ByteOrder .nativeOrder ())) },
127
- { MemoryHandles .asAddressVarHandle (MemoryHandles .withOffset (MemoryHandles .varHandle (int .class , ByteOrder .nativeOrder ()), 0 )) },
128
- { MemoryHandles .asAddressVarHandle (MemoryLayouts .JAVA_INT .varHandle (int .class )) },
129
+ { MemoryHandles .asAddressVarHandle (MemoryHandles .varHandle (int .class , ByteOrder .nativeOrder ())), 4 },
130
+ { MemoryHandles .asAddressVarHandle (MemoryHandles .withOffset (MemoryHandles .varHandle (int .class , ByteOrder .nativeOrder ()), 0 )), 4 },
131
+ { MemoryHandles .asAddressVarHandle (MemoryLayouts .JAVA_INT .varHandle (int .class )), 4 },
129
132
130
133
// short
131
- { MemoryHandles .asAddressVarHandle (MemoryHandles .varHandle (short .class , ByteOrder .nativeOrder ())) },
132
- { MemoryHandles .asAddressVarHandle (MemoryHandles .withOffset (MemoryHandles .varHandle (short .class , ByteOrder .nativeOrder ()), 0 )) },
133
- { MemoryHandles .asAddressVarHandle (MemoryLayouts .JAVA_SHORT .varHandle (short .class )) },
134
+ { MemoryHandles .asAddressVarHandle (MemoryHandles .varHandle (short .class , ByteOrder .nativeOrder ())), 2 },
135
+ { MemoryHandles .asAddressVarHandle (MemoryHandles .withOffset (MemoryHandles .varHandle (short .class , ByteOrder .nativeOrder ()), 0 )), 2 },
136
+ { MemoryHandles .asAddressVarHandle (MemoryLayouts .JAVA_SHORT .varHandle (short .class )), 2 },
134
137
135
138
// char
136
- { MemoryHandles .asAddressVarHandle (MemoryHandles .varHandle (char .class , ByteOrder .nativeOrder ())) },
137
- { MemoryHandles .asAddressVarHandle (MemoryHandles .withOffset (MemoryHandles .varHandle (char .class , ByteOrder .nativeOrder ()), 0 )) },
138
- { MemoryHandles .asAddressVarHandle (MemoryLayouts .JAVA_CHAR .varHandle (char .class )) },
139
+ { MemoryHandles .asAddressVarHandle (MemoryHandles .varHandle (char .class , ByteOrder .nativeOrder ())), 2 },
140
+ { MemoryHandles .asAddressVarHandle (MemoryHandles .withOffset (MemoryHandles .varHandle (char .class , ByteOrder .nativeOrder ()), 0 )), 2 },
141
+ { MemoryHandles .asAddressVarHandle (MemoryLayouts .JAVA_CHAR .varHandle (char .class )), 2 },
139
142
140
143
// byte
141
- { MemoryHandles .asAddressVarHandle (MemoryHandles .varHandle (byte .class , ByteOrder .nativeOrder ())) },
142
- { MemoryHandles .asAddressVarHandle (MemoryHandles .withOffset (MemoryHandles .varHandle (byte .class , ByteOrder .nativeOrder ()), 0 )) },
143
- { MemoryHandles .asAddressVarHandle (MemoryLayouts .JAVA_BYTE .varHandle (byte .class )) }
144
+ { MemoryHandles .asAddressVarHandle (MemoryHandles .varHandle (byte .class , ByteOrder .nativeOrder ())), 1 },
145
+ { MemoryHandles .asAddressVarHandle (MemoryHandles .withOffset (MemoryHandles .varHandle (byte .class , ByteOrder .nativeOrder ()), 0 )), 1 },
146
+ { MemoryHandles .asAddressVarHandle (MemoryLayouts .JAVA_BYTE .varHandle (byte .class )), 1 }
144
147
};
145
148
}
146
149
0 commit comments