132 UNSAFE.putOrderedObject(base, offset, "foo"); |
132 UNSAFE.putOrderedObject(base, offset, "foo"); |
133 Object x = UNSAFE.getObjectVolatile(base, offset); |
133 Object x = UNSAFE.getObjectVolatile(base, offset); |
134 assertEquals(x, "foo", "putRelease Object value"); |
134 assertEquals(x, "foo", "putRelease Object value"); |
135 } |
135 } |
136 |
136 |
|
137 // Lazy |
|
138 { |
|
139 UNSAFE.putObjectRelease(base, offset, "foo"); |
|
140 Object x = UNSAFE.getObjectAcquire(base, offset); |
|
141 assertEquals(x, "foo", "putRelease Object value"); |
|
142 } |
|
143 |
|
144 // Opaque |
|
145 { |
|
146 UNSAFE.putObjectOpaque(base, offset, "bar"); |
|
147 Object x = UNSAFE.getObjectOpaque(base, offset); |
|
148 assertEquals(x, "bar", "putOpaque Object value"); |
|
149 } |
|
150 |
137 |
151 |
138 UNSAFE.putObject(base, offset, "foo"); |
152 UNSAFE.putObject(base, offset, "foo"); |
139 |
153 |
140 // Compare |
154 // Compare |
141 { |
155 { |
150 assertEquals(r, false, "failing compareAndSwap Object"); |
164 assertEquals(r, false, "failing compareAndSwap Object"); |
151 Object x = UNSAFE.getObject(base, offset); |
165 Object x = UNSAFE.getObject(base, offset); |
152 assertEquals(x, "bar", "failing compareAndSwap Object value"); |
166 assertEquals(x, "bar", "failing compareAndSwap Object value"); |
153 } |
167 } |
154 |
168 |
|
169 // Advanced compare |
|
170 { |
|
171 Object r = UNSAFE.compareAndExchangeObjectVolatile(base, offset, "bar", "foo"); |
|
172 assertEquals(r, "bar", "success compareAndExchangeVolatile Object"); |
|
173 Object x = UNSAFE.getObject(base, offset); |
|
174 assertEquals(x, "foo", "success compareAndExchangeVolatile Object value"); |
|
175 } |
|
176 |
|
177 { |
|
178 Object r = UNSAFE.compareAndExchangeObjectVolatile(base, offset, "bar", "baz"); |
|
179 assertEquals(r, "foo", "failing compareAndExchangeVolatile Object"); |
|
180 Object x = UNSAFE.getObject(base, offset); |
|
181 assertEquals(x, "foo", "failing compareAndExchangeVolatile Object value"); |
|
182 } |
|
183 |
|
184 { |
|
185 Object r = UNSAFE.compareAndExchangeObjectAcquire(base, offset, "foo", "bar"); |
|
186 assertEquals(r, "foo", "success compareAndExchangeAcquire Object"); |
|
187 Object x = UNSAFE.getObject(base, offset); |
|
188 assertEquals(x, "bar", "success compareAndExchangeAcquire Object value"); |
|
189 } |
|
190 |
|
191 { |
|
192 Object r = UNSAFE.compareAndExchangeObjectAcquire(base, offset, "foo", "baz"); |
|
193 assertEquals(r, "bar", "failing compareAndExchangeAcquire Object"); |
|
194 Object x = UNSAFE.getObject(base, offset); |
|
195 assertEquals(x, "bar", "failing compareAndExchangeAcquire Object value"); |
|
196 } |
|
197 |
|
198 { |
|
199 Object r = UNSAFE.compareAndExchangeObjectRelease(base, offset, "bar", "foo"); |
|
200 assertEquals(r, "bar", "success compareAndExchangeRelease Object"); |
|
201 Object x = UNSAFE.getObject(base, offset); |
|
202 assertEquals(x, "foo", "success compareAndExchangeRelease Object value"); |
|
203 } |
|
204 |
|
205 { |
|
206 Object r = UNSAFE.compareAndExchangeObjectRelease(base, offset, "bar", "baz"); |
|
207 assertEquals(r, "foo", "failing compareAndExchangeRelease Object"); |
|
208 Object x = UNSAFE.getObject(base, offset); |
|
209 assertEquals(x, "foo", "failing compareAndExchangeRelease Object value"); |
|
210 } |
|
211 |
|
212 { |
|
213 boolean r = UNSAFE.weakCompareAndSwapObject(base, offset, "foo", "bar"); |
|
214 assertEquals(r, true, "weakCompareAndSwap Object"); |
|
215 Object x = UNSAFE.getObject(base, offset); |
|
216 assertEquals(x, "bar", "weakCompareAndSwap Object value"); |
|
217 } |
|
218 |
|
219 { |
|
220 boolean r = UNSAFE.weakCompareAndSwapObjectAcquire(base, offset, "bar", "foo"); |
|
221 assertEquals(r, true, "weakCompareAndSwapAcquire Object"); |
|
222 Object x = UNSAFE.getObject(base, offset); |
|
223 assertEquals(x, "foo", "weakCompareAndSwapAcquire Object"); |
|
224 } |
|
225 |
|
226 { |
|
227 boolean r = UNSAFE.weakCompareAndSwapObjectRelease(base, offset, "foo", "bar"); |
|
228 assertEquals(r, true, "weakCompareAndSwapRelease Object"); |
|
229 Object x = UNSAFE.getObject(base, offset); |
|
230 assertEquals(x, "bar", "weakCompareAndSwapRelease Object"); |
|
231 } |
|
232 |
155 // Compare set and get |
233 // Compare set and get |
156 { |
234 { |
157 Object o = UNSAFE.getAndSetObject(base, offset, "foo"); |
235 Object o = UNSAFE.getAndSetObject(base, offset, "foo"); |
158 assertEquals(o, "bar", "getAndSet Object"); |
236 assertEquals(o, "bar", "getAndSet Object"); |
159 Object x = UNSAFE.getObject(base, offset); |
237 Object x = UNSAFE.getObject(base, offset); |