23
24 /*
25 * @test
26 * @bug 8143628
27 * @summary Test unsafe access for int
28 * @modules jdk.unsupported/sun.misc
29 * @run testng/othervm -Diters=100 -Xint SunMiscUnsafeAccessTestInt
30 * @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 SunMiscUnsafeAccessTestInt
31 * @run testng/othervm -Diters=20000 -XX:-TieredCompilation SunMiscUnsafeAccessTestInt
32 * @run testng/othervm -Diters=20000 SunMiscUnsafeAccessTestInt
33 */
34
35 import org.testng.annotations.Test;
36
37 import java.lang.reflect.Field;
38
39 import static org.testng.Assert.*;
40
41 public class SunMiscUnsafeAccessTestInt {
42 static final int ITERS = Integer.getInteger("iters", 1);
43
44 static final sun.misc.Unsafe UNSAFE;
45
46 static final long V_OFFSET;
47
48 static final Object STATIC_V_BASE;
49
50 static final long STATIC_V_OFFSET;
51
52 static int ARRAY_OFFSET;
53
54 static int ARRAY_SHIFT;
55
56 static {
57 try {
58 Field f = sun.misc.Unsafe.class.getDeclaredField("theUnsafe");
59 f.setAccessible(true);
60 UNSAFE = (sun.misc.Unsafe) f.get(null);
61 } catch (Exception e) {
62 throw new RuntimeException("Unable to get Unsafe instance.", e);
148 int x = UNSAFE.getInt(base, offset);
149 assertEquals(x, 1, "set int value");
150 }
151
152 // Volatile
153 {
154 UNSAFE.putIntVolatile(base, offset, 2);
155 int x = UNSAFE.getIntVolatile(base, offset);
156 assertEquals(x, 2, "putVolatile int value");
157 }
158
159 // Lazy
160 {
161 UNSAFE.putOrderedInt(base, offset, 1);
162 int x = UNSAFE.getIntVolatile(base, offset);
163 assertEquals(x, 1, "putRelease int value");
164 }
165
166
167
168
169 UNSAFE.putInt(base, offset, 1);
170
171 // Compare
172 {
173 boolean r = UNSAFE.compareAndSwapInt(base, offset, 1, 2);
174 assertEquals(r, true, "success compareAndSwap int");
175 int x = UNSAFE.getInt(base, offset);
176 assertEquals(x, 2, "success compareAndSwap int value");
177 }
178
179 {
180 boolean r = UNSAFE.compareAndSwapInt(base, offset, 1, 3);
181 assertEquals(r, false, "failing compareAndSwap int");
182 int x = UNSAFE.getInt(base, offset);
183 assertEquals(x, 2, "failing compareAndSwap int value");
184 }
185
186
187
188 // Compare set and get
189 {
190 int o = UNSAFE.getAndSetInt(base, offset, 1);
191 assertEquals(o, 2, "getAndSet int");
192 int x = UNSAFE.getInt(base, offset);
193 assertEquals(x, 1, "getAndSet int value");
194 }
195
196 UNSAFE.putInt(base, offset, 1);
197
198 // get and add, add and get
199 {
200 int o = UNSAFE.getAndAddInt(base, offset, 2);
201 assertEquals(o, 1, "getAndAdd int");
202 int x = UNSAFE.getInt(base, offset);
203 assertEquals(x, 1 + 2, "weakCompareAndSwapRelease int");
204 }
205 }
206
207 static void testAccess(long address) {
208 // Plain
209 {
210 UNSAFE.putInt(address, 1);
211 int x = UNSAFE.getInt(address);
212 assertEquals(x, 1, "set int value");
213 }
214 }
215 }
216
217
|
23
24 /*
25 * @test
26 * @bug 8143628
27 * @summary Test unsafe access for int
28 * @modules jdk.unsupported/sun.misc
29 * @run testng/othervm -Diters=100 -Xint SunMiscUnsafeAccessTestInt
30 * @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 SunMiscUnsafeAccessTestInt
31 * @run testng/othervm -Diters=20000 -XX:-TieredCompilation SunMiscUnsafeAccessTestInt
32 * @run testng/othervm -Diters=20000 SunMiscUnsafeAccessTestInt
33 */
34
35 import org.testng.annotations.Test;
36
37 import java.lang.reflect.Field;
38
39 import static org.testng.Assert.*;
40
41 public class SunMiscUnsafeAccessTestInt {
42 static final int ITERS = Integer.getInteger("iters", 1);
43 static final int WEAK_ATTEMPTS = Integer.getInteger("weakAttempts", 10);
44
45 static final sun.misc.Unsafe UNSAFE;
46
47 static final long V_OFFSET;
48
49 static final Object STATIC_V_BASE;
50
51 static final long STATIC_V_OFFSET;
52
53 static int ARRAY_OFFSET;
54
55 static int ARRAY_SHIFT;
56
57 static {
58 try {
59 Field f = sun.misc.Unsafe.class.getDeclaredField("theUnsafe");
60 f.setAccessible(true);
61 UNSAFE = (sun.misc.Unsafe) f.get(null);
62 } catch (Exception e) {
63 throw new RuntimeException("Unable to get Unsafe instance.", e);
149 int x = UNSAFE.getInt(base, offset);
150 assertEquals(x, 1, "set int value");
151 }
152
153 // Volatile
154 {
155 UNSAFE.putIntVolatile(base, offset, 2);
156 int x = UNSAFE.getIntVolatile(base, offset);
157 assertEquals(x, 2, "putVolatile int value");
158 }
159
160 // Lazy
161 {
162 UNSAFE.putOrderedInt(base, offset, 1);
163 int x = UNSAFE.getIntVolatile(base, offset);
164 assertEquals(x, 1, "putRelease int value");
165 }
166
167
168
169 UNSAFE.putInt(base, offset, 1);
170
171 // Compare
172 {
173 boolean r = UNSAFE.compareAndSwapInt(base, offset, 1, 2);
174 assertEquals(r, true, "success compareAndSwap int");
175 int x = UNSAFE.getInt(base, offset);
176 assertEquals(x, 2, "success compareAndSwap int value");
177 }
178
179 {
180 boolean r = UNSAFE.compareAndSwapInt(base, offset, 1, 3);
181 assertEquals(r, false, "failing compareAndSwap int");
182 int x = UNSAFE.getInt(base, offset);
183 assertEquals(x, 2, "failing compareAndSwap int value");
184 }
185
186
187 // Compare set and get
188 {
189 int o = UNSAFE.getAndSetInt(base, offset, 1);
190 assertEquals(o, 2, "getAndSet int");
191 int x = UNSAFE.getInt(base, offset);
192 assertEquals(x, 1, "getAndSet int value");
193 }
194
195 UNSAFE.putInt(base, offset, 1);
196
197 // get and add, add and get
198 {
199 int o = UNSAFE.getAndAddInt(base, offset, 2);
200 assertEquals(o, 1, "getAndAdd int");
201 int x = UNSAFE.getInt(base, offset);
202 assertEquals(x, 1 + 2, "getAndAdd int");
203 }
204 }
205
206 static void testAccess(long address) {
207 // Plain
208 {
209 UNSAFE.putInt(address, 1);
210 int x = UNSAFE.getInt(address);
211 assertEquals(x, 1, "set int value");
212 }
213 }
214 }
215
|