149 |
149 |
150 UNSAFE.putObject(base, offset, "foo"); |
150 UNSAFE.putObject(base, offset, "foo"); |
151 |
151 |
152 // Compare |
152 // Compare |
153 { |
153 { |
154 boolean r = UNSAFE.compareAndSwapObject(base, offset, "foo", "bar"); |
154 boolean r = UNSAFE.compareAndSetObject(base, offset, "foo", "bar"); |
155 assertEquals(r, true, "success compareAndSwap Object"); |
155 assertEquals(r, true, "success compareAndSet Object"); |
156 Object x = UNSAFE.getObject(base, offset); |
156 Object x = UNSAFE.getObject(base, offset); |
157 assertEquals(x, "bar", "success compareAndSwap Object value"); |
157 assertEquals(x, "bar", "success compareAndSet Object value"); |
158 } |
158 } |
159 |
159 |
160 { |
160 { |
161 boolean r = UNSAFE.compareAndSwapObject(base, offset, "foo", "baz"); |
161 boolean r = UNSAFE.compareAndSetObject(base, offset, "foo", "baz"); |
162 assertEquals(r, false, "failing compareAndSwap Object"); |
162 assertEquals(r, false, "failing compareAndSet Object"); |
163 Object x = UNSAFE.getObject(base, offset); |
163 Object x = UNSAFE.getObject(base, offset); |
164 assertEquals(x, "bar", "failing compareAndSwap Object value"); |
164 assertEquals(x, "bar", "failing compareAndSet Object value"); |
165 } |
165 } |
166 |
166 |
167 // Advanced compare |
167 // Advanced compare |
168 { |
168 { |
169 Object r = UNSAFE.compareAndExchangeObjectVolatile(base, offset, "bar", "foo"); |
169 Object r = UNSAFE.compareAndExchangeObject(base, offset, "bar", "foo"); |
170 assertEquals(r, "bar", "success compareAndExchangeVolatile Object"); |
170 assertEquals(r, "bar", "success compareAndExchange Object"); |
171 Object x = UNSAFE.getObject(base, offset); |
171 Object x = UNSAFE.getObject(base, offset); |
172 assertEquals(x, "foo", "success compareAndExchangeVolatile Object value"); |
172 assertEquals(x, "foo", "success compareAndExchange Object value"); |
173 } |
173 } |
174 |
174 |
175 { |
175 { |
176 Object r = UNSAFE.compareAndExchangeObjectVolatile(base, offset, "bar", "baz"); |
176 Object r = UNSAFE.compareAndExchangeObject(base, offset, "bar", "baz"); |
177 assertEquals(r, "foo", "failing compareAndExchangeVolatile Object"); |
177 assertEquals(r, "foo", "failing compareAndExchange Object"); |
178 Object x = UNSAFE.getObject(base, offset); |
178 Object x = UNSAFE.getObject(base, offset); |
179 assertEquals(x, "foo", "failing compareAndExchangeVolatile Object value"); |
179 assertEquals(x, "foo", "failing compareAndExchange Object value"); |
180 } |
180 } |
181 |
181 |
182 { |
182 { |
183 Object r = UNSAFE.compareAndExchangeObjectAcquire(base, offset, "foo", "bar"); |
183 Object r = UNSAFE.compareAndExchangeObjectAcquire(base, offset, "foo", "bar"); |
184 assertEquals(r, "foo", "success compareAndExchangeAcquire Object"); |
184 assertEquals(r, "foo", "success compareAndExchangeAcquire Object"); |
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 = UNSAFE.weakCompareAndSwapObject(base, offset, "foo", "bar"); |
213 success = UNSAFE.weakCompareAndSetObjectPlain(base, offset, "foo", "bar"); |
214 } |
214 } |
215 assertEquals(success, true, "weakCompareAndSwap Object"); |
215 assertEquals(success, true, "weakCompareAndSetPlain Object"); |
216 Object x = UNSAFE.getObject(base, offset); |
216 Object x = UNSAFE.getObject(base, offset); |
217 assertEquals(x, "bar", "weakCompareAndSwap Object value"); |
217 assertEquals(x, "bar", "weakCompareAndSetPlain Object 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 = UNSAFE.weakCompareAndSwapObjectAcquire(base, offset, "bar", "foo"); |
223 success = UNSAFE.weakCompareAndSetObjectAcquire(base, offset, "bar", "foo"); |
224 } |
224 } |
225 assertEquals(success, true, "weakCompareAndSwapAcquire Object"); |
225 assertEquals(success, true, "weakCompareAndSetAcquire Object"); |
226 Object x = UNSAFE.getObject(base, offset); |
226 Object x = UNSAFE.getObject(base, offset); |
227 assertEquals(x, "foo", "weakCompareAndSwapAcquire Object"); |
227 assertEquals(x, "foo", "weakCompareAndSetAcquire Object"); |
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 = UNSAFE.weakCompareAndSwapObjectRelease(base, offset, "foo", "bar"); |
233 success = UNSAFE.weakCompareAndSetObjectRelease(base, offset, "foo", "bar"); |
234 } |
234 } |
235 assertEquals(success, true, "weakCompareAndSwapRelease Object"); |
235 assertEquals(success, true, "weakCompareAndSetRelease Object"); |
236 Object x = UNSAFE.getObject(base, offset); |
236 Object x = UNSAFE.getObject(base, offset); |
237 assertEquals(x, "bar", "weakCompareAndSwapRelease Object"); |
237 assertEquals(x, "bar", "weakCompareAndSetRelease Object"); |
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 = UNSAFE.weakCompareAndSwapObjectVolatile(base, offset, "bar", "foo"); |
243 success = UNSAFE.weakCompareAndSetObject(base, offset, "bar", "foo"); |
244 } |
244 } |
245 assertEquals(success, true, "weakCompareAndSwapVolatile Object"); |
245 assertEquals(success, true, "weakCompareAndSet Object"); |
246 Object x = UNSAFE.getObject(base, offset); |
246 Object x = UNSAFE.getObject(base, offset); |
247 assertEquals(x, "foo", "weakCompareAndSwapVolatile Object"); |
247 assertEquals(x, "foo", "weakCompareAndSet Object"); |
248 } |
248 } |
249 |
249 |
250 UNSAFE.putObject(base, offset, "bar"); |
250 UNSAFE.putObject(base, offset, "bar"); |
251 |
251 |
252 // Compare set and get |
252 // Compare set and get |