196 |
196 |
197 UNSAFE.putChar(base, offset, '\u0123'); |
197 UNSAFE.putChar(base, offset, '\u0123'); |
198 |
198 |
199 // Compare |
199 // Compare |
200 { |
200 { |
201 boolean r = UNSAFE.compareAndSwapChar(base, offset, '\u0123', '\u4567'); |
201 boolean r = UNSAFE.compareAndSetChar(base, offset, '\u0123', '\u4567'); |
202 assertEquals(r, true, "success compareAndSwap char"); |
202 assertEquals(r, true, "success compareAndSet char"); |
203 char x = UNSAFE.getChar(base, offset); |
203 char x = UNSAFE.getChar(base, offset); |
204 assertEquals(x, '\u4567', "success compareAndSwap char value"); |
204 assertEquals(x, '\u4567', "success compareAndSet char value"); |
205 } |
205 } |
206 |
206 |
207 { |
207 { |
208 boolean r = UNSAFE.compareAndSwapChar(base, offset, '\u0123', '\u89AB'); |
208 boolean r = UNSAFE.compareAndSetChar(base, offset, '\u0123', '\u89AB'); |
209 assertEquals(r, false, "failing compareAndSwap char"); |
209 assertEquals(r, false, "failing compareAndSet char"); |
210 char x = UNSAFE.getChar(base, offset); |
210 char x = UNSAFE.getChar(base, offset); |
211 assertEquals(x, '\u4567', "failing compareAndSwap char value"); |
211 assertEquals(x, '\u4567', "failing compareAndSet char value"); |
212 } |
212 } |
213 |
213 |
214 // Advanced compare |
214 // Advanced compare |
215 { |
215 { |
216 char r = UNSAFE.compareAndExchangeCharVolatile(base, offset, '\u4567', '\u0123'); |
216 char r = UNSAFE.compareAndExchangeChar(base, offset, '\u4567', '\u0123'); |
217 assertEquals(r, '\u4567', "success compareAndExchangeVolatile char"); |
217 assertEquals(r, '\u4567', "success compareAndExchange char"); |
218 char x = UNSAFE.getChar(base, offset); |
218 char x = UNSAFE.getChar(base, offset); |
219 assertEquals(x, '\u0123', "success compareAndExchangeVolatile char value"); |
219 assertEquals(x, '\u0123', "success compareAndExchange char value"); |
220 } |
220 } |
221 |
221 |
222 { |
222 { |
223 char r = UNSAFE.compareAndExchangeCharVolatile(base, offset, '\u4567', '\u89AB'); |
223 char r = UNSAFE.compareAndExchangeChar(base, offset, '\u4567', '\u89AB'); |
224 assertEquals(r, '\u0123', "failing compareAndExchangeVolatile char"); |
224 assertEquals(r, '\u0123', "failing compareAndExchange char"); |
225 char x = UNSAFE.getChar(base, offset); |
225 char x = UNSAFE.getChar(base, offset); |
226 assertEquals(x, '\u0123', "failing compareAndExchangeVolatile char value"); |
226 assertEquals(x, '\u0123', "failing compareAndExchange char value"); |
227 } |
227 } |
228 |
228 |
229 { |
229 { |
230 char r = UNSAFE.compareAndExchangeCharAcquire(base, offset, '\u0123', '\u4567'); |
230 char r = UNSAFE.compareAndExchangeCharAcquire(base, offset, '\u0123', '\u4567'); |
231 assertEquals(r, '\u0123', "success compareAndExchangeAcquire char"); |
231 assertEquals(r, '\u0123', "success compareAndExchangeAcquire char"); |
255 } |
255 } |
256 |
256 |
257 { |
257 { |
258 boolean success = false; |
258 boolean success = false; |
259 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
259 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
260 success = UNSAFE.weakCompareAndSwapChar(base, offset, '\u0123', '\u4567'); |
260 success = UNSAFE.weakCompareAndSetCharPlain(base, offset, '\u0123', '\u4567'); |
261 } |
261 } |
262 assertEquals(success, true, "weakCompareAndSwap char"); |
262 assertEquals(success, true, "weakCompareAndSetPlain char"); |
263 char x = UNSAFE.getChar(base, offset); |
263 char x = UNSAFE.getChar(base, offset); |
264 assertEquals(x, '\u4567', "weakCompareAndSwap char value"); |
264 assertEquals(x, '\u4567', "weakCompareAndSetPlain char value"); |
265 } |
265 } |
266 |
266 |
267 { |
267 { |
268 boolean success = false; |
268 boolean success = false; |
269 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
269 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
270 success = UNSAFE.weakCompareAndSwapCharAcquire(base, offset, '\u4567', '\u0123'); |
270 success = UNSAFE.weakCompareAndSetCharAcquire(base, offset, '\u4567', '\u0123'); |
271 } |
271 } |
272 assertEquals(success, true, "weakCompareAndSwapAcquire char"); |
272 assertEquals(success, true, "weakCompareAndSetAcquire char"); |
273 char x = UNSAFE.getChar(base, offset); |
273 char x = UNSAFE.getChar(base, offset); |
274 assertEquals(x, '\u0123', "weakCompareAndSwapAcquire char"); |
274 assertEquals(x, '\u0123', "weakCompareAndSetAcquire char"); |
275 } |
275 } |
276 |
276 |
277 { |
277 { |
278 boolean success = false; |
278 boolean success = false; |
279 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
279 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
280 success = UNSAFE.weakCompareAndSwapCharRelease(base, offset, '\u0123', '\u4567'); |
280 success = UNSAFE.weakCompareAndSetCharRelease(base, offset, '\u0123', '\u4567'); |
281 } |
281 } |
282 assertEquals(success, true, "weakCompareAndSwapRelease char"); |
282 assertEquals(success, true, "weakCompareAndSetRelease char"); |
283 char x = UNSAFE.getChar(base, offset); |
283 char x = UNSAFE.getChar(base, offset); |
284 assertEquals(x, '\u4567', "weakCompareAndSwapRelease char"); |
284 assertEquals(x, '\u4567', "weakCompareAndSetRelease char"); |
285 } |
285 } |
286 |
286 |
287 { |
287 { |
288 boolean success = false; |
288 boolean success = false; |
289 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
289 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
290 success = UNSAFE.weakCompareAndSwapCharVolatile(base, offset, '\u4567', '\u0123'); |
290 success = UNSAFE.weakCompareAndSetChar(base, offset, '\u4567', '\u0123'); |
291 } |
291 } |
292 assertEquals(success, true, "weakCompareAndSwapVolatile char"); |
292 assertEquals(success, true, "weakCompareAndSet char"); |
293 char x = UNSAFE.getChar(base, offset); |
293 char x = UNSAFE.getChar(base, offset); |
294 assertEquals(x, '\u0123', "weakCompareAndSwapVolatile char"); |
294 assertEquals(x, '\u0123', "weakCompareAndSet char"); |
295 } |
295 } |
296 |
296 |
297 UNSAFE.putChar(base, offset, '\u4567'); |
297 UNSAFE.putChar(base, offset, '\u4567'); |
298 |
298 |
299 // Compare set and get |
299 // Compare set and get |