jdk/test/java/util/concurrent/tck/AtomicBoolean9Test.java
author dl
Mon, 12 Sep 2016 13:14:49 -0700
changeset 40817 4f5fb115676d
parent 39725 9548f8d846e9
child 41415 9c298252e385
permissions -rw-r--r--
8164169: Miscellaneous changes imported from jsr166 CVS 2016-09 Reviewed-by: martin, psandoz, shade
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
39725
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
     1
/*
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
     2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
     3
 *
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
     4
 * This code is free software; you can redistribute it and/or modify it
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
     5
 * under the terms of the GNU General Public License version 2 only, as
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
     6
 * published by the Free Software Foundation.
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
     7
 *
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
     8
 * This code is distributed in the hope that it will be useful, but WITHOUT
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
     9
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    10
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    11
 * version 2 for more details (a copy is included in the LICENSE file that
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    12
 * accompanied this code).
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    13
 *
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License version
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    15
 * 2 along with this work; if not, write to the Free Software Foundation,
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    16
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    17
 *
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    18
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    19
 * or visit www.oracle.com if you need additional information or have any
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    20
 * questions.
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    21
 */
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    22
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    23
/*
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    24
 * This file is available under and governed by the GNU General Public
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    25
 * License version 2 only, as published by the Free Software Foundation.
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    26
 * However, the following notice accompanied the original version of this
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    27
 * file:
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    28
 *
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    29
 * Written by Doug Lea with assistance from members of JCP JSR-166
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    30
 * Expert Group and released to the public domain, as explained at
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    31
 * http://creativecommons.org/publicdomain/zero/1.0/
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    32
 */
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    33
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    34
import java.util.concurrent.atomic.AtomicBoolean;
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    35
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    36
import junit.framework.Test;
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    37
import junit.framework.TestSuite;
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    38
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    39
public class AtomicBoolean9Test extends JSR166TestCase {
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    40
    public static void main(String[] args) {
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    41
        main(suite(), args);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    42
    }
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    43
    public static Test suite() {
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    44
        return new TestSuite(AtomicBoolean9Test.class);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    45
    }
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    46
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    47
    /**
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    48
     * getPlain returns the last value set
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    49
     */
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    50
    public void testGetPlainSet() {
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    51
        AtomicBoolean ai = new AtomicBoolean(true);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    52
        assertEquals(true, ai.getPlain());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    53
        ai.set(false);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    54
        assertEquals(false, ai.getPlain());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    55
        ai.set(true);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    56
        assertEquals(true, ai.getPlain());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    57
    }
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    58
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    59
    /**
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    60
     * getOpaque returns the last value set
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    61
     */
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    62
    public void testGetOpaqueSet() {
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    63
        AtomicBoolean ai = new AtomicBoolean(true);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    64
        assertEquals(true, ai.getOpaque());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    65
        ai.set(false);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    66
        assertEquals(false, ai.getOpaque());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    67
        ai.set(true);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    68
        assertEquals(true, ai.getOpaque());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    69
    }
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    70
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    71
    /**
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    72
     * getAcquire returns the last value set
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    73
     */
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    74
    public void testGetAcquireSet() {
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    75
        AtomicBoolean ai = new AtomicBoolean(true);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    76
        assertEquals(true, ai.getAcquire());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    77
        ai.set(false);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    78
        assertEquals(false, ai.getAcquire());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    79
        ai.set(true);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    80
        assertEquals(true, ai.getAcquire());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    81
    }
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    82
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    83
    /**
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    84
     * get returns the last value setPlain
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    85
     */
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    86
    public void testGetSetPlain() {
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    87
        AtomicBoolean ai = new AtomicBoolean(true);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    88
        assertEquals(true, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    89
        ai.setPlain(false);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    90
        assertEquals(false, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    91
        ai.setPlain(true);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    92
        assertEquals(true, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    93
    }
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    94
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    95
    /**
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    96
     * get returns the last value setOpaque
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    97
     */
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    98
    public void testGetSetOpaque() {
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
    99
        AtomicBoolean ai = new AtomicBoolean(true);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   100
        assertEquals(true, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   101
        ai.setOpaque(false);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   102
        assertEquals(false, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   103
        ai.setOpaque(true);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   104
        assertEquals(true, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   105
    }
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   106
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   107
    /**
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   108
     * get returns the last value setRelease
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   109
     */
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   110
    public void testGetSetRelease() {
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   111
        AtomicBoolean ai = new AtomicBoolean(true);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   112
        assertEquals(true, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   113
        ai.setRelease(false);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   114
        assertEquals(false, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   115
        ai.setRelease(true);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   116
        assertEquals(true, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   117
    }
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   118
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   119
    /**
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   120
     * compareAndExchange succeeds in changing value if equal to
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   121
     * expected else fails
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   122
     */
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   123
    public void testCompareAndExchange() {
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   124
        AtomicBoolean ai = new AtomicBoolean(true);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   125
        assertEquals(true, ai.compareAndExchange(true, false));
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   126
        assertEquals(false, ai.compareAndExchange(false, false));
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   127
        assertEquals(false, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   128
        assertEquals(false, ai.compareAndExchange(true, true));
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   129
        assertEquals(false, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   130
        assertEquals(false, ai.compareAndExchange(false, true));
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   131
        assertEquals(true, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   132
    }
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   133
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   134
    /**
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   135
     * compareAndExchangeAcquire succeeds in changing value if equal to
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   136
     * expected else fails
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   137
     */
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   138
    public void testCompareAndExchangeAcquire() {
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   139
        AtomicBoolean ai = new AtomicBoolean(true);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   140
        assertEquals(true, ai.compareAndExchangeAcquire(true, false));
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   141
        assertEquals(false, ai.compareAndExchangeAcquire(false, false));
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   142
        assertEquals(false, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   143
        assertEquals(false, ai.compareAndExchangeAcquire(true, true));
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   144
        assertEquals(false, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   145
        assertEquals(false, ai.compareAndExchangeAcquire(false, true));
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   146
        assertEquals(true, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   147
    }
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   148
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   149
    /**
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   150
     * compareAndExchangeRelease succeeds in changing value if equal to
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   151
     * expected else fails
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   152
     */
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   153
    public void testCompareAndExchangeRelease() {
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   154
        AtomicBoolean ai = new AtomicBoolean(true);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   155
        assertEquals(true, ai.compareAndExchangeRelease(true, false));
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   156
        assertEquals(false, ai.compareAndExchangeRelease(false, false));
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   157
        assertEquals(false, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   158
        assertEquals(false, ai.compareAndExchangeRelease(true, true));
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   159
        assertEquals(false, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   160
        assertEquals(false, ai.compareAndExchangeRelease(false, true));
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   161
        assertEquals(true, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   162
    }
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   163
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   164
    /**
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   165
     * repeated weakCompareAndSetVolatile succeeds in changing value when equal
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   166
     * to expected
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   167
     */
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   168
    public void testWeakCompareAndSetVolatile() {
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   169
        AtomicBoolean ai = new AtomicBoolean(true);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   170
        do {} while (!ai.weakCompareAndSetVolatile(true, false));
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   171
        do {} while (!ai.weakCompareAndSetVolatile(false, false));
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   172
        assertEquals(false, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   173
        do {} while (!ai.weakCompareAndSetVolatile(false, true));
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   174
        assertEquals(true, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   175
    }
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   176
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   177
    /**
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   178
     * repeated weakCompareAndSetAcquire succeeds in changing value when equal
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   179
     * to expected
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   180
     */
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   181
    public void testWeakCompareAndSetAcquire() {
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   182
        AtomicBoolean ai = new AtomicBoolean(true);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   183
        do {} while (!ai.weakCompareAndSetAcquire(true, false));
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   184
        do {} while (!ai.weakCompareAndSetAcquire(false, false));
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   185
        assertEquals(false, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   186
        do {} while (!ai.weakCompareAndSetAcquire(false, true));
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   187
        assertEquals(true, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   188
    }
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   189
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   190
    /**
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   191
     * repeated weakCompareAndSetRelease succeeds in changing value when equal
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   192
     * to expected
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   193
     */
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   194
    public void testWeakCompareAndSetRelease() {
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   195
        AtomicBoolean ai = new AtomicBoolean(true);
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   196
        do {} while (!ai.weakCompareAndSetRelease(true, false));
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   197
        do {} while (!ai.weakCompareAndSetRelease(false, false));
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   198
        assertEquals(false, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   199
        do {} while (!ai.weakCompareAndSetRelease(false, true));
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   200
        assertEquals(true, ai.get());
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   201
    }
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   202
9548f8d846e9 8080603: Replace Unsafe with VarHandle in java.util.concurrent classes
dl
parents:
diff changeset
   203
}