hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestChar.java
changeset 45514 0fc9cc73ce45
parent 42307 cefc81dc1d52
equal deleted inserted replaced
45513:5431282d8ce1 45514:0fc9cc73ce45
     1 /*
     1 /*
     2  * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
   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
   322             char x = UNSAFE.getChar(address);
   322             char x = UNSAFE.getChar(address);
   323             assertEquals(x, '\u0123', "set char value");
   323             assertEquals(x, '\u0123', "set char value");
   324         }
   324         }
   325     }
   325     }
   326 }
   326 }
   327