119 |
119 |
120 |
120 |
121 static void testInstanceField(VarHandleTestMethodHandleAccessLong recv, Handles hs) throws Throwable { |
121 static void testInstanceField(VarHandleTestMethodHandleAccessLong recv, Handles hs) throws Throwable { |
122 // Plain |
122 // Plain |
123 { |
123 { |
124 hs.get(TestAccessMode.SET).invokeExact(recv, 1L); |
124 hs.get(TestAccessMode.SET).invokeExact(recv, 0x0123456789ABCDEFL); |
125 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
125 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
126 assertEquals(x, 1L, "set long value"); |
126 assertEquals(x, 0x0123456789ABCDEFL, "set long value"); |
127 } |
127 } |
128 |
128 |
129 |
129 |
130 // Volatile |
130 // Volatile |
131 { |
131 { |
132 hs.get(TestAccessMode.SET_VOLATILE).invokeExact(recv, 2L); |
132 hs.get(TestAccessMode.SET_VOLATILE).invokeExact(recv, 0xCAFEBABECAFEBABEL); |
133 long x = (long) hs.get(TestAccessMode.GET_VOLATILE).invokeExact(recv); |
133 long x = (long) hs.get(TestAccessMode.GET_VOLATILE).invokeExact(recv); |
134 assertEquals(x, 2L, "setVolatile long value"); |
134 assertEquals(x, 0xCAFEBABECAFEBABEL, "setVolatile long value"); |
135 } |
135 } |
136 |
136 |
137 // Lazy |
137 // Lazy |
138 { |
138 { |
139 hs.get(TestAccessMode.SET_RELEASE).invokeExact(recv, 1L); |
139 hs.get(TestAccessMode.SET_RELEASE).invokeExact(recv, 0x0123456789ABCDEFL); |
140 long x = (long) hs.get(TestAccessMode.GET_ACQUIRE).invokeExact(recv); |
140 long x = (long) hs.get(TestAccessMode.GET_ACQUIRE).invokeExact(recv); |
141 assertEquals(x, 1L, "setRelease long value"); |
141 assertEquals(x, 0x0123456789ABCDEFL, "setRelease long value"); |
142 } |
142 } |
143 |
143 |
144 // Opaque |
144 // Opaque |
145 { |
145 { |
146 hs.get(TestAccessMode.SET_OPAQUE).invokeExact(recv, 2L); |
146 hs.get(TestAccessMode.SET_OPAQUE).invokeExact(recv, 0xCAFEBABECAFEBABEL); |
147 long x = (long) hs.get(TestAccessMode.GET_OPAQUE).invokeExact(recv); |
147 long x = (long) hs.get(TestAccessMode.GET_OPAQUE).invokeExact(recv); |
148 assertEquals(x, 2L, "setOpaque long value"); |
148 assertEquals(x, 0xCAFEBABECAFEBABEL, "setOpaque long value"); |
149 } |
149 } |
150 |
150 |
151 hs.get(TestAccessMode.SET).invokeExact(recv, 1L); |
151 hs.get(TestAccessMode.SET).invokeExact(recv, 0x0123456789ABCDEFL); |
152 |
152 |
153 // Compare |
153 // Compare |
154 { |
154 { |
155 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(recv, 1L, 2L); |
155 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(recv, 0x0123456789ABCDEFL, 0xCAFEBABECAFEBABEL); |
156 assertEquals(r, true, "success compareAndSet long"); |
156 assertEquals(r, true, "success compareAndSet long"); |
157 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
157 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
158 assertEquals(x, 2L, "success compareAndSet long value"); |
158 assertEquals(x, 0xCAFEBABECAFEBABEL, "success compareAndSet long value"); |
159 } |
159 } |
160 |
160 |
161 { |
161 { |
162 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(recv, 1L, 3L); |
162 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(recv, 0x0123456789ABCDEFL, 0xDEADBEEFDEADBEEFL); |
163 assertEquals(r, false, "failing compareAndSet long"); |
163 assertEquals(r, false, "failing compareAndSet long"); |
164 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
164 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
165 assertEquals(x, 2L, "failing compareAndSet long value"); |
165 assertEquals(x, 0xCAFEBABECAFEBABEL, "failing compareAndSet long value"); |
166 } |
166 } |
167 |
167 |
168 { |
168 { |
169 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(recv, 2L, 1L); |
169 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(recv, 0xCAFEBABECAFEBABEL, 0x0123456789ABCDEFL); |
170 assertEquals(r, 2L, "success compareAndExchangeVolatile long"); |
170 assertEquals(r, 0xCAFEBABECAFEBABEL, "success compareAndExchangeVolatile long"); |
171 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
171 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
172 assertEquals(x, 1L, "success compareAndExchangeVolatile long value"); |
172 assertEquals(x, 0x0123456789ABCDEFL, "success compareAndExchangeVolatile long value"); |
173 } |
173 } |
174 |
174 |
175 { |
175 { |
176 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(recv, 2L, 3L); |
176 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(recv, 0xCAFEBABECAFEBABEL, 0xDEADBEEFDEADBEEFL); |
177 assertEquals(r, 1L, "failing compareAndExchangeVolatile long"); |
177 assertEquals(r, 0x0123456789ABCDEFL, "failing compareAndExchangeVolatile long"); |
178 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
178 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
179 assertEquals(x, 1L, "failing compareAndExchangeVolatile long value"); |
179 assertEquals(x, 0x0123456789ABCDEFL, "failing compareAndExchangeVolatile long value"); |
180 } |
180 } |
181 |
181 |
182 { |
182 { |
183 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(recv, 1L, 2L); |
183 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(recv, 0x0123456789ABCDEFL, 0xCAFEBABECAFEBABEL); |
184 assertEquals(r, 1L, "success compareAndExchangeAcquire long"); |
184 assertEquals(r, 0x0123456789ABCDEFL, "success compareAndExchangeAcquire long"); |
185 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
185 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
186 assertEquals(x, 2L, "success compareAndExchangeAcquire long value"); |
186 assertEquals(x, 0xCAFEBABECAFEBABEL, "success compareAndExchangeAcquire long value"); |
187 } |
187 } |
188 |
188 |
189 { |
189 { |
190 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(recv, 1L, 3L); |
190 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(recv, 0x0123456789ABCDEFL, 0xDEADBEEFDEADBEEFL); |
191 assertEquals(r, 2L, "failing compareAndExchangeAcquire long"); |
191 assertEquals(r, 0xCAFEBABECAFEBABEL, "failing compareAndExchangeAcquire long"); |
192 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
192 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
193 assertEquals(x, 2L, "failing compareAndExchangeAcquire long value"); |
193 assertEquals(x, 0xCAFEBABECAFEBABEL, "failing compareAndExchangeAcquire long value"); |
194 } |
194 } |
195 |
195 |
196 { |
196 { |
197 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(recv, 2L, 1L); |
197 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(recv, 0xCAFEBABECAFEBABEL, 0x0123456789ABCDEFL); |
198 assertEquals(r, 2L, "success compareAndExchangeRelease long"); |
198 assertEquals(r, 0xCAFEBABECAFEBABEL, "success compareAndExchangeRelease long"); |
199 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
199 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
200 assertEquals(x, 1L, "success compareAndExchangeRelease long value"); |
200 assertEquals(x, 0x0123456789ABCDEFL, "success compareAndExchangeRelease long value"); |
201 } |
201 } |
202 |
202 |
203 { |
203 { |
204 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(recv, 2L, 3L); |
204 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(recv, 0xCAFEBABECAFEBABEL, 0xDEADBEEFDEADBEEFL); |
205 assertEquals(r, 1L, "failing compareAndExchangeRelease long"); |
205 assertEquals(r, 0x0123456789ABCDEFL, "failing compareAndExchangeRelease long"); |
206 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
206 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
207 assertEquals(x, 1L, "failing compareAndExchangeRelease long value"); |
207 assertEquals(x, 0x0123456789ABCDEFL, "failing compareAndExchangeRelease long value"); |
208 } |
208 } |
209 |
209 |
210 { |
210 { |
211 boolean success = false; |
211 boolean success = false; |
212 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
212 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
213 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET).invokeExact(recv, 1L, 2L); |
213 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET).invokeExact(recv, 0x0123456789ABCDEFL, 0xCAFEBABECAFEBABEL); |
214 } |
214 } |
215 assertEquals(success, true, "weakCompareAndSet long"); |
215 assertEquals(success, true, "weakCompareAndSet long"); |
216 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
216 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
217 assertEquals(x, 2L, "weakCompareAndSet long value"); |
217 assertEquals(x, 0xCAFEBABECAFEBABEL, "weakCompareAndSet long value"); |
218 } |
218 } |
219 |
219 |
220 { |
220 { |
221 boolean success = false; |
221 boolean success = false; |
222 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
222 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
223 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_ACQUIRE).invokeExact(recv, 2L, 1L); |
223 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_ACQUIRE).invokeExact(recv, 0xCAFEBABECAFEBABEL, 0x0123456789ABCDEFL); |
224 } |
224 } |
225 assertEquals(success, true, "weakCompareAndSetAcquire long"); |
225 assertEquals(success, true, "weakCompareAndSetAcquire long"); |
226 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
226 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
227 assertEquals(x, 1L, "weakCompareAndSetAcquire long"); |
227 assertEquals(x, 0x0123456789ABCDEFL, "weakCompareAndSetAcquire long"); |
228 } |
228 } |
229 |
229 |
230 { |
230 { |
231 boolean success = false; |
231 boolean success = false; |
232 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
232 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
233 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_RELEASE).invokeExact(recv, 1L, 2L); |
233 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_RELEASE).invokeExact(recv, 0x0123456789ABCDEFL, 0xCAFEBABECAFEBABEL); |
234 } |
234 } |
235 assertEquals(success, true, "weakCompareAndSetRelease long"); |
235 assertEquals(success, true, "weakCompareAndSetRelease long"); |
236 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
236 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
237 assertEquals(x, 2L, "weakCompareAndSetRelease long"); |
237 assertEquals(x, 0xCAFEBABECAFEBABEL, "weakCompareAndSetRelease long"); |
238 } |
238 } |
239 |
239 |
240 { |
240 { |
241 boolean success = false; |
241 boolean success = false; |
242 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
242 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
243 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_VOLATILE).invokeExact(recv, 2L, 1L); |
243 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_VOLATILE).invokeExact(recv, 0xCAFEBABECAFEBABEL, 0x0123456789ABCDEFL); |
244 } |
244 } |
245 assertEquals(success, true, "weakCompareAndSetVolatile long"); |
245 assertEquals(success, true, "weakCompareAndSetVolatile long"); |
246 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
246 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
247 assertEquals(x, 1L, "weakCompareAndSetVolatile long"); |
247 assertEquals(x, 0x0123456789ABCDEFL, "weakCompareAndSetVolatile long"); |
248 } |
248 } |
249 |
249 |
250 // Compare set and get |
250 // Compare set and get |
251 { |
251 { |
252 long o = (long) hs.get(TestAccessMode.GET_AND_SET).invokeExact(recv, 2L); |
252 long o = (long) hs.get(TestAccessMode.GET_AND_SET).invokeExact(recv, 0xCAFEBABECAFEBABEL); |
253 assertEquals(o, 1L, "getAndSet long"); |
253 assertEquals(o, 0x0123456789ABCDEFL, "getAndSet long"); |
254 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
254 long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv); |
255 assertEquals(x, 2L, "getAndSet long value"); |
255 assertEquals(x, 0xCAFEBABECAFEBABEL, "getAndSet long value"); |
256 } |
256 } |
257 |
257 |
258 hs.get(TestAccessMode.SET).invokeExact(recv, 1L); |
258 hs.get(TestAccessMode.SET).invokeExact(recv, 0x0123456789ABCDEFL); |
259 |
259 |
260 // get and add, add and get |
260 // get and add, add and get |
261 { |
261 { |
262 long o = (long) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(recv, 3L); |
262 long o = (long) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(recv, 0xDEADBEEFDEADBEEFL); |
263 assertEquals(o, 1L, "getAndAdd long"); |
263 assertEquals(o, 0x0123456789ABCDEFL, "getAndAdd long"); |
264 long c = (long) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(recv, 3L); |
264 long c = (long) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(recv, 0xDEADBEEFDEADBEEFL); |
265 assertEquals(c, 1L + 3L + 3L, "getAndAdd long value"); |
265 assertEquals(c, (long)(0x0123456789ABCDEFL + 0xDEADBEEFDEADBEEFL + 0xDEADBEEFDEADBEEFL), "getAndAdd long value"); |
266 } |
266 } |
267 } |
267 } |
268 |
268 |
269 static void testInstanceFieldUnsupported(VarHandleTestMethodHandleAccessLong recv, Handles hs) throws Throwable { |
269 static void testInstanceFieldUnsupported(VarHandleTestMethodHandleAccessLong recv, Handles hs) throws Throwable { |
270 |
270 |
272 |
272 |
273 |
273 |
274 static void testStaticField(Handles hs) throws Throwable { |
274 static void testStaticField(Handles hs) throws Throwable { |
275 // Plain |
275 // Plain |
276 { |
276 { |
277 hs.get(TestAccessMode.SET).invokeExact(1L); |
277 hs.get(TestAccessMode.SET).invokeExact(0x0123456789ABCDEFL); |
278 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
278 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
279 assertEquals(x, 1L, "set long value"); |
279 assertEquals(x, 0x0123456789ABCDEFL, "set long value"); |
280 } |
280 } |
281 |
281 |
282 |
282 |
283 // Volatile |
283 // Volatile |
284 { |
284 { |
285 hs.get(TestAccessMode.SET_VOLATILE).invokeExact(2L); |
285 hs.get(TestAccessMode.SET_VOLATILE).invokeExact(0xCAFEBABECAFEBABEL); |
286 long x = (long) hs.get(TestAccessMode.GET_VOLATILE).invokeExact(); |
286 long x = (long) hs.get(TestAccessMode.GET_VOLATILE).invokeExact(); |
287 assertEquals(x, 2L, "setVolatile long value"); |
287 assertEquals(x, 0xCAFEBABECAFEBABEL, "setVolatile long value"); |
288 } |
288 } |
289 |
289 |
290 // Lazy |
290 // Lazy |
291 { |
291 { |
292 hs.get(TestAccessMode.SET_RELEASE).invokeExact(1L); |
292 hs.get(TestAccessMode.SET_RELEASE).invokeExact(0x0123456789ABCDEFL); |
293 long x = (long) hs.get(TestAccessMode.GET_ACQUIRE).invokeExact(); |
293 long x = (long) hs.get(TestAccessMode.GET_ACQUIRE).invokeExact(); |
294 assertEquals(x, 1L, "setRelease long value"); |
294 assertEquals(x, 0x0123456789ABCDEFL, "setRelease long value"); |
295 } |
295 } |
296 |
296 |
297 // Opaque |
297 // Opaque |
298 { |
298 { |
299 hs.get(TestAccessMode.SET_OPAQUE).invokeExact(2L); |
299 hs.get(TestAccessMode.SET_OPAQUE).invokeExact(0xCAFEBABECAFEBABEL); |
300 long x = (long) hs.get(TestAccessMode.GET_OPAQUE).invokeExact(); |
300 long x = (long) hs.get(TestAccessMode.GET_OPAQUE).invokeExact(); |
301 assertEquals(x, 2L, "setOpaque long value"); |
301 assertEquals(x, 0xCAFEBABECAFEBABEL, "setOpaque long value"); |
302 } |
302 } |
303 |
303 |
304 hs.get(TestAccessMode.SET).invokeExact(1L); |
304 hs.get(TestAccessMode.SET).invokeExact(0x0123456789ABCDEFL); |
305 |
305 |
306 // Compare |
306 // Compare |
307 { |
307 { |
308 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(1L, 2L); |
308 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(0x0123456789ABCDEFL, 0xCAFEBABECAFEBABEL); |
309 assertEquals(r, true, "success compareAndSet long"); |
309 assertEquals(r, true, "success compareAndSet long"); |
310 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
310 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
311 assertEquals(x, 2L, "success compareAndSet long value"); |
311 assertEquals(x, 0xCAFEBABECAFEBABEL, "success compareAndSet long value"); |
312 } |
312 } |
313 |
313 |
314 { |
314 { |
315 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(1L, 3L); |
315 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(0x0123456789ABCDEFL, 0xDEADBEEFDEADBEEFL); |
316 assertEquals(r, false, "failing compareAndSet long"); |
316 assertEquals(r, false, "failing compareAndSet long"); |
317 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
317 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
318 assertEquals(x, 2L, "failing compareAndSet long value"); |
318 assertEquals(x, 0xCAFEBABECAFEBABEL, "failing compareAndSet long value"); |
319 } |
319 } |
320 |
320 |
321 { |
321 { |
322 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(2L, 1L); |
322 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(0xCAFEBABECAFEBABEL, 0x0123456789ABCDEFL); |
323 assertEquals(r, 2L, "success compareAndExchangeVolatile long"); |
323 assertEquals(r, 0xCAFEBABECAFEBABEL, "success compareAndExchangeVolatile long"); |
324 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
324 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
325 assertEquals(x, 1L, "success compareAndExchangeVolatile long value"); |
325 assertEquals(x, 0x0123456789ABCDEFL, "success compareAndExchangeVolatile long value"); |
326 } |
326 } |
327 |
327 |
328 { |
328 { |
329 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(2L, 3L); |
329 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(0xCAFEBABECAFEBABEL, 0xDEADBEEFDEADBEEFL); |
330 assertEquals(r, 1L, "failing compareAndExchangeVolatile long"); |
330 assertEquals(r, 0x0123456789ABCDEFL, "failing compareAndExchangeVolatile long"); |
331 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
331 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
332 assertEquals(x, 1L, "failing compareAndExchangeVolatile long value"); |
332 assertEquals(x, 0x0123456789ABCDEFL, "failing compareAndExchangeVolatile long value"); |
333 } |
333 } |
334 |
334 |
335 { |
335 { |
336 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(1L, 2L); |
336 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(0x0123456789ABCDEFL, 0xCAFEBABECAFEBABEL); |
337 assertEquals(r, 1L, "success compareAndExchangeAcquire long"); |
337 assertEquals(r, 0x0123456789ABCDEFL, "success compareAndExchangeAcquire long"); |
338 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
338 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
339 assertEquals(x, 2L, "success compareAndExchangeAcquire long value"); |
339 assertEquals(x, 0xCAFEBABECAFEBABEL, "success compareAndExchangeAcquire long value"); |
340 } |
340 } |
341 |
341 |
342 { |
342 { |
343 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(1L, 3L); |
343 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(0x0123456789ABCDEFL, 0xDEADBEEFDEADBEEFL); |
344 assertEquals(r, 2L, "failing compareAndExchangeAcquire long"); |
344 assertEquals(r, 0xCAFEBABECAFEBABEL, "failing compareAndExchangeAcquire long"); |
345 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
345 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
346 assertEquals(x, 2L, "failing compareAndExchangeAcquire long value"); |
346 assertEquals(x, 0xCAFEBABECAFEBABEL, "failing compareAndExchangeAcquire long value"); |
347 } |
347 } |
348 |
348 |
349 { |
349 { |
350 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(2L, 1L); |
350 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(0xCAFEBABECAFEBABEL, 0x0123456789ABCDEFL); |
351 assertEquals(r, 2L, "success compareAndExchangeRelease long"); |
351 assertEquals(r, 0xCAFEBABECAFEBABEL, "success compareAndExchangeRelease long"); |
352 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
352 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
353 assertEquals(x, 1L, "success compareAndExchangeRelease long value"); |
353 assertEquals(x, 0x0123456789ABCDEFL, "success compareAndExchangeRelease long value"); |
354 } |
354 } |
355 |
355 |
356 { |
356 { |
357 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(2L, 3L); |
357 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(0xCAFEBABECAFEBABEL, 0xDEADBEEFDEADBEEFL); |
358 assertEquals(r, 1L, "failing compareAndExchangeRelease long"); |
358 assertEquals(r, 0x0123456789ABCDEFL, "failing compareAndExchangeRelease long"); |
359 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
359 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
360 assertEquals(x, 1L, "failing compareAndExchangeRelease long value"); |
360 assertEquals(x, 0x0123456789ABCDEFL, "failing compareAndExchangeRelease long value"); |
361 } |
361 } |
362 |
362 |
363 { |
363 { |
364 boolean success = false; |
364 boolean success = false; |
365 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
365 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
366 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET).invokeExact(1L, 2L); |
366 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET).invokeExact(0x0123456789ABCDEFL, 0xCAFEBABECAFEBABEL); |
367 } |
367 } |
368 assertEquals(success, true, "weakCompareAndSet long"); |
368 assertEquals(success, true, "weakCompareAndSet long"); |
369 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
369 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
370 assertEquals(x, 2L, "weakCompareAndSet long value"); |
370 assertEquals(x, 0xCAFEBABECAFEBABEL, "weakCompareAndSet long value"); |
371 } |
371 } |
372 |
372 |
373 { |
373 { |
374 boolean success = false; |
374 boolean success = false; |
375 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
375 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
376 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_ACQUIRE).invokeExact(2L, 1L); |
376 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_ACQUIRE).invokeExact(0xCAFEBABECAFEBABEL, 0x0123456789ABCDEFL); |
377 } |
377 } |
378 assertEquals(success, true, "weakCompareAndSetAcquire long"); |
378 assertEquals(success, true, "weakCompareAndSetAcquire long"); |
379 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
379 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
380 assertEquals(x, 1L, "weakCompareAndSetAcquire long"); |
380 assertEquals(x, 0x0123456789ABCDEFL, "weakCompareAndSetAcquire long"); |
381 } |
381 } |
382 |
382 |
383 { |
383 { |
384 boolean success = false; |
384 boolean success = false; |
385 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
385 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
386 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_RELEASE).invokeExact(1L, 2L); |
386 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_RELEASE).invokeExact(0x0123456789ABCDEFL, 0xCAFEBABECAFEBABEL); |
387 } |
387 } |
388 assertEquals(success, true, "weakCompareAndSetRelease long"); |
388 assertEquals(success, true, "weakCompareAndSetRelease long"); |
389 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
389 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
390 assertEquals(x, 2L, "weakCompareAndSetRelease long"); |
390 assertEquals(x, 0xCAFEBABECAFEBABEL, "weakCompareAndSetRelease long"); |
391 } |
391 } |
392 |
392 |
393 { |
393 { |
394 boolean success = false; |
394 boolean success = false; |
395 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
395 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
396 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_VOLATILE).invokeExact(2L, 1L); |
396 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_VOLATILE).invokeExact(0xCAFEBABECAFEBABEL, 0x0123456789ABCDEFL); |
397 } |
397 } |
398 assertEquals(success, true, "weakCompareAndSetVolatile long"); |
398 assertEquals(success, true, "weakCompareAndSetVolatile long"); |
399 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
399 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
400 assertEquals(x, 1L, "weakCompareAndSetVolatile long"); |
400 assertEquals(x, 0x0123456789ABCDEFL, "weakCompareAndSetVolatile long"); |
401 } |
401 } |
402 |
402 |
403 // Compare set and get |
403 // Compare set and get |
404 { |
404 { |
405 long o = (long) hs.get(TestAccessMode.GET_AND_SET).invokeExact( 2L); |
405 long o = (long) hs.get(TestAccessMode.GET_AND_SET).invokeExact( 0xCAFEBABECAFEBABEL); |
406 assertEquals(o, 1L, "getAndSet long"); |
406 assertEquals(o, 0x0123456789ABCDEFL, "getAndSet long"); |
407 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
407 long x = (long) hs.get(TestAccessMode.GET).invokeExact(); |
408 assertEquals(x, 2L, "getAndSet long value"); |
408 assertEquals(x, 0xCAFEBABECAFEBABEL, "getAndSet long value"); |
409 } |
409 } |
410 |
410 |
411 hs.get(TestAccessMode.SET).invokeExact(1L); |
411 hs.get(TestAccessMode.SET).invokeExact(0x0123456789ABCDEFL); |
412 |
412 |
413 // get and add, add and get |
413 // get and add, add and get |
414 { |
414 { |
415 long o = (long) hs.get(TestAccessMode.GET_AND_ADD).invokeExact( 3L); |
415 long o = (long) hs.get(TestAccessMode.GET_AND_ADD).invokeExact( 0xDEADBEEFDEADBEEFL); |
416 assertEquals(o, 1L, "getAndAdd long"); |
416 assertEquals(o, 0x0123456789ABCDEFL, "getAndAdd long"); |
417 long c = (long) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(3L); |
417 long c = (long) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(0xDEADBEEFDEADBEEFL); |
418 assertEquals(c, 1L + 3L + 3L, "getAndAdd long value"); |
418 assertEquals(c, (long)(0x0123456789ABCDEFL + 0xDEADBEEFDEADBEEFL + 0xDEADBEEFDEADBEEFL), "getAndAdd long value"); |
419 } |
419 } |
420 } |
420 } |
421 |
421 |
422 static void testStaticFieldUnsupported(Handles hs) throws Throwable { |
422 static void testStaticFieldUnsupported(Handles hs) throws Throwable { |
423 |
423 |
428 long[] array = new long[10]; |
428 long[] array = new long[10]; |
429 |
429 |
430 for (int i = 0; i < array.length; i++) { |
430 for (int i = 0; i < array.length; i++) { |
431 // Plain |
431 // Plain |
432 { |
432 { |
433 hs.get(TestAccessMode.SET).invokeExact(array, i, 1L); |
433 hs.get(TestAccessMode.SET).invokeExact(array, i, 0x0123456789ABCDEFL); |
434 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
434 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
435 assertEquals(x, 1L, "get long value"); |
435 assertEquals(x, 0x0123456789ABCDEFL, "get long value"); |
436 } |
436 } |
437 |
437 |
438 |
438 |
439 // Volatile |
439 // Volatile |
440 { |
440 { |
441 hs.get(TestAccessMode.SET_VOLATILE).invokeExact(array, i, 2L); |
441 hs.get(TestAccessMode.SET_VOLATILE).invokeExact(array, i, 0xCAFEBABECAFEBABEL); |
442 long x = (long) hs.get(TestAccessMode.GET_VOLATILE).invokeExact(array, i); |
442 long x = (long) hs.get(TestAccessMode.GET_VOLATILE).invokeExact(array, i); |
443 assertEquals(x, 2L, "setVolatile long value"); |
443 assertEquals(x, 0xCAFEBABECAFEBABEL, "setVolatile long value"); |
444 } |
444 } |
445 |
445 |
446 // Lazy |
446 // Lazy |
447 { |
447 { |
448 hs.get(TestAccessMode.SET_RELEASE).invokeExact(array, i, 1L); |
448 hs.get(TestAccessMode.SET_RELEASE).invokeExact(array, i, 0x0123456789ABCDEFL); |
449 long x = (long) hs.get(TestAccessMode.GET_ACQUIRE).invokeExact(array, i); |
449 long x = (long) hs.get(TestAccessMode.GET_ACQUIRE).invokeExact(array, i); |
450 assertEquals(x, 1L, "setRelease long value"); |
450 assertEquals(x, 0x0123456789ABCDEFL, "setRelease long value"); |
451 } |
451 } |
452 |
452 |
453 // Opaque |
453 // Opaque |
454 { |
454 { |
455 hs.get(TestAccessMode.SET_OPAQUE).invokeExact(array, i, 2L); |
455 hs.get(TestAccessMode.SET_OPAQUE).invokeExact(array, i, 0xCAFEBABECAFEBABEL); |
456 long x = (long) hs.get(TestAccessMode.GET_OPAQUE).invokeExact(array, i); |
456 long x = (long) hs.get(TestAccessMode.GET_OPAQUE).invokeExact(array, i); |
457 assertEquals(x, 2L, "setOpaque long value"); |
457 assertEquals(x, 0xCAFEBABECAFEBABEL, "setOpaque long value"); |
458 } |
458 } |
459 |
459 |
460 hs.get(TestAccessMode.SET).invokeExact(array, i, 1L); |
460 hs.get(TestAccessMode.SET).invokeExact(array, i, 0x0123456789ABCDEFL); |
461 |
461 |
462 // Compare |
462 // Compare |
463 { |
463 { |
464 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(array, i, 1L, 2L); |
464 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(array, i, 0x0123456789ABCDEFL, 0xCAFEBABECAFEBABEL); |
465 assertEquals(r, true, "success compareAndSet long"); |
465 assertEquals(r, true, "success compareAndSet long"); |
466 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
466 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
467 assertEquals(x, 2L, "success compareAndSet long value"); |
467 assertEquals(x, 0xCAFEBABECAFEBABEL, "success compareAndSet long value"); |
468 } |
468 } |
469 |
469 |
470 { |
470 { |
471 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(array, i, 1L, 3L); |
471 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(array, i, 0x0123456789ABCDEFL, 0xDEADBEEFDEADBEEFL); |
472 assertEquals(r, false, "failing compareAndSet long"); |
472 assertEquals(r, false, "failing compareAndSet long"); |
473 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
473 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
474 assertEquals(x, 2L, "failing compareAndSet long value"); |
474 assertEquals(x, 0xCAFEBABECAFEBABEL, "failing compareAndSet long value"); |
475 } |
475 } |
476 |
476 |
477 { |
477 { |
478 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(array, i, 2L, 1L); |
478 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(array, i, 0xCAFEBABECAFEBABEL, 0x0123456789ABCDEFL); |
479 assertEquals(r, 2L, "success compareAndExchangeVolatile long"); |
479 assertEquals(r, 0xCAFEBABECAFEBABEL, "success compareAndExchangeVolatile long"); |
480 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
480 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
481 assertEquals(x, 1L, "success compareAndExchangeVolatile long value"); |
481 assertEquals(x, 0x0123456789ABCDEFL, "success compareAndExchangeVolatile long value"); |
482 } |
482 } |
483 |
483 |
484 { |
484 { |
485 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(array, i, 2L, 3L); |
485 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(array, i, 0xCAFEBABECAFEBABEL, 0xDEADBEEFDEADBEEFL); |
486 assertEquals(r, 1L, "failing compareAndExchangeVolatile long"); |
486 assertEquals(r, 0x0123456789ABCDEFL, "failing compareAndExchangeVolatile long"); |
487 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
487 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
488 assertEquals(x, 1L, "failing compareAndExchangeVolatile long value"); |
488 assertEquals(x, 0x0123456789ABCDEFL, "failing compareAndExchangeVolatile long value"); |
489 } |
489 } |
490 |
490 |
491 { |
491 { |
492 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(array, i, 1L, 2L); |
492 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(array, i, 0x0123456789ABCDEFL, 0xCAFEBABECAFEBABEL); |
493 assertEquals(r, 1L, "success compareAndExchangeAcquire long"); |
493 assertEquals(r, 0x0123456789ABCDEFL, "success compareAndExchangeAcquire long"); |
494 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
494 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
495 assertEquals(x, 2L, "success compareAndExchangeAcquire long value"); |
495 assertEquals(x, 0xCAFEBABECAFEBABEL, "success compareAndExchangeAcquire long value"); |
496 } |
496 } |
497 |
497 |
498 { |
498 { |
499 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(array, i, 1L, 3L); |
499 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(array, i, 0x0123456789ABCDEFL, 0xDEADBEEFDEADBEEFL); |
500 assertEquals(r, 2L, "failing compareAndExchangeAcquire long"); |
500 assertEquals(r, 0xCAFEBABECAFEBABEL, "failing compareAndExchangeAcquire long"); |
501 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
501 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
502 assertEquals(x, 2L, "failing compareAndExchangeAcquire long value"); |
502 assertEquals(x, 0xCAFEBABECAFEBABEL, "failing compareAndExchangeAcquire long value"); |
503 } |
503 } |
504 |
504 |
505 { |
505 { |
506 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(array, i, 2L, 1L); |
506 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(array, i, 0xCAFEBABECAFEBABEL, 0x0123456789ABCDEFL); |
507 assertEquals(r, 2L, "success compareAndExchangeRelease long"); |
507 assertEquals(r, 0xCAFEBABECAFEBABEL, "success compareAndExchangeRelease long"); |
508 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
508 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
509 assertEquals(x, 1L, "success compareAndExchangeRelease long value"); |
509 assertEquals(x, 0x0123456789ABCDEFL, "success compareAndExchangeRelease long value"); |
510 } |
510 } |
511 |
511 |
512 { |
512 { |
513 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(array, i, 2L, 3L); |
513 long r = (long) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(array, i, 0xCAFEBABECAFEBABEL, 0xDEADBEEFDEADBEEFL); |
514 assertEquals(r, 1L, "failing compareAndExchangeRelease long"); |
514 assertEquals(r, 0x0123456789ABCDEFL, "failing compareAndExchangeRelease long"); |
515 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
515 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
516 assertEquals(x, 1L, "failing compareAndExchangeRelease long value"); |
516 assertEquals(x, 0x0123456789ABCDEFL, "failing compareAndExchangeRelease long value"); |
517 } |
517 } |
518 |
518 |
519 { |
519 { |
520 boolean success = false; |
520 boolean success = false; |
521 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
521 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
522 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET).invokeExact(array, i, 1L, 2L); |
522 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET).invokeExact(array, i, 0x0123456789ABCDEFL, 0xCAFEBABECAFEBABEL); |
523 } |
523 } |
524 assertEquals(success, true, "weakCompareAndSet long"); |
524 assertEquals(success, true, "weakCompareAndSet long"); |
525 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
525 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
526 assertEquals(x, 2L, "weakCompareAndSet long value"); |
526 assertEquals(x, 0xCAFEBABECAFEBABEL, "weakCompareAndSet long value"); |
527 } |
527 } |
528 |
528 |
529 { |
529 { |
530 boolean success = false; |
530 boolean success = false; |
531 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
531 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
532 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_ACQUIRE).invokeExact(array, i, 2L, 1L); |
532 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_ACQUIRE).invokeExact(array, i, 0xCAFEBABECAFEBABEL, 0x0123456789ABCDEFL); |
533 } |
533 } |
534 assertEquals(success, true, "weakCompareAndSetAcquire long"); |
534 assertEquals(success, true, "weakCompareAndSetAcquire long"); |
535 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
535 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
536 assertEquals(x, 1L, "weakCompareAndSetAcquire long"); |
536 assertEquals(x, 0x0123456789ABCDEFL, "weakCompareAndSetAcquire long"); |
537 } |
537 } |
538 |
538 |
539 { |
539 { |
540 boolean success = false; |
540 boolean success = false; |
541 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
541 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
542 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_RELEASE).invokeExact(array, i, 1L, 2L); |
542 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_RELEASE).invokeExact(array, i, 0x0123456789ABCDEFL, 0xCAFEBABECAFEBABEL); |
543 } |
543 } |
544 assertEquals(success, true, "weakCompareAndSetRelease long"); |
544 assertEquals(success, true, "weakCompareAndSetRelease long"); |
545 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
545 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
546 assertEquals(x, 2L, "weakCompareAndSetRelease long"); |
546 assertEquals(x, 0xCAFEBABECAFEBABEL, "weakCompareAndSetRelease long"); |
547 } |
547 } |
548 |
548 |
549 { |
549 { |
550 boolean success = false; |
550 boolean success = false; |
551 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
551 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
552 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_VOLATILE).invokeExact(array, i, 2L, 1L); |
552 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_VOLATILE).invokeExact(array, i, 0xCAFEBABECAFEBABEL, 0x0123456789ABCDEFL); |
553 } |
553 } |
554 assertEquals(success, true, "weakCompareAndSetVolatile long"); |
554 assertEquals(success, true, "weakCompareAndSetVolatile long"); |
555 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
555 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
556 assertEquals(x, 1L, "weakCompareAndSetVolatile long"); |
556 assertEquals(x, 0x0123456789ABCDEFL, "weakCompareAndSetVolatile long"); |
557 } |
557 } |
558 |
558 |
559 // Compare set and get |
559 // Compare set and get |
560 { |
560 { |
561 long o = (long) hs.get(TestAccessMode.GET_AND_SET).invokeExact(array, i, 2L); |
561 long o = (long) hs.get(TestAccessMode.GET_AND_SET).invokeExact(array, i, 0xCAFEBABECAFEBABEL); |
562 assertEquals(o, 1L, "getAndSet long"); |
562 assertEquals(o, 0x0123456789ABCDEFL, "getAndSet long"); |
563 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
563 long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i); |
564 assertEquals(x, 2L, "getAndSet long value"); |
564 assertEquals(x, 0xCAFEBABECAFEBABEL, "getAndSet long value"); |
565 } |
565 } |
566 |
566 |
567 hs.get(TestAccessMode.SET).invokeExact(array, i, 1L); |
567 hs.get(TestAccessMode.SET).invokeExact(array, i, 0x0123456789ABCDEFL); |
568 |
568 |
569 // get and add, add and get |
569 // get and add, add and get |
570 { |
570 { |
571 long o = (long) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(array, i, 3L); |
571 long o = (long) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(array, i, 0xDEADBEEFDEADBEEFL); |
572 assertEquals(o, 1L, "getAndAdd long"); |
572 assertEquals(o, 0x0123456789ABCDEFL, "getAndAdd long"); |
573 long c = (long) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(array, i, 3L); |
573 long c = (long) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(array, i, 0xDEADBEEFDEADBEEFL); |
574 assertEquals(c, 1L + 3L + 3L, "getAndAdd long value"); |
574 assertEquals(c, (long)(0x0123456789ABCDEFL + 0xDEADBEEFDEADBEEFL + 0xDEADBEEFDEADBEEFL), "getAndAdd long value"); |
575 } |
575 } |
576 } |
576 } |
577 } |
577 } |
578 |
578 |
579 static void testArrayUnsupported(Handles hs) throws Throwable { |
579 static void testArrayUnsupported(Handles hs) throws Throwable { |