117 |
117 |
118 |
118 |
119 static void testAccess(Object base, long offset) { |
119 static void testAccess(Object base, long offset) { |
120 // Plain |
120 // Plain |
121 { |
121 { |
122 UNSAFE.putObject(base, offset, "foo"); |
122 UNSAFE.putReference(base, offset, "foo"); |
123 Object x = UNSAFE.getObject(base, offset); |
123 Object x = UNSAFE.getReference(base, offset); |
124 assertEquals(x, "foo", "set Object value"); |
124 assertEquals(x, "foo", "set Object value"); |
125 } |
125 } |
126 |
126 |
127 // Volatile |
127 // Volatile |
128 { |
128 { |
129 UNSAFE.putObjectVolatile(base, offset, "bar"); |
129 UNSAFE.putReferenceVolatile(base, offset, "bar"); |
130 Object x = UNSAFE.getObjectVolatile(base, offset); |
130 Object x = UNSAFE.getReferenceVolatile(base, offset); |
131 assertEquals(x, "bar", "putVolatile Object value"); |
131 assertEquals(x, "bar", "putVolatile Object value"); |
132 } |
132 } |
133 |
133 |
134 |
134 |
135 // Lazy |
135 // Lazy |
136 { |
136 { |
137 UNSAFE.putObjectRelease(base, offset, "foo"); |
137 UNSAFE.putReferenceRelease(base, offset, "foo"); |
138 Object x = UNSAFE.getObjectAcquire(base, offset); |
138 Object x = UNSAFE.getReferenceAcquire(base, offset); |
139 assertEquals(x, "foo", "putRelease Object value"); |
139 assertEquals(x, "foo", "putRelease Object value"); |
140 } |
140 } |
141 |
141 |
142 // Opaque |
142 // Opaque |
143 { |
143 { |
144 UNSAFE.putObjectOpaque(base, offset, "bar"); |
144 UNSAFE.putReferenceOpaque(base, offset, "bar"); |
145 Object x = UNSAFE.getObjectOpaque(base, offset); |
145 Object x = UNSAFE.getReferenceOpaque(base, offset); |
146 assertEquals(x, "bar", "putOpaque Object value"); |
146 assertEquals(x, "bar", "putOpaque Object value"); |
147 } |
147 } |
148 |
148 |
149 |
149 |
150 UNSAFE.putObject(base, offset, "foo"); |
150 UNSAFE.putReference(base, offset, "foo"); |
151 |
151 |
152 // Compare |
152 // Compare |
153 { |
153 { |
154 boolean r = UNSAFE.compareAndSetObject(base, offset, "foo", "bar"); |
154 boolean r = UNSAFE.compareAndSetReference(base, offset, "foo", "bar"); |
155 assertEquals(r, true, "success compareAndSet Object"); |
155 assertEquals(r, true, "success compareAndSet Object"); |
156 Object x = UNSAFE.getObject(base, offset); |
156 Object x = UNSAFE.getReference(base, offset); |
157 assertEquals(x, "bar", "success compareAndSet Object value"); |
157 assertEquals(x, "bar", "success compareAndSet Object value"); |
158 } |
158 } |
159 |
159 |
160 { |
160 { |
161 boolean r = UNSAFE.compareAndSetObject(base, offset, "foo", "baz"); |
161 boolean r = UNSAFE.compareAndSetReference(base, offset, "foo", "baz"); |
162 assertEquals(r, false, "failing compareAndSet Object"); |
162 assertEquals(r, false, "failing compareAndSet Object"); |
163 Object x = UNSAFE.getObject(base, offset); |
163 Object x = UNSAFE.getReference(base, offset); |
164 assertEquals(x, "bar", "failing compareAndSet 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.compareAndExchangeObject(base, offset, "bar", "foo"); |
169 Object r = UNSAFE.compareAndExchangeReference(base, offset, "bar", "foo"); |
170 assertEquals(r, "bar", "success compareAndExchange Object"); |
170 assertEquals(r, "bar", "success compareAndExchange Object"); |
171 Object x = UNSAFE.getObject(base, offset); |
171 Object x = UNSAFE.getReference(base, offset); |
172 assertEquals(x, "foo", "success compareAndExchange Object value"); |
172 assertEquals(x, "foo", "success compareAndExchange Object value"); |
173 } |
173 } |
174 |
174 |
175 { |
175 { |
176 Object r = UNSAFE.compareAndExchangeObject(base, offset, "bar", "baz"); |
176 Object r = UNSAFE.compareAndExchangeReference(base, offset, "bar", "baz"); |
177 assertEquals(r, "foo", "failing compareAndExchange Object"); |
177 assertEquals(r, "foo", "failing compareAndExchange Object"); |
178 Object x = UNSAFE.getObject(base, offset); |
178 Object x = UNSAFE.getReference(base, offset); |
179 assertEquals(x, "foo", "failing compareAndExchange 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.compareAndExchangeReferenceAcquire(base, offset, "foo", "bar"); |
184 assertEquals(r, "foo", "success compareAndExchangeAcquire Object"); |
184 assertEquals(r, "foo", "success compareAndExchangeAcquire Object"); |
185 Object x = UNSAFE.getObject(base, offset); |
185 Object x = UNSAFE.getReference(base, offset); |
186 assertEquals(x, "bar", "success compareAndExchangeAcquire Object value"); |
186 assertEquals(x, "bar", "success compareAndExchangeAcquire Object value"); |
187 } |
187 } |
188 |
188 |
189 { |
189 { |
190 Object r = UNSAFE.compareAndExchangeObjectAcquire(base, offset, "foo", "baz"); |
190 Object r = UNSAFE.compareAndExchangeReferenceAcquire(base, offset, "foo", "baz"); |
191 assertEquals(r, "bar", "failing compareAndExchangeAcquire Object"); |
191 assertEquals(r, "bar", "failing compareAndExchangeAcquire Object"); |
192 Object x = UNSAFE.getObject(base, offset); |
192 Object x = UNSAFE.getReference(base, offset); |
193 assertEquals(x, "bar", "failing compareAndExchangeAcquire Object value"); |
193 assertEquals(x, "bar", "failing compareAndExchangeAcquire Object value"); |
194 } |
194 } |
195 |
195 |
196 { |
196 { |
197 Object r = UNSAFE.compareAndExchangeObjectRelease(base, offset, "bar", "foo"); |
197 Object r = UNSAFE.compareAndExchangeReferenceRelease(base, offset, "bar", "foo"); |
198 assertEquals(r, "bar", "success compareAndExchangeRelease Object"); |
198 assertEquals(r, "bar", "success compareAndExchangeRelease Object"); |
199 Object x = UNSAFE.getObject(base, offset); |
199 Object x = UNSAFE.getReference(base, offset); |
200 assertEquals(x, "foo", "success compareAndExchangeRelease Object value"); |
200 assertEquals(x, "foo", "success compareAndExchangeRelease Object value"); |
201 } |
201 } |
202 |
202 |
203 { |
203 { |
204 Object r = UNSAFE.compareAndExchangeObjectRelease(base, offset, "bar", "baz"); |
204 Object r = UNSAFE.compareAndExchangeReferenceRelease(base, offset, "bar", "baz"); |
205 assertEquals(r, "foo", "failing compareAndExchangeRelease Object"); |
205 assertEquals(r, "foo", "failing compareAndExchangeRelease Object"); |
206 Object x = UNSAFE.getObject(base, offset); |
206 Object x = UNSAFE.getReference(base, offset); |
207 assertEquals(x, "foo", "failing compareAndExchangeRelease Object value"); |
207 assertEquals(x, "foo", "failing compareAndExchangeRelease Object 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 = UNSAFE.weakCompareAndSetObjectPlain(base, offset, "foo", "bar"); |
213 success = UNSAFE.weakCompareAndSetReferencePlain(base, offset, "foo", "bar"); |
214 } |
214 } |
215 assertEquals(success, true, "weakCompareAndSetPlain Object"); |
215 assertEquals(success, true, "weakCompareAndSetPlain Object"); |
216 Object x = UNSAFE.getObject(base, offset); |
216 Object x = UNSAFE.getReference(base, offset); |
217 assertEquals(x, "bar", "weakCompareAndSetPlain 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.weakCompareAndSetObjectAcquire(base, offset, "bar", "foo"); |
223 success = UNSAFE.weakCompareAndSetReferenceAcquire(base, offset, "bar", "foo"); |
224 } |
224 } |
225 assertEquals(success, true, "weakCompareAndSetAcquire Object"); |
225 assertEquals(success, true, "weakCompareAndSetAcquire Object"); |
226 Object x = UNSAFE.getObject(base, offset); |
226 Object x = UNSAFE.getReference(base, offset); |
227 assertEquals(x, "foo", "weakCompareAndSetAcquire 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.weakCompareAndSetObjectRelease(base, offset, "foo", "bar"); |
233 success = UNSAFE.weakCompareAndSetReferenceRelease(base, offset, "foo", "bar"); |
234 } |
234 } |
235 assertEquals(success, true, "weakCompareAndSetRelease Object"); |
235 assertEquals(success, true, "weakCompareAndSetRelease Object"); |
236 Object x = UNSAFE.getObject(base, offset); |
236 Object x = UNSAFE.getReference(base, offset); |
237 assertEquals(x, "bar", "weakCompareAndSetRelease 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.weakCompareAndSetObject(base, offset, "bar", "foo"); |
243 success = UNSAFE.weakCompareAndSetReference(base, offset, "bar", "foo"); |
244 } |
244 } |
245 assertEquals(success, true, "weakCompareAndSet Object"); |
245 assertEquals(success, true, "weakCompareAndSet Object"); |
246 Object x = UNSAFE.getObject(base, offset); |
246 Object x = UNSAFE.getReference(base, offset); |
247 assertEquals(x, "foo", "weakCompareAndSet Object"); |
247 assertEquals(x, "foo", "weakCompareAndSet Object"); |
248 } |
248 } |
249 |
249 |
250 UNSAFE.putObject(base, offset, "bar"); |
250 UNSAFE.putReference(base, offset, "bar"); |
251 |
251 |
252 // Compare set and get |
252 // Compare set and get |
253 { |
253 { |
254 Object o = UNSAFE.getAndSetObject(base, offset, "foo"); |
254 Object o = UNSAFE.getAndSetReference(base, offset, "foo"); |
255 assertEquals(o, "bar", "getAndSet Object"); |
255 assertEquals(o, "bar", "getAndSet Object"); |
256 Object x = UNSAFE.getObject(base, offset); |
256 Object x = UNSAFE.getReference(base, offset); |
257 assertEquals(x, "foo", "getAndSet Object value"); |
257 assertEquals(x, "foo", "getAndSet Object value"); |
258 } |
258 } |
259 |
259 |
260 } |
260 } |
261 |
261 |