changeset 295:ed33da548c5c

Chapter 1.b/c: Split Atomicity and Fences tests.
author shade
date Fri, 10 Jun 2016 15:29:27 +0300
parents 806179cda48d
children c47a1a95f97d
files jcstress-test-gen/pom.xml jcstress-test-gen/src/main/java/org/openjdk/jcstress/chapters/Chapter1bTestGenerator.java jcstress-test-gen/src/main/java/org/openjdk/jcstress/chapters/Chapter1cTestGenerator.java jcstress-test-gen/src/main/resources/chapter1b/arrays/AddAndGetTest.java.template jcstress-test-gen/src/main/resources/chapter1b/arrays/CAETest.java.template jcstress-test-gen/src/main/resources/chapter1b/arrays/CASTest.java.template jcstress-test-gen/src/main/resources/chapter1b/arrays/GetAndAddTest.java.template jcstress-test-gen/src/main/resources/chapter1b/arrays/GetAndSetTest.java.template jcstress-test-gen/src/main/resources/chapter1b/arrays/LoadLoadFenceTest.java.template jcstress-test-gen/src/main/resources/chapter1b/arrays/LoadStoreFenceTest1.java.template jcstress-test-gen/src/main/resources/chapter1b/arrays/LoadStoreFenceTest2.java.template jcstress-test-gen/src/main/resources/chapter1b/arrays/StoreLoadFenceTest.java.template jcstress-test-gen/src/main/resources/chapter1b/arrays/StoreStoreFenceTest1.java.template jcstress-test-gen/src/main/resources/chapter1b/arrays/StoreStoreFenceTest2.java.template jcstress-test-gen/src/main/resources/chapter1b/arrays/WeakCASContendStrongTest.java.template jcstress-test-gen/src/main/resources/chapter1b/arrays/WeakCASTest.java.template jcstress-test-gen/src/main/resources/chapter1b/byteArray/AddAndGetTest.java.template jcstress-test-gen/src/main/resources/chapter1b/byteArray/CAETest.java.template jcstress-test-gen/src/main/resources/chapter1b/byteArray/CASTest.java.template jcstress-test-gen/src/main/resources/chapter1b/byteArray/GetAndAddTest.java.template jcstress-test-gen/src/main/resources/chapter1b/byteArray/GetAndSetTest.java.template jcstress-test-gen/src/main/resources/chapter1b/byteArray/LoadLoadFenceTest.java.template jcstress-test-gen/src/main/resources/chapter1b/byteArray/LoadStoreFenceTest1.java.template jcstress-test-gen/src/main/resources/chapter1b/byteArray/LoadStoreFenceTest2.java.template jcstress-test-gen/src/main/resources/chapter1b/byteArray/StoreLoadFenceTest.java.template jcstress-test-gen/src/main/resources/chapter1b/byteArray/StoreStoreFenceTest1.java.template jcstress-test-gen/src/main/resources/chapter1b/byteArray/StoreStoreFenceTest2.java.template jcstress-test-gen/src/main/resources/chapter1b/byteArray/WeakCASContendStrongTest.java.template jcstress-test-gen/src/main/resources/chapter1b/byteArray/WeakCASTest.java.template jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/AddAndGetTest.java.template jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/CAETest.java.template jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/CASTest.java.template jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/GetAndAddTest.java.template jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/GetAndSetTest.java.template jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/LoadLoadFenceTest.java.template jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/LoadStoreFenceTest1.java.template jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/LoadStoreFenceTest2.java.template jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/StoreLoadFenceTest.java.template jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/StoreStoreFenceTest1.java.template jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/StoreStoreFenceTest2.java.template jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/WeakCASContendStrongTest.java.template jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/WeakCASTest.java.template jcstress-test-gen/src/main/resources/chapter1b/fields/AddAndGetTest.java.template jcstress-test-gen/src/main/resources/chapter1b/fields/CAETest.java.template jcstress-test-gen/src/main/resources/chapter1b/fields/CASTest.java.template jcstress-test-gen/src/main/resources/chapter1b/fields/GetAndAddTest.java.template jcstress-test-gen/src/main/resources/chapter1b/fields/GetAndSetTest.java.template jcstress-test-gen/src/main/resources/chapter1b/fields/LoadLoadFenceTest.java.template jcstress-test-gen/src/main/resources/chapter1b/fields/LoadStoreFenceTest1.java.template jcstress-test-gen/src/main/resources/chapter1b/fields/LoadStoreFenceTest2.java.template jcstress-test-gen/src/main/resources/chapter1b/fields/StoreLoadFenceTest.java.template jcstress-test-gen/src/main/resources/chapter1b/fields/StoreStoreFenceTest1.java.template jcstress-test-gen/src/main/resources/chapter1b/fields/StoreStoreFenceTest2.java.template jcstress-test-gen/src/main/resources/chapter1b/fields/WeakCASContendStrongTest.java.template jcstress-test-gen/src/main/resources/chapter1b/fields/WeakCASTest.java.template jcstress-test-gen/src/main/resources/fences/X-LoadLoadFenceTest.java.template jcstress-test-gen/src/main/resources/fences/X-LoadStoreFenceTest1.java.template jcstress-test-gen/src/main/resources/fences/X-LoadStoreFenceTest2.java.template jcstress-test-gen/src/main/resources/fences/X-StoreLoadFenceTest.java.template jcstress-test-gen/src/main/resources/fences/X-StoreStoreFenceTest1.java.template jcstress-test-gen/src/main/resources/fences/X-StoreStoreFenceTest2.java.template jcstress-test-gen/src/main/resources/operationAtomic/arrays/X-AddAndGetTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/arrays/X-CAETest.java.template jcstress-test-gen/src/main/resources/operationAtomic/arrays/X-CASTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/arrays/X-GetAndAddTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/arrays/X-GetAndSetTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/arrays/X-WeakCASContendStrongTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/arrays/X-WeakCASTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/byteArray/X-AddAndGetTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/byteArray/X-CAETest.java.template jcstress-test-gen/src/main/resources/operationAtomic/byteArray/X-CASTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/byteArray/X-GetAndAddTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/byteArray/X-GetAndSetTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/byteArray/X-WeakCASContendStrongTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/byteArray/X-WeakCASTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/byteBuffer/X-AddAndGetTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/byteBuffer/X-CAETest.java.template jcstress-test-gen/src/main/resources/operationAtomic/byteBuffer/X-CASTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/byteBuffer/X-GetAndAddTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/byteBuffer/X-GetAndSetTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/byteBuffer/X-WeakCASContendStrongTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/byteBuffer/X-WeakCASTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/fields/X-AddAndGetTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/fields/X-CAETest.java.template jcstress-test-gen/src/main/resources/operationAtomic/fields/X-CASTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/fields/X-GetAndAddTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/fields/X-GetAndSetTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/fields/X-WeakCASContendStrongTest.java.template jcstress-test-gen/src/main/resources/operationAtomic/fields/X-WeakCASTest.java.template pom.xml tests-all/pom.xml tests-chapter-1b/pom.xml tests-chapter-1c/LICENSE tests-chapter-1c/THIRD_PARTY_README tests-chapter-1c/pom.xml tests-chapter-1c/src/main/java/Test.java tests-chapter-1c/src/main/resources/LICENSE tests-chapter-1c/src/main/resources/THIRD_PARTY_README
diffstat 98 files changed, 3972 insertions(+), 4448 deletions(-) [+]
line wrap: on
line diff
--- a/jcstress-test-gen/pom.xml	Fri Jun 10 14:29:27 2016 +0300
+++ b/jcstress-test-gen/pom.xml	Fri Jun 10 15:29:27 2016 +0300
@@ -139,13 +139,13 @@
                         </configuration>
                     </execution>
                     <execution>
-                        <id>chapter1b-generator</id>
+                        <id>operationAtomic-generator</id>
                         <phase>package</phase>
                         <goals>
                             <goal>shade</goal>
                         </goals>
                         <configuration>
-                            <finalName>chapter1b-generator</finalName>
+                            <finalName>operationAtomic-generator</finalName>
                             <transformers>
                                 <transformer
                                         implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
@@ -154,6 +154,22 @@
                             </transformers>
                         </configuration>
                     </execution>
+                    <execution>
+                        <id>chapter1c-generator</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>shade</goal>
+                        </goals>
+                        <configuration>
+                            <finalName>chapter1c-generator</finalName>
+                            <transformers>
+                                <transformer
+                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+                                    <mainClass>org.openjdk.jcstress.chapters.Chapter1cTestGenerator</mainClass>
+                                </transformer>
+                            </transformers>
+                        </configuration>
+                    </execution>
                 </executions>
             </plugin>
             <plugin>
--- a/jcstress-test-gen/src/main/java/org/openjdk/jcstress/chapters/Chapter1bTestGenerator.java	Fri Jun 10 14:29:27 2016 +0300
+++ b/jcstress-test-gen/src/main/java/org/openjdk/jcstress/chapters/Chapter1bTestGenerator.java	Fri Jun 10 15:29:27 2016 +0300
@@ -46,11 +46,6 @@
 import static org.openjdk.jcstress.chapters.Chapter1bTestGenerator.Method.SetVolatile;
 import static org.openjdk.jcstress.chapters.Chapter1bTestGenerator.Method.SetOpaque;
 import static org.openjdk.jcstress.chapters.Chapter1bTestGenerator.Method.SetRelease;
-import static org.openjdk.jcstress.chapters.Chapter1bTestGenerator.Method.FullFence;
-import static org.openjdk.jcstress.chapters.Chapter1bTestGenerator.Method.AcquireFence;
-import static org.openjdk.jcstress.chapters.Chapter1bTestGenerator.Method.ReleaseFence;
-import static org.openjdk.jcstress.chapters.Chapter1bTestGenerator.Method.LoadLoadFence;
-import static org.openjdk.jcstress.chapters.Chapter1bTestGenerator.Method.StoreStoreFence;
 import static org.openjdk.jcstress.chapters.Chapter1bTestGenerator.Method.GetAndAdd;
 import static org.openjdk.jcstress.chapters.Chapter1bTestGenerator.Method.AddAndGet;
 import static org.openjdk.jcstress.chapters.Chapter1bTestGenerator.Method.CompareAndSet;
@@ -63,7 +58,6 @@
 import static org.openjdk.jcstress.chapters.Chapter1bTestGenerator.Method.WeakCompareAndSetVolatile;
 import static org.openjdk.jcstress.chapters.Chapter1bTestGenerator.Method.GetAndSet;
 import static org.openjdk.jcstress.chapters.Chapter1bTestGenerator.Method.Type.GET_SET;
-import static org.openjdk.jcstress.chapters.Chapter1bTestGenerator.Method.Type.STATIC_FENCE;
 import static org.openjdk.jcstress.chapters.Chapter1bTestGenerator.Method.Type.ATOMIC_UPDATE;
 import static org.openjdk.jcstress.chapters.Chapter1bTestGenerator.Method.Type.NUMERIC_ATOMIC_UPDATE;
 
@@ -94,19 +88,19 @@
             final Target target = template.getValue();
 
             makeFieldTests(dest, target, "fields", templateName,
-                    readFromResource("/chapter1b/fields/" + templateName + ".java.template"));
+                    readFromResource("/operationAtomic/fields/" + templateName + ".java.template"));
 
             makeArrayTests(dest, target, "arrays", templateName,
-                    readFromResource("/chapter1b/arrays/" + templateName + ".java.template"));
+                    readFromResource("/operationAtomic/arrays/" + templateName + ".java.template"));
 
             makeByteBufferTests(dest, target, "byteArray", "byteArray", BufferType.ARRAY, templateName,
-                    readFromResource("/chapter1b/byteArray/" + templateName + ".java.template"));
+                    readFromResource("/operationAtomic/byteArray/" + templateName + ".java.template"));
 
             makeByteBufferTests(dest, target, "byteBuffer", "byteBuffer", BufferType.HEAP, templateName,
-                    readFromResource("/chapter1b/byteBuffer/" + templateName + ".java.template"));
+                    readFromResource("/operationAtomic/byteBuffer/" + templateName + ".java.template"));
 
             makeByteBufferTests(dest, target, "byteBuffer", "byteBuffer", BufferType.DIRECT, templateName,
-                    readFromResource("/chapter1b/byteBuffer/" + templateName + ".java.template"));
+                    readFromResource("/operationAtomic/byteBuffer/" + templateName + ".java.template"));
         }
     }
 
@@ -119,7 +113,7 @@
                 String result = generateConcreteOperation(template, target.target, operation.operation,
                         "field", "field = $1;");
 
-                String pkg = BASE_PKG + "." + vhType + "." + templateName;
+                String pkg = BASE_PKG + "." + vhType + "." + templateName.replaceAll("^X-", "");
                 String testName = operation.method.name() + upcaseFirst(type.type);
 
                 writeOut(dest, pkg, testName, Spp.spp(result,
@@ -139,7 +133,7 @@
                 String result = generateConcreteOperation(template, target.target, operation.operation,
                         "array[0]", "array[0] = $1;");
 
-                String pkg = BASE_PKG + "." + vhType + "." + templateName;
+                String pkg = BASE_PKG + "." + vhType + "." + templateName.replaceAll("^X-", "");
                 String testName = operation.method.name() + upcaseFirst(type.type);
 
                 writeOut(dest, pkg, testName, Spp.spp(result,
@@ -162,7 +156,7 @@
                         "(\\$type\\$) vh.get(\\$object\\$\\$index_para\\$)",
                         "vh.set(\\$object\\$\\$index_para\\$, $1);");
 
-                String pkg = BASE_PKG + "." + vhType + bufferType.pkgAppendix() + "." + templateName;
+                String pkg = BASE_PKG + "." + vhType + bufferType.pkgAppendix() + "." + templateName.replaceAll("^X-", "");
                 String testName = operation.method.name() + upcaseFirst(type.type);
 
                 writeOut(dest, pkg, testName, Spp.spp(result,
@@ -324,7 +318,7 @@
         protected abstract boolean supported(Method method, Type type);
 
         boolean commonSupported(Method method) {
-            return (method.type == GET_SET || method.type == STATIC_FENCE);
+            return (method.type == GET_SET);
         }
 
         static final Source DATA_SOURCE = new Source() {
@@ -389,12 +383,6 @@
         SetOpaque(GET_SET),
         SetRelease(GET_SET),
 
-        FullFence(STATIC_FENCE),
-        AcquireFence(STATIC_FENCE),
-        ReleaseFence(STATIC_FENCE),
-        LoadLoadFence(STATIC_FENCE),
-        StoreStoreFence(STATIC_FENCE),
-
         CompareAndSet(ATOMIC_UPDATE),
         CompareAndExchangeVolatile(ATOMIC_UPDATE),
         CompareAndExchangeAcquire(ATOMIC_UPDATE),
@@ -416,7 +404,7 @@
         Type type;
 
         enum Type {
-            GET_SET, STATIC_FENCE, ATOMIC_UPDATE, NUMERIC_ATOMIC_UPDATE;
+            GET_SET, ATOMIC_UPDATE, NUMERIC_ATOMIC_UPDATE;
         }
     }
 
@@ -472,36 +460,6 @@
                 of(GETOPAQUE)
         ),
 
-        T_GET_LOADLOADFENCE(
-                "%GetLoadLoadFence<>%",
-                of(GET_ACQUIREFENCE, GET_LOADLOADFENCE, GET_FULLFENCE)
-        ),
-
-        T_LOADSTOREFENCE_SET(
-                "%LoadStoreFenceSet<(.+)>%",
-                of(RELEASEFENCE_SET, FULLFENCE_SET)
-        ),
-
-        T_GET_LOADSTOREFENCE(
-                "%GetLoadStoreFence<>%",
-                of(GET_ACQUIREFENCE, GET_FULLFENCE)
-        ),
-
-        T_STORESTOREFENCE_SET(
-                "%StoreStoreFenceSet<(.+)>%",
-                of(RELEASEFENCE_SET, STORESTOREFENCE_SET, FULLFENCE_SET)
-        ),
-
-        T_SET_STORESTOREFENCE(
-                "%SetStoreStoreFence<(.+)>%",
-                of(SET_RELEASEFENCE, SET_STORESTOREFENCE, SET_FULLFENCE)
-        ),
-
-        T_SET_STORELOADFENCE(
-                "%SetStoreLoadFence<(.+)>%",
-                of(SET_FULLFENCE)
-        ),
-
         ;
 
         Target(String target, Set<Operation> operations) {
@@ -683,58 +641,6 @@
                     GetOpaque
             ),
 
-            /* -------------------------------- fences -------------------------------- */
-
-            GET_LOADLOADFENCE(
-                    "%GetVar%;" + LNSEP + "VarHandle.loadLoadFence();",
-                    LoadLoadFence
-            ),
-
-            STORESTOREFENCE_SET(
-                    "VarHandle.storeStoreFence();" + LNSEP + "%SetVar<$1>%",
-                    StoreStoreFence
-            ),
-
-            SET_STORESTOREFENCE(
-                    "%SetVar<$1>%" + LNSEP + "VarHandle.storeStoreFence();",
-                    StoreStoreFence
-            ),
-
-            GET_ACQUIREFENCE(
-                    "%GetVar%;" + LNSEP + "VarHandle.acquireFence();",
-                    AcquireFence
-            ),
-
-            RELEASEFENCE_SET(
-                    "VarHandle.releaseFence();" + LNSEP + "%SetVar<$1>%",
-                    ReleaseFence
-            ),
-
-            SET_RELEASEFENCE(
-                    "%SetVar<$1>%" + LNSEP + "VarHandle.releaseFence();",
-                    ReleaseFence
-            ),
-
-            SET_FULLFENCE(
-                    "%SetVar<$1>%" + LNSEP + "VarHandle.fullFence();",
-                    FullFence
-            ),
-
-            FULLFENCE_SET(
-                    "VarHandle.fullFence();" + LNSEP + "%SetVar<$1>%",
-                    FullFence
-            ),
-
-            GET_FULLFENCE(
-                    "%GetVar%;" + LNSEP + "VarHandle.fullFence();",
-                    FullFence
-            ),
-
-            FULLFENCE_GET(
-                    "VarHandle.fullFence();" + LNSEP + "%GetVar%;",
-                    FullFence
-            ),
-
             ;
 
             Operation(String operation, Method method) {
@@ -766,22 +672,15 @@
     }
 
     private static final Map<String, Target> TEMPLATES = Map.ofEntries(
-            entry("AddAndGetTest", T_ADDANDGET),
-            entry("CAETest", T_CAE),
-            entry("CASTest", T_CAS),
-            entry("GetAndAddTest", T_GETANDADD),
-            entry("GetAndSetTest", T_GETANDSET),
-            entry("WeakCASTest", T_WEAKCAS),
-            entry("WeakCASContendStrongTest", T_WEAKCAS),
-            entry("LoadLoadFenceTest", T_GET_LOADLOADFENCE),
-            entry("LoadStoreFenceTest1", T_LOADSTOREFENCE_SET),
-            entry("LoadStoreFenceTest2", T_GET_LOADSTOREFENCE),
-            entry("StoreLoadFenceTest", T_SET_STORELOADFENCE),
-            entry("StoreStoreFenceTest1", T_STORESTOREFENCE_SET),
-            entry("StoreStoreFenceTest2", T_SET_STORESTOREFENCE)
+            entry("X-AddAndGetTest", T_ADDANDGET),
+            entry("X-CAETest", T_CAE),
+            entry("X-CASTest", T_CAS),
+            entry("X-GetAndAddTest", T_GETANDADD),
+            entry("X-GetAndSetTest", T_GETANDSET),
+            entry("X-WeakCASTest", T_WEAKCAS),
+            entry("X-WeakCASContendStrongTest", T_WEAKCAS)
     );
 
-
-    private static final String BASE_PKG = "org.openjdk.jcstress.tests.varHandles";
+    private static final String BASE_PKG = "org.openjdk.jcstress.tests.varHandles.atomicity";
 
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/java/org/openjdk/jcstress/chapters/Chapter1cTestGenerator.java	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,236 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package org.openjdk.jcstress.chapters;
+
+
+import org.openjdk.jcstress.Spp;
+import org.openjdk.jcstress.Values;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import static java.util.Map.entry;
+import static java.util.Set.of;
+import static org.openjdk.jcstress.chapters.Chapter1cTestGenerator.Method.*;
+import static org.openjdk.jcstress.chapters.Chapter1cTestGenerator.Target.Operation.*;
+import static org.openjdk.jcstress.chapters.Chapter1cTestGenerator.Target.*;
+import static org.openjdk.jcstress.chapters.GeneratorUtils.*;
+
+public class Chapter1cTestGenerator {
+
+    public static final String[] TYPES = new String[]{"byte", "boolean", "char", "short", "int", "float", "long", "double", "String"};
+
+    public static void main(String[] args) throws Exception {
+        if (args.length < 1) {
+            throw new IllegalStateException("Need a destination argument");
+        }
+        String dest = args[0];
+
+        for(Entry<String, Target> template : TEMPLATES.entrySet()) {
+            final String templateName = template.getKey();
+            final Target target = template.getValue();
+
+            makeFieldTests(dest, target, templateName,
+                    readFromResource("/fences/" + templateName + ".java.template"));
+
+        }
+    }
+
+    private static void makeFieldTests(String dest, Target target, String templateName, String template) throws IOException {
+        for (String type : TYPES) {
+            for (Operation operation : target.operations) {
+                String result = generateConcreteOperation(template, target.target, operation.operation,
+                        "field", "field = $1;");
+
+                String pkg = BASE_PKG + "." + templateName.replaceAll("^X-", "");
+                String testName = operation.method.name() + upcaseFirst(type);
+
+                writeOut(dest, pkg, testName, Spp.spp(result,
+                        keys(type),
+                        vars(type, "this", pkg, testName)
+                ));
+            }
+        }
+    }
+
+    private static String generateConcreteOperation(String result, String target, String concreteOp,
+            String getOp, String setOp) {
+        return result
+                .replaceAll(target, concreteOp)
+                .replaceAll("%GetVar%", getOp)
+                .replaceAll("%SetVar<(.+)>%", setOp);
+    }
+
+    private static boolean alwaysAtomic(String type) {
+        return !(type.equals("double") || type.equals("long"));
+    }
+
+    private static Set<String> keys(String type) {
+        if (alwaysAtomic(type))
+            return of("alwaysAtomic");
+        else
+            return of();
+    }
+
+    private static Map<String, String> vars(String type, String object, String pkg, String testName) {
+        Map<String, String> map = new HashMap<>();
+        map.put("type", type);
+        map.put("Type", upcaseFirst(type));
+        map.put("TestClassName", testName);
+        map.put("package", pkg);
+        map.put("object", object);
+
+        map.put("value0", Values.DEFAULTS.get(type));
+        map.put("value1", Values.VALUES.get(type));
+        map.put("valueLiteral0", Values.DEFAULTS_LITERAL.get(type));
+        map.put("valueLiteral1", Values.VALUES_LITERAL.get(type));
+        return map;
+    }
+
+    enum Method {
+        FullFence,
+        AcquireFence,
+        ReleaseFence,
+        LoadLoadFence,
+        StoreStoreFence,
+    }
+
+    private static final String LNSEP = System.getProperty("line.separator");
+
+    enum Target {
+        T_GET_LOADLOADFENCE(
+                "%GetLoadLoadFence<>%",
+                of(GET_ACQUIREFENCE, GET_LOADLOADFENCE, GET_FULLFENCE)
+        ),
+
+        T_LOADSTOREFENCE_SET(
+                "%LoadStoreFenceSet<(.+)>%",
+                of(RELEASEFENCE_SET, FULLFENCE_SET)
+        ),
+
+        T_GET_LOADSTOREFENCE(
+                "%GetLoadStoreFence<>%",
+                of(GET_ACQUIREFENCE, GET_FULLFENCE)
+        ),
+
+        T_STORESTOREFENCE_SET(
+                "%StoreStoreFenceSet<(.+)>%",
+                of(RELEASEFENCE_SET, STORESTOREFENCE_SET, FULLFENCE_SET)
+        ),
+
+        T_SET_STORESTOREFENCE(
+                "%SetStoreStoreFence<(.+)>%",
+                of(SET_RELEASEFENCE, SET_STORESTOREFENCE, SET_FULLFENCE)
+        ),
+
+        T_SET_STORELOADFENCE(
+                "%SetStoreLoadFence<(.+)>%",
+                of(SET_FULLFENCE)
+        ),
+
+        ;
+
+        Target(String target, Set<Operation> operations) {
+            this.target = target;
+            this.operations = operations;
+        }
+
+        String target;
+        Set<Operation> operations;
+
+        enum Operation {
+            GET_LOADLOADFENCE(
+                    "%GetVar%;" + LNSEP + "VarHandle.loadLoadFence();",
+                    LoadLoadFence
+            ),
+
+            STORESTOREFENCE_SET(
+                    "VarHandle.storeStoreFence();" + LNSEP + "%SetVar<$1>%",
+                    StoreStoreFence
+            ),
+
+            SET_STORESTOREFENCE(
+                    "%SetVar<$1>%" + LNSEP + "VarHandle.storeStoreFence();",
+                    StoreStoreFence
+            ),
+
+            GET_ACQUIREFENCE(
+                    "%GetVar%;" + LNSEP + "VarHandle.acquireFence();",
+                    AcquireFence
+            ),
+
+            RELEASEFENCE_SET(
+                    "VarHandle.releaseFence();" + LNSEP + "%SetVar<$1>%",
+                    ReleaseFence
+            ),
+
+            SET_RELEASEFENCE(
+                    "%SetVar<$1>%" + LNSEP + "VarHandle.releaseFence();",
+                    ReleaseFence
+            ),
+
+            SET_FULLFENCE(
+                    "%SetVar<$1>%" + LNSEP + "VarHandle.fullFence();",
+                    FullFence
+            ),
+
+            FULLFENCE_SET(
+                    "VarHandle.fullFence();" + LNSEP + "%SetVar<$1>%",
+                    FullFence
+            ),
+
+            GET_FULLFENCE(
+                    "%GetVar%;" + LNSEP + "VarHandle.fullFence();",
+                    FullFence
+            ),
+
+            ;
+
+            Operation(String operation, Method method) {
+                this.operation = operation;
+                this.method = method;
+            }
+
+            String operation;
+            Method method;
+        }
+    }
+
+    private static final Map<String, Target> TEMPLATES = Map.ofEntries(
+            entry("X-LoadLoadFenceTest",    T_GET_LOADLOADFENCE),
+            entry("X-LoadStoreFenceTest1",  T_LOADSTOREFENCE_SET),
+            entry("X-LoadStoreFenceTest2",  T_GET_LOADSTOREFENCE),
+            entry("X-StoreLoadFenceTest",   T_SET_STORELOADFENCE),
+            entry("X-StoreStoreFenceTest1", T_STORESTOREFENCE_SET),
+            entry("X-StoreStoreFenceTest2", T_SET_STORESTOREFENCE)
+    );
+
+
+    private static final String BASE_PKG = "org.openjdk.jcstress.tests.varHandles.fences";
+
+}
--- a/jcstress-test-gen/src/main/resources/chapter1b/arrays/AddAndGetTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result3;
-
-
-@JCStressTest
-@Description("Tests atomicity of addAndGet.")
-@Outcome(id = "$value2$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
-@Outcome(id = "$value1$, $value2$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
-@Outcome(id = "$value1$, $value1$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because addAndGet is atomic")
-@State
-public class $TestClassName$ {
-
-    $type$[] array = new $type$[1];
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.arrayElementVarHandle($type$[].class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Actor
-    public void actor1($Type$Result3 r) {
-        r.r1 = ($type$) %AddAndGet<$valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2($Type$Result3 r) {
-        r.r2 = ($type$) %AddAndGet<$valueLiteral1$>%
-    }
-
-    @Arbiter
-    public void arbiter1($Type$Result3 r) {
-        r.r3 = array[0];
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/arrays/CAETest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result3;
-
-
-@JCStressTest
-@Description("Tests atomicity of compareAndExchange.")
-@Outcome(id = "$value2$, $value0$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor2 update successfully")
-@Outcome(id = "$value0$, $value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
-@Outcome(id = "$value0$, $value0$, $value0$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
-@Outcome(id = "$value0$, $value0$, $value2$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
-@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
-@State
-public class $TestClassName$ {
-
-    $type$[] array = new $type$[1];
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.arrayElementVarHandle($type$[].class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Actor
-    public void actor1($Type$Result3 r) {
-        r.r1 = %CAE<$valueLiteral0$, $valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2($Type$Result3 r) {
-        r.r2 = %CAE<$valueLiteral0$, $valueLiteral2$>%
-    }
-
-    @Arbiter
-    public void arbiter1($Type$Result3 r) {
-        r.r3 = array[0];
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/arrays/CASTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
-
-
-@JCStressTest
-@Description("Tests atomicity of compareAndSet.")
-@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
-@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor2 update successfully")
-@Outcome(id = "false, false, $value0$", expect = Expect.FORBIDDEN, desc = "not both shall fail")
-@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
-@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
-@State
-public class $TestClassName$ {
-
-    $type$[] array = new $type$[1];
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.arrayElementVarHandle($type$[].class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Actor
-    public void actor1(Bool2$Type$Result r) {
-        r.r1 = %CAS<$valueLiteral0$, $valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2(Bool2$Type$Result r) {
-        r.r2 = %CAS<$valueLiteral0$, $valueLiteral2$>%
-    }
-
-    @Arbiter
-    public void arbiter1(Bool2$Type$Result r) {
-        r.r3 = array[0];
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/arrays/GetAndAddTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result3;
-
-
-@JCStressTest
-@Description("Tests atomicity of getAndAdd.")
-@Outcome(id = "$value1$, $value0$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
-@Outcome(id = "$value0$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
-@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndAdd is atomic")
-@State
-public class $TestClassName$ {
-
-    $type$[] array = new $type$[1];
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.arrayElementVarHandle($type$[].class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Actor
-    public void actor1($Type$Result3 r) {
-        r.r1 = ($type$) %GetAndAdd<$valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2($Type$Result3 r) {
-        r.r2 = ($type$) %GetAndAdd<$valueLiteral1$>%
-    }
-
-    @Arbiter
-    public void arbiter1($Type$Result3 r) {
-        r.r3 = array[0];
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/arrays/GetAndSetTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result3;
-
-
-@JCStressTest
-@Description("Tests atomicity of getAndSet.")
-@Outcome(id = "$value0$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
-@Outcome(id = "$value2$, $value0$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
-@Outcome(id = "$value0$, $value0$, $value2$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndSet is atomic")
-@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndSet is atomic")
-@State
-public class $TestClassName$ {
-
-    $type$[] array = new $type$[1];
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.arrayElementVarHandle($type$[].class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Actor
-    public void actor1($Type$Result3 r) {
-        r.r1 = ($type$) %GetAndSet<$valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2($Type$Result3 r) {
-        r.r2 = ($type$) %GetAndSet<$valueLiteral2$>%
-    }
-
-    @Arbiter
-    public void arbiter1($Type$Result3 r) {
-        r.r3 = array[0];
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/arrays/LoadLoadFenceTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of load load fence.")
-@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables before actor1 update")
-@Outcome(id = "$value0$, $value1$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables after x is already updated but var hasn't yet")
-@Outcome(id = "$value1$, $value0$", expect = Expect.FORBIDDEN,  desc = "var won't be observed to be updated before x is updated")
-@Outcome(id = "$value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 observe the variables after actor1 update completely")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, when load x in actor2 before fullFence in actor1")
-@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, if r1 is half-value, load x must get a full-value")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    $type$ x;
-
-    $type$[] array = new $type$[1];
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.arrayElementVarHandle($type$[].class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-
-    @Actor
-    public void actor1() {
-        x = $valueLiteral1$;
-        VarHandle.fullFence();
-        array[0] = $valueLiteral1$;
-    }
-
-    @Actor
-    public void actor2($Type$Result2 r) {
-        r.r1 = %GetLoadLoadFence<>%
-        r.r2 = x;
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/arrays/LoadStoreFenceTest1.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of load store fence.")
-@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "load var in actor2 before store $value1$ to var in actor1, all results are $value0$")
-@Outcome(id = "$value1$, $value0$", expect = Expect.ACCEPTABLE, desc = "store $value1$ to var in actor1 before load var in actor2")
-@Outcome(id = "$value1$, $value1$", expect = Expect.FORBIDDEN,  desc = "can't load x after store var in actor1.")
-@Outcome(id = "$value0$, $value1$", expect = Expect.FORBIDDEN,  desc = "this won't happen even if load x after store var because only if r1 = $value1$ x may be assigned to $value1$ and then r2 can be $value1$ from x.")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-@Outcome(id = ".*, $value0$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, r2 only can be assigned to 0.")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    $type$ x;
-
-    $type$[] array = new $type$[1];
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.arrayElementVarHandle($type$[].class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-
-    @Actor
-    public void actor1($Type$Result2 r) {
-        $type$ i = x;
-        %LoadStoreFenceSet<$valueLiteral1$>%
-        r.r2 = i;
-    }
-
-    @Actor
-    public void actor2($Type$Result2 r) {
-        r.r1 = array[0];
-        x = r.r1;
-    }
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/arrays/LoadStoreFenceTest2.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of load store fence.")
-@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "load y in actor2 before store $value1$ to y in actor1, all results are $value0$")
-@Outcome(id = "$value1$, $value0$", expect = Expect.ACCEPTABLE, desc = "store $value1$ to y in actor1 before load y in actor2")
-@Outcome(id = "$value1$, $value1$", expect = Expect.FORBIDDEN,  desc = "can't load var after store y in actor1.")
-@Outcome(id = "$value0$, $value1$", expect = Expect.FORBIDDEN,  desc = "this won't happen even if load var after store y because only if r1 = $value1$ var may be assigned to $value1$ and then r2 can be $value1$ from var.")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-@Outcome(id = ".*, $value0$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, r2 only can be assigned to 0.")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    $type$ y;
-
-    $type$[] array = new $type$[1];
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.arrayElementVarHandle($type$[].class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-
-    @Actor
-    public void actor1($Type$Result2 r) {
-        $type$ i = %GetLoadStoreFence<>%
-        y = $valueLiteral1$;
-        r.r2 = i;
-    }
-
-    @Actor
-    public void actor2($Type$Result2 r) {
-        r.r1 = y;
-        array[0] = r.r1;
-    }
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/arrays/StoreLoadFenceTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import java.lang.invoke.MethodHandles;
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of store load fence.")
-@Outcome(id = "$value1$, $value0$", expect = Expect.ACCEPTABLE, desc = "actor1 observe actor2 update, actor2 not yet observe actor1 update")
-@Outcome(id = "$value0$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 observe actor1 update, actor1 not yet observe actor2 update")
-@Outcome(id = "$value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "both actor1 and actor2 observe each other update")
-@Outcome(id = "$value0$, $value0$", expect = Expect.FORBIDDEN, desc = "if r1 = 0, store var must be submitted already before fullFence in actor2, r2 must get the update")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-//if r1 is half-value or value0, store var is submitted before fullFence in actor2, r2 must be full-value, vice versa.
-@Outcome(id = "$value1$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec.")
-@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    $type$ x;
-
-    $type$[] array = new $type$[1];
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.arrayElementVarHandle($type$[].class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Actor
-    public void actor1($Type$Result2 r) {
-        %SetStoreLoadFence<$valueLiteral1$>%
-        r.r1 = x;
-    }
-
-    @Actor
-    public void actor2($Type$Result2 r) {
-        x = $valueLiteral1$;
-        VarHandle.fullFence();
-        r.r2 = array[0];
-    }
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/arrays/StoreStoreFenceTest1.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of store store fence.")
-@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables before actor1 update")
-@Outcome(id = "$value0$, $value1$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables after x is already updated but var hasn't yet")
-@Outcome(id = "$value1$, $value0$", expect = Expect.FORBIDDEN,  desc = "var won't be observed to be updated before x is updated")
-@Outcome(id = "$value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 observe the variables after actor1 update completely")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, when load x in actor2 before storestore Fence in actor1")
-@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, if r1 is half-value, load x must get a full-value")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    $type$ x;
-
-    $type$[] array = new $type$[1];
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.arrayElementVarHandle($type$[].class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-
-    @Actor
-    public void actor1() {
-        x = $valueLiteral1$;
-        %StoreStoreFenceSet<$valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2($Type$Result2 r) {
-        r.r1 = array[0];
-        VarHandle.fullFence();
-        r.r2 = x;
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/arrays/StoreStoreFenceTest2.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of store store fence.")
-@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables before actor1 update")
-@Outcome(id = "$value0$, $value1$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables after var is already updated but y hasn't yet")
-@Outcome(id = "$value1$, $value0$", expect = Expect.FORBIDDEN,  desc = "y won't be observed to be updated before var is updated")
-@Outcome(id = "$value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 observe the variables after actor1 update completely")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, when load var in actor2 before storestore Fence in actor1")
-@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, if r1 is half-value, load var must get a full-value")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    $type$ y;
-
-    $type$[] array = new $type$[1];
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.arrayElementVarHandle($type$[].class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-
-    @Actor
-    public void actor1() {
-        %SetStoreStoreFence<$valueLiteral1$>%
-        y = $valueLiteral1$;
-    }
-
-    @Actor
-    public void actor2($Type$Result2 r) {
-        r.r1 = y;
-        VarHandle.fullFence();
-        r.r2 = array[0];
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/arrays/WeakCASContendStrongTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
-
-
-@JCStressTest
-@Description("Tests weakCompareAndSet contend with strong compareAndSet.")
-@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 execute after actor1")
-@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE, desc = "actor2 execute before actor1 or win the contention with actor1")
-@Outcome(id = "false, false, $value0$", expect = Expect.FORBIDDEN,  desc = "not both shall fail")
-@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN,  desc = "not both shall succeed")
-@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
-@State
-public class $TestClassName$ {
-
-    $type$[] array = new $type$[1];
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.arrayElementVarHandle($type$[].class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Actor
-    public void actor1(Bool2$Type$Result r) {
-        r.r1 = %WeakCAS<$valueLiteral0$, $valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2(Bool2$Type$Result r) {
-        r.r2 = %CompareAndSet<$valueLiteral0$, $valueLiteral2$>%
-    }
-
-    @Arbiter
-    public void arbiter1(Bool2$Type$Result r) {
-        r.r3 = array[0];
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/arrays/WeakCASTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
-
-
-@JCStressTest
-@Description("Tests atomicity of weakCompareAndSet.")
-@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
-@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE, desc = "actor2 update successfully")
-@Outcome(id = "false, false, $value0$", expect = Expect.ACCEPTABLE,  desc = "both may fail")
-@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
-@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
-@State
-public class $TestClassName$ {
-
-    $type$[] array = new $type$[1];
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.arrayElementVarHandle($type$[].class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Actor
-    public void actor1(Bool2$Type$Result r) {
-        r.r1 = %WeakCAS<$valueLiteral0$, $valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2(Bool2$Type$Result r) {
-        r.r2 = %WeakCAS<$valueLiteral0$, $valueLiteral2$>%
-    }
-
-    @Arbiter
-    public void arbiter1(Bool2$Type$Result r) {
-        r.r3 = array[0];
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteArray/AddAndGetTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result3;
-
-
-@JCStressTest
-@Description("Tests atomicity of addAndGet.")
-@Outcome(id = "$value2$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
-@Outcome(id = "$value1$, $value2$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
-@Outcome(id = "$value1$, $value1$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because addAndGet is atomic")
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteArrayViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    byte[] byteArray = new byte[OFF + 8];
-
-    @Actor
-    public void actor1($Type$Result3 r) {
-        r.r1 = ($type$) %AddAndGet<$valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2($Type$Result3 r) {
-        r.r2 = ($type$) %AddAndGet<$valueLiteral1$>%
-    }
-
-    @Arbiter
-    public void arbiter1($Type$Result3 r) {
-        r.r3 = ($type$) vh.get(byteArray, OFF);
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteArray/CAETest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result3;
-
-
-@JCStressTest
-@Description("Tests atomicity of compareAndExchange.")
-@Outcome(id = "$value2$, $value0$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor2 update successfully")
-@Outcome(id = "$value0$, $value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
-@Outcome(id = "$value0$, $value0$, $value0$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
-@Outcome(id = "$value0$, $value0$, $value2$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
-@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteArrayViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    byte[] byteArray = new byte[OFF + 8];
-
-    @Actor
-    public void actor1($Type$Result3 r) {
-        r.r1 = %CAE<$valueLiteral0$, $valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2($Type$Result3 r) {
-        r.r2 = %CAE<$valueLiteral0$, $valueLiteral2$>%
-    }
-
-    @Arbiter
-    public void arbiter1($Type$Result3 r) {
-        r.r3 = ($type$) vh.get(byteArray, OFF);
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteArray/CASTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
-
-
-@JCStressTest
-@Description("Tests atomicity of compareAndSet.")
-@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
-@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor2 update successfully")
-@Outcome(id = "false, false, $value0$", expect = Expect.FORBIDDEN, desc = "not both shall fail")
-@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
-@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteArrayViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    byte[] byteArray = new byte[OFF + 8];
-
-    @Actor
-    public void actor1(Bool2$Type$Result r) {
-        r.r1 = %CAS<$valueLiteral0$, $valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2(Bool2$Type$Result r) {
-        r.r2 = %CAS<$valueLiteral0$, $valueLiteral2$>%
-    }
-
-    @Arbiter
-    public void arbiter1(Bool2$Type$Result r) {
-        r.r3 = ($type$) vh.get(byteArray, OFF);
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteArray/GetAndAddTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result3;
-
-
-@JCStressTest
-@Description("Tests atomicity of getAndAdd.")
-@Outcome(id = "$value1$, $value0$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
-@Outcome(id = "$value0$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
-@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndAdd is atomic")
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteArrayViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    byte[] byteArray = new byte[OFF + 8];
-
-    @Actor
-    public void actor1($Type$Result3 r) {
-        r.r1 = ($type$) %GetAndAdd<$valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2($Type$Result3 r) {
-        r.r2 = ($type$) %GetAndAdd<$valueLiteral1$>%
-    }
-
-    @Arbiter
-    public void arbiter1($Type$Result3 r) {
-        r.r3 = ($type$) vh.get(byteArray, OFF);
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteArray/GetAndSetTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result3;
-
-
-@JCStressTest
-@Description("Tests atomicity of getAndSet.")
-@Outcome(id = "$value0$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
-@Outcome(id = "$value2$, $value0$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
-@Outcome(id = "$value0$, $value0$, $value2$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndSet is atomic")
-@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndSet is atomic")
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteArrayViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    byte[] byteArray = new byte[OFF + 8];
-
-    @Actor
-    public void actor1($Type$Result3 r) {
-        r.r1 = ($type$) %GetAndSet<$valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2($Type$Result3 r) {
-        r.r2 = ($type$) %GetAndSet<$valueLiteral2$>%
-    }
-
-    @Arbiter
-    public void arbiter1($Type$Result3 r) {
-        r.r3 = ($type$) vh.get(byteArray, OFF);
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteArray/LoadLoadFenceTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of load load fence.")
-@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables before actor1 update")
-@Outcome(id = "$value0$, $value1$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables after x is already updated but var hasn't yet")
-@Outcome(id = "$value1$, $value0$", expect = Expect.FORBIDDEN,  desc = "var won't be observed to be updated before x is updated")
-@Outcome(id = "$value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 observe the variables after actor1 update completely")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, when load x in actor2 before fullFence in actor1")
-@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, if r1 is half-value, load x must get a full-value")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteArrayViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    byte[] byteArray = new byte[OFF + 8];
-
-    $type$ x;
-
-    @Actor
-    public void actor1() {
-        x = $valueLiteral1$;
-        VarHandle.fullFence();
-        vh.set(byteArray, OFF, $valueLiteral1$);
-    }
-
-    @Actor
-    public void actor2($Type$Result2 r) {
-        r.r1 = %GetLoadLoadFence<>%
-        r.r2 = x;
-    }
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteArray/LoadStoreFenceTest1.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of load store fence.")
-@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "load var in actor2 before store $value1$ to var in actor1, all results are $value0$")
-@Outcome(id = "$value1$, $value0$", expect = Expect.ACCEPTABLE, desc = "store $value1$ to var in actor1 before load var in actor2")
-@Outcome(id = "$value1$, $value1$", expect = Expect.FORBIDDEN,  desc = "can't load x after store var in actor1.")
-@Outcome(id = "$value0$, $value1$", expect = Expect.FORBIDDEN,  desc = "this won't happen even if load x after store var because only if r1 = $value1$ x may be assigned to $value1$ and then r2 can be $value1$ from x.")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-@Outcome(id = ".*, $value0$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, r2 only can be assigned to 0.")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteArrayViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    byte[] byteArray = new byte[OFF + 8];
-
-    $type$ x;
-
-    @Actor
-    public void actor1($Type$Result2 r) {
-        $type$ i = x;
-        %LoadStoreFenceSet<$valueLiteral1$>%
-        r.r2 = i;
-    }
-
-    @Actor
-    public void actor2($Type$Result2 r) {
-        r.r1 = ($type$) vh.get(byteArray, OFF);
-        x = r.r1;
-    }
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteArray/LoadStoreFenceTest2.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of load store fence.")
-@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "load y in actor2 before store $value1$ to y in actor1, all results are $value0$")
-@Outcome(id = "$value1$, $value0$", expect = Expect.ACCEPTABLE, desc = "store $value1$ to y in actor1 before load y in actor2")
-@Outcome(id = "$value1$, $value1$", expect = Expect.FORBIDDEN,  desc = "can't load var after store y in actor1.")
-@Outcome(id = "$value0$, $value1$", expect = Expect.FORBIDDEN,  desc = "this won't happen even if load var after store y because only if r1 = $value1$ var may be assigned to $value1$ and then r2 can be $value1$ from var.")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-@Outcome(id = ".*, $value0$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, r2 only can be assigned to 0.")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteArrayViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    byte[] byteArray = new byte[OFF + 8];
-
-    $type$ y;
-
-    @Actor
-    public void actor1($Type$Result2 r) {
-        $type$ i = %GetLoadStoreFence<>%
-        y = $valueLiteral1$;
-        r.r2 = i;
-    }
-
-    @Actor
-    public void actor2($Type$Result2 r) {
-        r.r1 = y;
-        vh.set(byteArray, OFF, r.r1);
-    }
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteArray/StoreLoadFenceTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import java.lang.invoke.MethodHandles;
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of store load fence.")
-@Outcome(id = "$value1$, $value0$", expect = Expect.ACCEPTABLE, desc = "actor1 observe actor2 update, actor2 not yet observe actor1 update")
-@Outcome(id = "$value0$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 observe actor1 update, actor1 not yet observe actor2 update")
-@Outcome(id = "$value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "both actor1 and actor2 observe each other update")
-@Outcome(id = "$value0$, $value0$", expect = Expect.FORBIDDEN, desc = "if r1 = 0, store var must be submitted already before fullFence in actor2, r2 must get the update")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-//if r1 is half-value or value0, store var is submitted before fullFence in actor2, r2 must be full-value, vice versa.
-@Outcome(id = "$value1$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec.")
-@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteArrayViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    byte[] byteArray = new byte[OFF + 8];
-
-    $type$ x;
-
-    @Actor
-    public void actor1($Type$Result2 r) {
-        %SetStoreLoadFence<$valueLiteral1$>%
-        r.r1 = x;
-    }
-
-    @Actor
-    public void actor2($Type$Result2 r) {
-        x = $valueLiteral1$;
-        VarHandle.fullFence();
-        r.r2 = ($type$) vh.get(byteArray, OFF);
-    }
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteArray/StoreStoreFenceTest1.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of store store fence.")
-@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables before actor1 update")
-@Outcome(id = "$value0$, $value1$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables after x is already updated but var hasn't yet")
-@Outcome(id = "$value1$, $value0$", expect = Expect.FORBIDDEN,  desc = "var won't be observed to be updated before x is updated")
-@Outcome(id = "$value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 observe the variables after actor1 update completely")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, when load x in actor2 before storestore Fence in actor1")
-@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, if r1 is half-value, load x must get a full-value")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteArrayViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    byte[] byteArray = new byte[OFF + 8];
-
-    $type$ x;
-
-    @Actor
-    public void actor1() {
-        x = $valueLiteral1$;
-        %StoreStoreFenceSet<$valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2($Type$Result2 r) {
-        r.r1 = ($type$) vh.get(byteArray, OFF);
-        VarHandle.fullFence();
-        r.r2 = x;
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteArray/StoreStoreFenceTest2.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of store store fence.")
-@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables before actor1 update")
-@Outcome(id = "$value0$, $value1$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables after var is already updated but y hasn't yet")
-@Outcome(id = "$value1$, $value0$", expect = Expect.FORBIDDEN,  desc = "y won't be observed to be updated before var is updated")
-@Outcome(id = "$value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 observe the variables after actor1 update completely")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, when load var in actor2 before storestore Fence in actor1")
-@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, if r1 is half-value, load var must get a full-value")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteArrayViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    byte[] byteArray = new byte[OFF + 8];
-
-    $type$ y;
-
-    @Actor
-    public void actor1() {
-        %SetStoreStoreFence<$valueLiteral1$>%
-        y = $valueLiteral1$;
-    }
-
-    @Actor
-    public void actor2($Type$Result2 r) {
-        r.r1 = y;
-        VarHandle.fullFence();
-        r.r2 = ($type$) vh.get(byteArray, OFF);
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteArray/WeakCASContendStrongTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
-
-
-@JCStressTest
-@Description("Tests weakCompareAndSet contend with strong compareAndSet.")
-@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 execute after actor1")
-@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE, desc = "actor2 execute before actor1 or win the contention with actor1")
-@Outcome(id = "false, false, $value0$", expect = Expect.FORBIDDEN,  desc = "not both shall fail")
-@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN,  desc = "not both shall succeed")
-@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteArrayViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    byte[] byteArray = new byte[OFF + 8];
-
-    @Actor
-    public void actor1(Bool2$Type$Result r) {
-        r.r1 = %WeakCAS<$valueLiteral0$, $valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2(Bool2$Type$Result r) {
-        r.r2 = %CompareAndSet<$valueLiteral0$, $valueLiteral2$>%
-    }
-
-    @Arbiter
-    public void arbiter1(Bool2$Type$Result r) {
-        r.r3 = ($type$) vh.get(byteArray, OFF);
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteArray/WeakCASTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
-
-
-@JCStressTest
-@Description("Tests atomicity of weakCompareAndSet.")
-@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
-@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE, desc = "actor2 update successfully")
-@Outcome(id = "false, false, $value0$", expect = Expect.ACCEPTABLE,  desc = "both may fail")
-@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
-@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteArrayViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    byte[] byteArray = new byte[OFF + 8];
-
-    @Actor
-    public void actor1(Bool2$Type$Result r) {
-        r.r1 = %WeakCAS<$valueLiteral0$, $valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2(Bool2$Type$Result r) {
-        r.r2 = %WeakCAS<$valueLiteral0$, $valueLiteral2$>%
-    }
-
-    @Arbiter
-    public void arbiter1(Bool2$Type$Result r) {
-        r.r3 = ($type$) vh.get(byteArray, OFF);
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/AddAndGetTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result3;
-
-
-@JCStressTest
-@Description("Tests atomicity of addAndGet.")
-@Outcome(id = "$value2$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
-@Outcome(id = "$value1$, $value2$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
-@Outcome(id = "$value1$, $value1$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because addAndGet is atomic")
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteBufferViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    ByteBuffer byteBuffer = $buffer_allocate$(OFF + 8);
-
-    @Actor
-    public void actor1($Type$Result3 r) {
-        r.r1 = ($type$) %AddAndGet<$valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2($Type$Result3 r) {
-        r.r2 = ($type$) %AddAndGet<$valueLiteral1$>%
-    }
-
-    @Arbiter
-    public void arbiter1($Type$Result3 r) {
-        r.r3 = ($type$) vh.get(byteBuffer, OFF);
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/CAETest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result3;
-
-
-@JCStressTest
-@Description("Tests atomicity of compareAndExchange.")
-@Outcome(id = "$value2$, $value0$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor2 update successfully")
-@Outcome(id = "$value0$, $value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
-@Outcome(id = "$value0$, $value0$, $value0$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
-@Outcome(id = "$value0$, $value0$, $value2$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
-@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteBufferViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    ByteBuffer byteBuffer = $buffer_allocate$(OFF + 8);
-
-    @Actor
-    public void actor1($Type$Result3 r) {
-        r.r1 = %CAE<$valueLiteral0$, $valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2($Type$Result3 r) {
-        r.r2 = %CAE<$valueLiteral0$, $valueLiteral2$>%
-    }
-
-    @Arbiter
-    public void arbiter1($Type$Result3 r) {
-        r.r3 = ($type$) vh.get(byteBuffer, OFF);
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/CASTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
-
-
-@JCStressTest
-@Description("Tests atomicity of compareAndSet.")
-@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
-@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor2 update successfully")
-@Outcome(id = "false, false, $value0$", expect = Expect.FORBIDDEN, desc = "not both shall fail")
-@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
-@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteBufferViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    ByteBuffer byteBuffer = $buffer_allocate$(OFF + 8);
-
-    @Actor
-    public void actor1(Bool2$Type$Result r) {
-        r.r1 = %CAS<$valueLiteral0$, $valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2(Bool2$Type$Result r) {
-        r.r2 = %CAS<$valueLiteral0$, $valueLiteral2$>%
-    }
-
-    @Arbiter
-    public void arbiter1(Bool2$Type$Result r) {
-        r.r3 = ($type$) vh.get(byteBuffer, OFF);
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/GetAndAddTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result3;
-
-
-@JCStressTest
-@Description("Tests atomicity of getAndAdd.")
-@Outcome(id = "$value1$, $value0$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
-@Outcome(id = "$value0$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
-@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndAdd is atomic")
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteBufferViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    ByteBuffer byteBuffer = $buffer_allocate$(OFF + 8);
-
-    @Actor
-    public void actor1($Type$Result3 r) {
-        r.r1 = ($type$) %GetAndAdd<$valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2($Type$Result3 r) {
-        r.r2 = ($type$) %GetAndAdd<$valueLiteral1$>%
-    }
-
-    @Arbiter
-    public void arbiter1($Type$Result3 r) {
-        r.r3 = ($type$) vh.get(byteBuffer, OFF);
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/GetAndSetTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result3;
-
-
-@JCStressTest
-@Description("Tests atomicity of getAndSet.")
-@Outcome(id = "$value0$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
-@Outcome(id = "$value2$, $value0$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
-@Outcome(id = "$value0$, $value0$, $value2$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndSet is atomic")
-@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndSet is atomic")
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteBufferViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    ByteBuffer byteBuffer = $buffer_allocate$(OFF + 8);
-
-    @Actor
-    public void actor1($Type$Result3 r) {
-        r.r1 = ($type$) %GetAndSet<$valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2($Type$Result3 r) {
-        r.r2 = ($type$) %GetAndSet<$valueLiteral2$>%
-    }
-
-    @Arbiter
-    public void arbiter1($Type$Result3 r) {
-        r.r3 = ($type$) vh.get(byteBuffer, OFF);
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/LoadLoadFenceTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of load load fence.")
-@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables before actor1 update")
-@Outcome(id = "$value0$, $value1$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables after x is already updated but var hasn't yet")
-@Outcome(id = "$value1$, $value0$", expect = Expect.FORBIDDEN,  desc = "var won't be observed to be updated before x is updated")
-@Outcome(id = "$value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 observe the variables after actor1 update completely")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, when load x in actor2 before fullFence in actor1")
-@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, if r1 is half-value, load x must get a full-value")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteBufferViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    ByteBuffer byteBuffer = $buffer_allocate$(OFF + 8);
-
-    $type$ x;
-
-    @Actor
-    public void actor1() {
-        x = $valueLiteral1$;
-        VarHandle.fullFence();
-        vh.set(byteBuffer, OFF, $valueLiteral1$);
-    }
-
-    @Actor
-    public void actor2($Type$Result2 r) {
-        r.r1 = %GetLoadLoadFence<>%
-        r.r2 = x;
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/LoadStoreFenceTest1.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of load store fence.")
-@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "load var in actor2 before store $value1$ to var in actor1, all results are $value0$")
-@Outcome(id = "$value1$, $value0$", expect = Expect.ACCEPTABLE, desc = "store $value1$ to var in actor1 before load var in actor2")
-@Outcome(id = "$value1$, $value1$", expect = Expect.FORBIDDEN,  desc = "can't load x after store var in actor1.")
-@Outcome(id = "$value0$, $value1$", expect = Expect.FORBIDDEN,  desc = "this won't happen even if load x after store var because only if r1 = $value1$ x may be assigned to $value1$ and then r2 can be $value1$ from x.")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-@Outcome(id = ".*, $value0$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, r2 only can be assigned to 0.")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteBufferViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    ByteBuffer byteBuffer = $buffer_allocate$(OFF + 8);
-
-    $type$ x;
-
-    @Actor
-    public void actor1($Type$Result2 r) {
-        $type$ i = x;
-        %LoadStoreFenceSet<$valueLiteral1$>%
-        r.r2 = i;
-    }
-
-    @Actor
-    public void actor2($Type$Result2 r) {
-        r.r1 = ($type$) vh.get(byteBuffer, OFF);
-        x = r.r1;
-    }
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/LoadStoreFenceTest2.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of load store fence.")
-@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "load y in actor2 before store $value1$ to y in actor1, all results are $value0$")
-@Outcome(id = "$value1$, $value0$", expect = Expect.ACCEPTABLE, desc = "store $value1$ to y in actor1 before load y in actor2")
-@Outcome(id = "$value1$, $value1$", expect = Expect.FORBIDDEN,  desc = "can't load var after store y in actor1.")
-@Outcome(id = "$value0$, $value1$", expect = Expect.FORBIDDEN,  desc = "this won't happen even if load var after store y because only if r1 = $value1$ var may be assigned to $value1$ and then r2 can be $value1$ from var.")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-@Outcome(id = ".*, $value0$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, r2 only can be assigned to 0.")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteBufferViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    ByteBuffer byteBuffer = $buffer_allocate$(OFF + 8);
-
-    $type$ y;
-
-    @Actor
-    public void actor1($Type$Result2 r) {
-        $type$ i = %GetLoadStoreFence<>%
-        y = $valueLiteral1$;
-        r.r2 = i;
-    }
-
-    @Actor
-    public void actor2($Type$Result2 r) {
-        r.r1 = y;
-        vh.set(byteBuffer, OFF, r.r1);
-    }
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/StoreLoadFenceTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import java.lang.invoke.MethodHandles;
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of store load fence.")
-@Outcome(id = "$value1$, $value0$", expect = Expect.ACCEPTABLE, desc = "actor1 observe actor2 update, actor2 not yet observe actor1 update")
-@Outcome(id = "$value0$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 observe actor1 update, actor1 not yet observe actor2 update")
-@Outcome(id = "$value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "both actor1 and actor2 observe each other update")
-@Outcome(id = "$value0$, $value0$", expect = Expect.FORBIDDEN, desc = "if r1 = 0, store var must be submitted already before fullFence in actor2, r2 must get the update")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-//if r1 is half-value or value0, store var is submitted before fullFence in actor2, r2 must be full-value, vice versa.
-@Outcome(id = "$value1$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec.")
-@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteBufferViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    ByteBuffer byteBuffer = $buffer_allocate$(OFF + 8);
-
-    $type$ x;
-
-    @Actor
-    public void actor1($Type$Result2 r) {
-        %SetStoreLoadFence<$valueLiteral1$>%
-        r.r1 = x;
-    }
-
-    @Actor
-    public void actor2($Type$Result2 r) {
-        x = $valueLiteral1$;
-        VarHandle.fullFence();
-        r.r2 = ($type$) vh.get(byteBuffer, OFF);
-    }
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/StoreStoreFenceTest1.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of store store fence.")
-@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables before actor1 update")
-@Outcome(id = "$value0$, $value1$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables after x is already updated but var hasn't yet")
-@Outcome(id = "$value1$, $value0$", expect = Expect.FORBIDDEN,  desc = "var won't be observed to be updated before x is updated")
-@Outcome(id = "$value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 observe the variables after actor1 update completely")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, when load x in actor2 before storestore Fence in actor1")
-@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, if r1 is half-value, load x must get a full-value")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteBufferViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    ByteBuffer byteBuffer = $buffer_allocate$(OFF + 8);
-
-    $type$ x;
-
-    @Actor
-    public void actor1() {
-        x = $valueLiteral1$;
-        %StoreStoreFenceSet<$valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2($Type$Result2 r) {
-        r.r1 = ($type$) vh.get(byteBuffer, OFF);
-        VarHandle.fullFence();
-        r.r2 = x;
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/StoreStoreFenceTest2.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of store store fence.")
-@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables before actor1 update")
-@Outcome(id = "$value0$, $value1$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables after var is already updated but y hasn't yet")
-@Outcome(id = "$value1$, $value0$", expect = Expect.FORBIDDEN,  desc = "y won't be observed to be updated before var is updated")
-@Outcome(id = "$value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 observe the variables after actor1 update completely")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, when load var in actor2 before storestore Fence in actor1")
-@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, if r1 is half-value, load var must get a full-value")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteBufferViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    ByteBuffer byteBuffer = $buffer_allocate$(OFF + 8);
-
-    $type$ y;
-
-    @Actor
-    public void actor1() {
-        %SetStoreStoreFence<$valueLiteral1$>%
-        y = $valueLiteral1$;
-    }
-
-    @Actor
-    public void actor2($Type$Result2 r) {
-        r.r1 = y;
-        VarHandle.fullFence();
-        r.r2 = ($type$) vh.get(byteBuffer, OFF);
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/WeakCASContendStrongTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
-
-
-@JCStressTest
-@Description("Tests weakCompareAndSet contend with strong compareAndSet.")
-@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 execute after actor1")
-@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE, desc = "actor2 execute before actor1 or win the contention with actor1")
-@Outcome(id = "false, false, $value0$", expect = Expect.FORBIDDEN,  desc = "not both shall fail")
-@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN,  desc = "not both shall succeed")
-@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteBufferViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    ByteBuffer byteBuffer = $buffer_allocate$(OFF + 8);
-
-    @Actor
-    public void actor1(Bool2$Type$Result r) {
-        r.r1 = %WeakCAS<$valueLiteral0$, $valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2(Bool2$Type$Result r) {
-        r.r2 = %CompareAndSet<$valueLiteral0$, $valueLiteral2$>%
-    }
-
-    @Arbiter
-    public void arbiter1(Bool2$Type$Result r) {
-        r.r3 = ($type$) vh.get(byteBuffer, OFF);
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/byteBuffer/WeakCASTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
-
-
-@JCStressTest
-@Description("Tests atomicity of weakCompareAndSet.")
-@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
-@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE, desc = "actor2 update successfully")
-@Outcome(id = "false, false, $value0$", expect = Expect.ACCEPTABLE,  desc = "both may fail")
-@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
-@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
-@State
-public class $TestClassName$ {
-
-    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.byteBufferViewVarHandle($type$[].class, BIG_ENDIAN);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    ByteBuffer byteBuffer = $buffer_allocate$(OFF + 8);
-
-    @Actor
-    public void actor1(Bool2$Type$Result r) {
-        r.r1 = %WeakCAS<$valueLiteral0$, $valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2(Bool2$Type$Result r) {
-        r.r2 = %WeakCAS<$valueLiteral0$, $valueLiteral2$>%
-    }
-
-    @Arbiter
-    public void arbiter1(Bool2$Type$Result r) {
-        r.r3 = ($type$) vh.get(byteBuffer, OFF);
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/fields/AddAndGetTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result3;
-
-
-@JCStressTest
-@Description("Tests atomicity of addAndGet.")
-@Outcome(id = "$value2$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
-@Outcome(id = "$value1$, $value2$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
-@Outcome(id = "$value1$, $value1$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because addAndGet is atomic")
-@State
-public class $TestClassName$ {
-
-    $type$ field;
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-    
-    @Actor
-    public void actor1($Type$Result3 r) {
-        r.r1 = ($type$) %AddAndGet<$valueLiteral1$>%
-    }
-    
-    @Actor
-    public void actor2($Type$Result3 r) {
-        r.r2 = ($type$) %AddAndGet<$valueLiteral1$>%
-    }
-
-    @Arbiter 
-    public void arbiter1($Type$Result3 r) {
-        r.r3 = field;
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/fields/CAETest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result3;
-
-
-@JCStressTest
-@Description("Tests atomicity of compareAndExchange.")
-@Outcome(id = "$value2$, $value0$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor2 update successfully")
-@Outcome(id = "$value0$, $value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
-@Outcome(id = "$value0$, $value0$, $value0$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
-@Outcome(id = "$value0$, $value0$, $value2$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
-@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
-@State
-public class $TestClassName$ {
-
-    $type$ field;
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-    
-    @Actor
-    public void actor1($Type$Result3 r) {
-        r.r1 = %CAE<$valueLiteral0$, $valueLiteral1$>%
-    }
-    
-    @Actor
-    public void actor2($Type$Result3 r) {
-        r.r2 = %CAE<$valueLiteral0$, $valueLiteral2$>%
-    }
-
-    @Arbiter 
-    public void arbiter1($Type$Result3 r) {
-        r.r3 = field;
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/fields/CASTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
-
-
-@JCStressTest
-@Description("Tests atomicity of compareAndSet.")
-@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
-@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor2 update successfully")
-@Outcome(id = "false, false, $value0$", expect = Expect.FORBIDDEN, desc = "not both shall fail")
-@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
-@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
-@State
-public class $TestClassName$ {
-
-    $type$ field;
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-    
-    @Actor
-    public void actor1(Bool2$Type$Result r) {
-        r.r1 = %CAS<$valueLiteral0$, $valueLiteral1$>%
-    }
-    
-    @Actor
-    public void actor2(Bool2$Type$Result r) {
-        r.r2 = %CAS<$valueLiteral0$, $valueLiteral2$>%
-    }
-
-    @Arbiter 
-    public void arbiter1(Bool2$Type$Result r) {
-        r.r3 = field;
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/fields/GetAndAddTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result3;
-
-
-@JCStressTest
-@Description("Tests atomicity of getAndAdd.")
-@Outcome(id = "$value1$, $value0$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
-@Outcome(id = "$value0$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
-@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndAdd is atomic")
-@State
-public class $TestClassName$ {
-
-    $type$ field;
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-    
-    @Actor
-    public void actor1($Type$Result3 r) {
-        r.r1 = ($type$) %GetAndAdd<$valueLiteral1$>%
-    }
-    
-    @Actor
-    public void actor2($Type$Result3 r) {
-        r.r2 = ($type$) %GetAndAdd<$valueLiteral1$>%
-    }
-
-    @Arbiter 
-    public void arbiter1($Type$Result3 r) {
-        r.r3 = field;
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/fields/GetAndSetTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result3;
-
-
-@JCStressTest
-@Description("Tests atomicity of getAndSet.")
-@Outcome(id = "$value0$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
-@Outcome(id = "$value2$, $value0$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
-@Outcome(id = "$value0$, $value0$, $value2$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndSet is atomic")
-@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndSet is atomic")
-@State
-public class $TestClassName$ {
-
-    $type$ field;
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-    
-    @Actor
-    public void actor1($Type$Result3 r) {
-        r.r1 = ($type$) %GetAndSet<$valueLiteral1$>%
-    }
-    
-    @Actor
-    public void actor2($Type$Result3 r) {
-        r.r2 = ($type$) %GetAndSet<$valueLiteral2$>%
-    }
-
-    @Arbiter 
-    public void arbiter1($Type$Result3 r) {
-        r.r3 = field;
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/fields/LoadLoadFenceTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of load load fence.")
-@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables before actor1 update")
-@Outcome(id = "$value0$, $value1$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables after x is already updated but var hasn't yet")
-@Outcome(id = "$value1$, $value0$", expect = Expect.FORBIDDEN,  desc = "var won't be observed to be updated before x is updated")
-@Outcome(id = "$value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 observe the variables after actor1 update completely")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, when load x in actor2 before fullFence in actor1")
-@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, if r1 is half-value, load x must get a full-value")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    $type$ x;
-    
-    $type$ field;
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-    
-    @Actor
-    public void actor1() {
-        x = $valueLiteral1$;
-        VarHandle.fullFence();
-        field = $valueLiteral1$;
-    }
-
-    @Actor
-    public void actor2($Type$Result2 r) {
-        r.r1 = %GetLoadLoadFence<>%
-        r.r2 = x;
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/fields/LoadStoreFenceTest1.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of load store fence.")
-@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "load var in actor2 before store $value1$ to var in actor1, all results are $value0$")
-@Outcome(id = "$value1$, $value0$", expect = Expect.ACCEPTABLE, desc = "store $value1$ to var in actor1 before load var in actor2")
-@Outcome(id = "$value1$, $value1$", expect = Expect.FORBIDDEN,  desc = "can't load x after store var in actor1.")
-@Outcome(id = "$value0$, $value1$", expect = Expect.FORBIDDEN,  desc = "this won't happen even if load x after store var because only if r1 = $value1$ x may be assigned to $value1$ and then r2 can be $value1$ from x.")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-@Outcome(id = ".*, $value0$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, r2 only can be assigned to 0.")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    $type$ x;
-    
-    $type$ field;
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    
-    @Actor
-    public void actor1($Type$Result2 r) {
-        $type$ i = x;
-        %LoadStoreFenceSet<$valueLiteral1$>%
-        r.r2 = i;
-    }
-    
-    @Actor
-    public void actor2($Type$Result2 r) {
-        r.r1 = field;
-        x = r.r1;
-    }
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/fields/LoadStoreFenceTest2.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of load store fence.")
-@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "load y in actor2 before store $value1$ to y in actor1, all results are $value0$")
-@Outcome(id = "$value1$, $value0$", expect = Expect.ACCEPTABLE, desc = "store $value1$ to y in actor1 before load y in actor2")
-@Outcome(id = "$value1$, $value1$", expect = Expect.FORBIDDEN,  desc = "can't load var after store y in actor1.")
-@Outcome(id = "$value0$, $value1$", expect = Expect.FORBIDDEN,  desc = "this won't happen even if load var after store y because only if r1 = $value1$ var may be assigned to $value1$ and then r2 can be $value1$ from var.")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-@Outcome(id = ".*, $value0$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, r2 only can be assigned to 0.")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    $type$ y;
-    
-    $type$ field;
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    
-    @Actor
-    public void actor1($Type$Result2 r) {
-        $type$ i = %GetLoadStoreFence<>%
-        y = $valueLiteral1$;
-        r.r2 = i;
-    }
-    
-    @Actor
-    public void actor2($Type$Result2 r) {
-        r.r1 = y;
-        field = r.r1;
-    }
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/fields/StoreLoadFenceTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import java.lang.invoke.MethodHandles;
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of store load fence.")
-@Outcome(id = "$value1$, $value0$", expect = Expect.ACCEPTABLE, desc = "actor1 observe actor2 update, actor2 not yet observe actor1 update")
-@Outcome(id = "$value0$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 observe actor1 update, actor1 not yet observe actor2 update")
-@Outcome(id = "$value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "both actor1 and actor2 observe each other update")
-@Outcome(id = "$value0$, $value0$", expect = Expect.FORBIDDEN, desc = "if r1 = 0, store var must be submitted already before fullFence in actor2, r2 must get the update")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-//if r1 is half-value or value0, store var is submitted before fullFence in actor2, r2 must be full-value, vice versa.
-@Outcome(id = "$value1$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec.")
-@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    $type$ x;
-    
-    $type$ field;
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-    
-    @Actor
-    public void actor1($Type$Result2 r) {
-        %SetStoreLoadFence<$valueLiteral1$>%
-        r.r1 = x;
-    }
-    
-    @Actor
-    public void actor2($Type$Result2 r) {
-        x = $valueLiteral1$;
-        VarHandle.fullFence();
-        r.r2 = field;
-    }
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/fields/StoreStoreFenceTest1.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of store store fence.")
-@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables before actor1 update")
-@Outcome(id = "$value0$, $value1$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables after x is already updated but var hasn't yet")
-@Outcome(id = "$value1$, $value0$", expect = Expect.FORBIDDEN,  desc = "var won't be observed to be updated before x is updated")
-@Outcome(id = "$value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 observe the variables after actor1 update completely")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, when load x in actor2 before storestore Fence in actor1")
-@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, if r1 is half-value, load x must get a full-value")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    $type$ x;
-    
-    $type$ field;
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-
-    @Actor
-    public void actor1() {
-        x = $valueLiteral1$;
-        %StoreStoreFenceSet<$valueLiteral1$>%
-    }
-
-    @Actor
-    public void actor2($Type$Result2 r) {
-        r.r1 = field;
-        VarHandle.fullFence();
-        r.r2 = x;
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/fields/StoreStoreFenceTest2.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.Ref;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.$Type$Result2;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-
-@JCStressTest
-@Description("Tests VarHandle methods which take effect of store store fence.")
-@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables before actor1 update")
-@Outcome(id = "$value0$, $value1$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables after var is already updated but y hasn't yet")
-@Outcome(id = "$value1$, $value0$", expect = Expect.FORBIDDEN,  desc = "y won't be observed to be updated before var is updated")
-@Outcome(id = "$value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 observe the variables after actor1 update completely")
-#if[alwaysAtomic]
-@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
-#else[alwaysAtomic]
-@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, when load var in actor2 before storestore Fence in actor1")
-@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, if r1 is half-value, load var must get a full-value")
-@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
-#end[alwaysAtomic]
-@State
-public class $TestClassName$ {
-
-    $type$ y;
-    
-    $type$ field;
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-
-    @Actor
-    public void actor1() {
-        %SetStoreStoreFence<$valueLiteral1$>%
-        y = $valueLiteral1$;
-    }
-
-    @Actor
-    public void actor2($Type$Result2 r) {
-        r.r1 = y;
-        VarHandle.fullFence();
-        r.r2 = field;
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/fields/WeakCASContendStrongTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
-
-
-@JCStressTest
-@Description("Tests weakCompareAndSet contend with strong compareAndSet.")
-@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 execute after actor1")
-@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE, desc = "actor2 execute before actor1 or win the contention with actor1")
-@Outcome(id = "false, false, $value0$", expect = Expect.FORBIDDEN,  desc = "not both shall fail")
-@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN,  desc = "not both shall succeed")
-@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
-@State
-public class $TestClassName$ {
-
-    $type$ field;
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-    
-    @Actor
-    public void actor1(Bool2$Type$Result r) {
-        r.r1 = %WeakCAS<$valueLiteral0$, $valueLiteral1$>%
-    }
-    
-    @Actor
-    public void actor2(Bool2$Type$Result r) {
-        r.r2 = %CompareAndSet<$valueLiteral0$, $valueLiteral2$>%
-    }
-
-    @Arbiter 
-    public void arbiter1(Bool2$Type$Result r) {
-        r.r3 = field;
-    }
-
-}
\ No newline at end of file
--- a/jcstress-test-gen/src/main/resources/chapter1b/fields/WeakCASTest.java.template	Fri Jun 10 14:29:27 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package $package$;
-
-import static java.nio.ByteOrder.BIG_ENDIAN;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.VarHandle;
-import java.util.Random;
-import java.nio.ByteBuffer;
-
-import org.openjdk.jcstress.annotations.Actor;
-import org.openjdk.jcstress.annotations.Arbiter;
-import org.openjdk.jcstress.annotations.Expect;
-import org.openjdk.jcstress.annotations.JCStressTest;
-import org.openjdk.jcstress.annotations.Outcome;
-import org.openjdk.jcstress.annotations.State;
-import org.openjdk.jcstress.annotations.Description;
-import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
-
-
-@JCStressTest
-@Description("Tests atomicity of weakCompareAndSet.")
-@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
-@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE, desc = "actor2 update successfully")
-@Outcome(id = "false, false, $value0$", expect = Expect.ACCEPTABLE,  desc = "both may fail")
-@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
-@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
-@State
-public class $TestClassName$ {
-
-    $type$ field;
-
-    static final VarHandle vh;
-
-    static {
-        try {
-            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-    
-    @Actor
-    public void actor1(Bool2$Type$Result r) {
-        r.r1 = %WeakCAS<$valueLiteral0$, $valueLiteral1$>%
-    }
-    
-    @Actor
-    public void actor2(Bool2$Type$Result r) {
-        r.r2 = %WeakCAS<$valueLiteral0$, $valueLiteral2$>%
-    }
-
-    @Arbiter 
-    public void arbiter1(Bool2$Type$Result r) {
-        r.r3 = field;
-    }
-
-}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/fences/X-LoadLoadFenceTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.Ref;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result2;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+
+@JCStressTest
+@Description("Tests VarHandle methods which take effect of load load fence.")
+@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables before actor1 update")
+@Outcome(id = "$value0$, $value1$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables after x is already updated but var hasn't yet")
+@Outcome(id = "$value1$, $value0$", expect = Expect.FORBIDDEN,  desc = "var won't be observed to be updated before x is updated")
+@Outcome(id = "$value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 observe the variables after actor1 update completely")
+#if[alwaysAtomic]
+@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
+#else[alwaysAtomic]
+@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, when load x in actor2 before fullFence in actor1")
+@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, if r1 is half-value, load x must get a full-value")
+@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
+#end[alwaysAtomic]
+@State
+public class $TestClassName$ {
+
+    $type$ x;
+
+    $type$ field;
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Actor
+    public void actor1() {
+        x = $valueLiteral1$;
+        VarHandle.fullFence();
+        field = $valueLiteral1$;
+    }
+
+    @Actor
+    public void actor2($Type$Result2 r) {
+        r.r1 = %GetLoadLoadFence<>%
+        r.r2 = x;
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/fences/X-LoadStoreFenceTest1.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.Ref;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result2;
+
+
+@JCStressTest
+@Description("Tests VarHandle methods which take effect of load store fence.")
+@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "load var in actor2 before store $value1$ to var in actor1, all results are $value0$")
+@Outcome(id = "$value1$, $value0$", expect = Expect.ACCEPTABLE, desc = "store $value1$ to var in actor1 before load var in actor2")
+@Outcome(id = "$value1$, $value1$", expect = Expect.FORBIDDEN,  desc = "can't load x after store var in actor1.")
+@Outcome(id = "$value0$, $value1$", expect = Expect.FORBIDDEN,  desc = "this won't happen even if load x after store var because only if r1 = $value1$ x may be assigned to $value1$ and then r2 can be $value1$ from x.")
+#if[alwaysAtomic]
+@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
+#else[alwaysAtomic]
+@Outcome(id = ".*, $value0$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, r2 only can be assigned to 0.")
+@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
+#end[alwaysAtomic]
+@State
+public class $TestClassName$ {
+
+    $type$ x;
+    
+    $type$ field;
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    
+    @Actor
+    public void actor1($Type$Result2 r) {
+        $type$ i = x;
+        %LoadStoreFenceSet<$valueLiteral1$>%
+        r.r2 = i;
+    }
+    
+    @Actor
+    public void actor2($Type$Result2 r) {
+        r.r1 = field;
+        x = r.r1;
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/fences/X-LoadStoreFenceTest2.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.Ref;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result2;
+
+
+@JCStressTest
+@Description("Tests VarHandle methods which take effect of load store fence.")
+@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "load y in actor2 before store $value1$ to y in actor1, all results are $value0$")
+@Outcome(id = "$value1$, $value0$", expect = Expect.ACCEPTABLE, desc = "store $value1$ to y in actor1 before load y in actor2")
+@Outcome(id = "$value1$, $value1$", expect = Expect.FORBIDDEN,  desc = "can't load var after store y in actor1.")
+@Outcome(id = "$value0$, $value1$", expect = Expect.FORBIDDEN,  desc = "this won't happen even if load var after store y because only if r1 = $value1$ var may be assigned to $value1$ and then r2 can be $value1$ from var.")
+#if[alwaysAtomic]
+@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
+#else[alwaysAtomic]
+@Outcome(id = ".*, $value0$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, r2 only can be assigned to 0.")
+@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
+#end[alwaysAtomic]
+@State
+public class $TestClassName$ {
+
+    $type$ y;
+    
+    $type$ field;
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    
+    @Actor
+    public void actor1($Type$Result2 r) {
+        $type$ i = %GetLoadStoreFence<>%
+        y = $valueLiteral1$;
+        r.r2 = i;
+    }
+    
+    @Actor
+    public void actor2($Type$Result2 r) {
+        r.r1 = y;
+        field = r.r1;
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/fences/X-StoreLoadFenceTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import java.lang.invoke.MethodHandles;
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.Ref;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result2;
+
+
+@JCStressTest
+@Description("Tests VarHandle methods which take effect of store load fence.")
+@Outcome(id = "$value1$, $value0$", expect = Expect.ACCEPTABLE, desc = "actor1 observe actor2 update, actor2 not yet observe actor1 update")
+@Outcome(id = "$value0$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 observe actor1 update, actor1 not yet observe actor2 update")
+@Outcome(id = "$value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "both actor1 and actor2 observe each other update")
+@Outcome(id = "$value0$, $value0$", expect = Expect.FORBIDDEN, desc = "if r1 = 0, store var must be submitted already before fullFence in actor2, r2 must get the update")
+#if[alwaysAtomic]
+@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
+#else[alwaysAtomic]
+//if r1 is half-value or value0, store var is submitted before fullFence in actor2, r2 must be full-value, vice versa.
+@Outcome(id = "$value1$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec.")
+@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec")
+@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
+#end[alwaysAtomic]
+@State
+public class $TestClassName$ {
+
+    $type$ x;
+    
+    $type$ field;
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+    
+    @Actor
+    public void actor1($Type$Result2 r) {
+        %SetStoreLoadFence<$valueLiteral1$>%
+        r.r1 = x;
+    }
+    
+    @Actor
+    public void actor2($Type$Result2 r) {
+        x = $valueLiteral1$;
+        VarHandle.fullFence();
+        r.r2 = field;
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/fences/X-StoreStoreFenceTest1.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.Ref;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result2;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+
+@JCStressTest
+@Description("Tests VarHandle methods which take effect of store store fence.")
+@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables before actor1 update")
+@Outcome(id = "$value0$, $value1$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables after x is already updated but var hasn't yet")
+@Outcome(id = "$value1$, $value0$", expect = Expect.FORBIDDEN,  desc = "var won't be observed to be updated before x is updated")
+@Outcome(id = "$value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 observe the variables after actor1 update completely")
+#if[alwaysAtomic]
+@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
+#else[alwaysAtomic]
+@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, when load x in actor2 before storestore Fence in actor1")
+@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, if r1 is half-value, load x must get a full-value")
+@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
+#end[alwaysAtomic]
+@State
+public class $TestClassName$ {
+
+    $type$ x;
+    
+    $type$ field;
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+
+    @Actor
+    public void actor1() {
+        x = $valueLiteral1$;
+        %StoreStoreFenceSet<$valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2($Type$Result2 r) {
+        r.r1 = field;
+        VarHandle.fullFence();
+        r.r2 = x;
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/fences/X-StoreStoreFenceTest2.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.Ref;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result2;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+
+@JCStressTest
+@Description("Tests VarHandle methods which take effect of store store fence.")
+@Outcome(id = "$value0$, $value0$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables before actor1 update")
+@Outcome(id = "$value0$, $value1$", expect = Expect.ACCEPTABLE, desc = "actor2 observe the variables after var is already updated but y hasn't yet")
+@Outcome(id = "$value1$, $value0$", expect = Expect.FORBIDDEN,  desc = "y won't be observed to be updated before var is updated")
+@Outcome(id = "$value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 observe the variables after actor1 update completely")
+#if[alwaysAtomic]
+@Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.")
+#else[alwaysAtomic]
+@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, when load var in actor2 before storestore Fence in actor1")
+@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec, if r1 is half-value, load var must get a full-value")
+@Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7")
+#end[alwaysAtomic]
+@State
+public class $TestClassName$ {
+
+    $type$ y;
+    
+    $type$ field;
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+
+    @Actor
+    public void actor1() {
+        %SetStoreStoreFence<$valueLiteral1$>%
+        y = $valueLiteral1$;
+    }
+
+    @Actor
+    public void actor2($Type$Result2 r) {
+        r.r1 = y;
+        VarHandle.fullFence();
+        r.r2 = field;
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/arrays/X-AddAndGetTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result3;
+
+
+@JCStressTest
+@Description("Tests atomicity of addAndGet.")
+@Outcome(id = "$value2$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
+@Outcome(id = "$value1$, $value2$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
+@Outcome(id = "$value1$, $value1$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because addAndGet is atomic")
+@State
+public class $TestClassName$ {
+
+    $type$[] array = new $type$[1];
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.arrayElementVarHandle($type$[].class);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Actor
+    public void actor1($Type$Result3 r) {
+        r.r1 = ($type$) %AddAndGet<$valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2($Type$Result3 r) {
+        r.r2 = ($type$) %AddAndGet<$valueLiteral1$>%
+    }
+
+    @Arbiter
+    public void arbiter1($Type$Result3 r) {
+        r.r3 = array[0];
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/arrays/X-CAETest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result3;
+
+
+@JCStressTest
+@Description("Tests atomicity of compareAndExchange.")
+@Outcome(id = "$value2$, $value0$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor2 update successfully")
+@Outcome(id = "$value0$, $value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
+@Outcome(id = "$value0$, $value0$, $value0$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
+@Outcome(id = "$value0$, $value0$, $value2$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
+@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
+@State
+public class $TestClassName$ {
+
+    $type$[] array = new $type$[1];
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.arrayElementVarHandle($type$[].class);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Actor
+    public void actor1($Type$Result3 r) {
+        r.r1 = %CAE<$valueLiteral0$, $valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2($Type$Result3 r) {
+        r.r2 = %CAE<$valueLiteral0$, $valueLiteral2$>%
+    }
+
+    @Arbiter
+    public void arbiter1($Type$Result3 r) {
+        r.r3 = array[0];
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/arrays/X-CASTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
+
+
+@JCStressTest
+@Description("Tests atomicity of compareAndSet.")
+@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
+@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor2 update successfully")
+@Outcome(id = "false, false, $value0$", expect = Expect.FORBIDDEN, desc = "not both shall fail")
+@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
+@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
+@State
+public class $TestClassName$ {
+
+    $type$[] array = new $type$[1];
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.arrayElementVarHandle($type$[].class);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Actor
+    public void actor1(Bool2$Type$Result r) {
+        r.r1 = %CAS<$valueLiteral0$, $valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2(Bool2$Type$Result r) {
+        r.r2 = %CAS<$valueLiteral0$, $valueLiteral2$>%
+    }
+
+    @Arbiter
+    public void arbiter1(Bool2$Type$Result r) {
+        r.r3 = array[0];
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/arrays/X-GetAndAddTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result3;
+
+
+@JCStressTest
+@Description("Tests atomicity of getAndAdd.")
+@Outcome(id = "$value1$, $value0$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
+@Outcome(id = "$value0$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
+@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndAdd is atomic")
+@State
+public class $TestClassName$ {
+
+    $type$[] array = new $type$[1];
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.arrayElementVarHandle($type$[].class);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Actor
+    public void actor1($Type$Result3 r) {
+        r.r1 = ($type$) %GetAndAdd<$valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2($Type$Result3 r) {
+        r.r2 = ($type$) %GetAndAdd<$valueLiteral1$>%
+    }
+
+    @Arbiter
+    public void arbiter1($Type$Result3 r) {
+        r.r3 = array[0];
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/arrays/X-GetAndSetTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result3;
+
+
+@JCStressTest
+@Description("Tests atomicity of getAndSet.")
+@Outcome(id = "$value0$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
+@Outcome(id = "$value2$, $value0$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
+@Outcome(id = "$value0$, $value0$, $value2$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndSet is atomic")
+@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndSet is atomic")
+@State
+public class $TestClassName$ {
+
+    $type$[] array = new $type$[1];
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.arrayElementVarHandle($type$[].class);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Actor
+    public void actor1($Type$Result3 r) {
+        r.r1 = ($type$) %GetAndSet<$valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2($Type$Result3 r) {
+        r.r2 = ($type$) %GetAndSet<$valueLiteral2$>%
+    }
+
+    @Arbiter
+    public void arbiter1($Type$Result3 r) {
+        r.r3 = array[0];
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/arrays/X-WeakCASContendStrongTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
+
+
+@JCStressTest
+@Description("Tests weakCompareAndSet contend with strong compareAndSet.")
+@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 execute after actor1")
+@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE, desc = "actor2 execute before actor1 or win the contention with actor1")
+@Outcome(id = "false, false, $value0$", expect = Expect.FORBIDDEN,  desc = "not both shall fail")
+@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN,  desc = "not both shall succeed")
+@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
+@State
+public class $TestClassName$ {
+
+    $type$[] array = new $type$[1];
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.arrayElementVarHandle($type$[].class);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Actor
+    public void actor1(Bool2$Type$Result r) {
+        r.r1 = %WeakCAS<$valueLiteral0$, $valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2(Bool2$Type$Result r) {
+        r.r2 = %CompareAndSet<$valueLiteral0$, $valueLiteral2$>%
+    }
+
+    @Arbiter
+    public void arbiter1(Bool2$Type$Result r) {
+        r.r3 = array[0];
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/arrays/X-WeakCASTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
+
+
+@JCStressTest
+@Description("Tests atomicity of weakCompareAndSet.")
+@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
+@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE, desc = "actor2 update successfully")
+@Outcome(id = "false, false, $value0$", expect = Expect.ACCEPTABLE,  desc = "both may fail")
+@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
+@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
+@State
+public class $TestClassName$ {
+
+    $type$[] array = new $type$[1];
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.arrayElementVarHandle($type$[].class);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Actor
+    public void actor1(Bool2$Type$Result r) {
+        r.r1 = %WeakCAS<$valueLiteral0$, $valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2(Bool2$Type$Result r) {
+        r.r2 = %WeakCAS<$valueLiteral0$, $valueLiteral2$>%
+    }
+
+    @Arbiter
+    public void arbiter1(Bool2$Type$Result r) {
+        r.r3 = array[0];
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/byteArray/X-AddAndGetTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result3;
+
+
+@JCStressTest
+@Description("Tests atomicity of addAndGet.")
+@Outcome(id = "$value2$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
+@Outcome(id = "$value1$, $value2$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
+@Outcome(id = "$value1$, $value1$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because addAndGet is atomic")
+@State
+public class $TestClassName$ {
+
+    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.byteArrayViewVarHandle($type$[].class, BIG_ENDIAN);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    byte[] byteArray = new byte[OFF + 8];
+
+    @Actor
+    public void actor1($Type$Result3 r) {
+        r.r1 = ($type$) %AddAndGet<$valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2($Type$Result3 r) {
+        r.r2 = ($type$) %AddAndGet<$valueLiteral1$>%
+    }
+
+    @Arbiter
+    public void arbiter1($Type$Result3 r) {
+        r.r3 = ($type$) vh.get(byteArray, OFF);
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/byteArray/X-CAETest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result3;
+
+
+@JCStressTest
+@Description("Tests atomicity of compareAndExchange.")
+@Outcome(id = "$value2$, $value0$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor2 update successfully")
+@Outcome(id = "$value0$, $value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
+@Outcome(id = "$value0$, $value0$, $value0$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
+@Outcome(id = "$value0$, $value0$, $value2$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
+@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
+@State
+public class $TestClassName$ {
+
+    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.byteArrayViewVarHandle($type$[].class, BIG_ENDIAN);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    byte[] byteArray = new byte[OFF + 8];
+
+    @Actor
+    public void actor1($Type$Result3 r) {
+        r.r1 = %CAE<$valueLiteral0$, $valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2($Type$Result3 r) {
+        r.r2 = %CAE<$valueLiteral0$, $valueLiteral2$>%
+    }
+
+    @Arbiter
+    public void arbiter1($Type$Result3 r) {
+        r.r3 = ($type$) vh.get(byteArray, OFF);
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/byteArray/X-CASTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
+
+
+@JCStressTest
+@Description("Tests atomicity of compareAndSet.")
+@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
+@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor2 update successfully")
+@Outcome(id = "false, false, $value0$", expect = Expect.FORBIDDEN, desc = "not both shall fail")
+@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
+@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
+@State
+public class $TestClassName$ {
+
+    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.byteArrayViewVarHandle($type$[].class, BIG_ENDIAN);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    byte[] byteArray = new byte[OFF + 8];
+
+    @Actor
+    public void actor1(Bool2$Type$Result r) {
+        r.r1 = %CAS<$valueLiteral0$, $valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2(Bool2$Type$Result r) {
+        r.r2 = %CAS<$valueLiteral0$, $valueLiteral2$>%
+    }
+
+    @Arbiter
+    public void arbiter1(Bool2$Type$Result r) {
+        r.r3 = ($type$) vh.get(byteArray, OFF);
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/byteArray/X-GetAndAddTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result3;
+
+
+@JCStressTest
+@Description("Tests atomicity of getAndAdd.")
+@Outcome(id = "$value1$, $value0$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
+@Outcome(id = "$value0$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
+@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndAdd is atomic")
+@State
+public class $TestClassName$ {
+
+    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.byteArrayViewVarHandle($type$[].class, BIG_ENDIAN);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    byte[] byteArray = new byte[OFF + 8];
+
+    @Actor
+    public void actor1($Type$Result3 r) {
+        r.r1 = ($type$) %GetAndAdd<$valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2($Type$Result3 r) {
+        r.r2 = ($type$) %GetAndAdd<$valueLiteral1$>%
+    }
+
+    @Arbiter
+    public void arbiter1($Type$Result3 r) {
+        r.r3 = ($type$) vh.get(byteArray, OFF);
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/byteArray/X-GetAndSetTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result3;
+
+
+@JCStressTest
+@Description("Tests atomicity of getAndSet.")
+@Outcome(id = "$value0$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
+@Outcome(id = "$value2$, $value0$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
+@Outcome(id = "$value0$, $value0$, $value2$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndSet is atomic")
+@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndSet is atomic")
+@State
+public class $TestClassName$ {
+
+    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.byteArrayViewVarHandle($type$[].class, BIG_ENDIAN);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    byte[] byteArray = new byte[OFF + 8];
+
+    @Actor
+    public void actor1($Type$Result3 r) {
+        r.r1 = ($type$) %GetAndSet<$valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2($Type$Result3 r) {
+        r.r2 = ($type$) %GetAndSet<$valueLiteral2$>%
+    }
+
+    @Arbiter
+    public void arbiter1($Type$Result3 r) {
+        r.r3 = ($type$) vh.get(byteArray, OFF);
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/byteArray/X-WeakCASContendStrongTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
+
+
+@JCStressTest
+@Description("Tests weakCompareAndSet contend with strong compareAndSet.")
+@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 execute after actor1")
+@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE, desc = "actor2 execute before actor1 or win the contention with actor1")
+@Outcome(id = "false, false, $value0$", expect = Expect.FORBIDDEN,  desc = "not both shall fail")
+@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN,  desc = "not both shall succeed")
+@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
+@State
+public class $TestClassName$ {
+
+    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.byteArrayViewVarHandle($type$[].class, BIG_ENDIAN);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    byte[] byteArray = new byte[OFF + 8];
+
+    @Actor
+    public void actor1(Bool2$Type$Result r) {
+        r.r1 = %WeakCAS<$valueLiteral0$, $valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2(Bool2$Type$Result r) {
+        r.r2 = %CompareAndSet<$valueLiteral0$, $valueLiteral2$>%
+    }
+
+    @Arbiter
+    public void arbiter1(Bool2$Type$Result r) {
+        r.r3 = ($type$) vh.get(byteArray, OFF);
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/byteArray/X-WeakCASTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
+
+
+@JCStressTest
+@Description("Tests atomicity of weakCompareAndSet.")
+@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
+@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE, desc = "actor2 update successfully")
+@Outcome(id = "false, false, $value0$", expect = Expect.ACCEPTABLE,  desc = "both may fail")
+@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
+@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
+@State
+public class $TestClassName$ {
+
+    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.byteArrayViewVarHandle($type$[].class, BIG_ENDIAN);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    byte[] byteArray = new byte[OFF + 8];
+
+    @Actor
+    public void actor1(Bool2$Type$Result r) {
+        r.r1 = %WeakCAS<$valueLiteral0$, $valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2(Bool2$Type$Result r) {
+        r.r2 = %WeakCAS<$valueLiteral0$, $valueLiteral2$>%
+    }
+
+    @Arbiter
+    public void arbiter1(Bool2$Type$Result r) {
+        r.r3 = ($type$) vh.get(byteArray, OFF);
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/byteBuffer/X-AddAndGetTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result3;
+
+
+@JCStressTest
+@Description("Tests atomicity of addAndGet.")
+@Outcome(id = "$value2$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
+@Outcome(id = "$value1$, $value2$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
+@Outcome(id = "$value1$, $value1$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because addAndGet is atomic")
+@State
+public class $TestClassName$ {
+
+    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.byteBufferViewVarHandle($type$[].class, BIG_ENDIAN);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    ByteBuffer byteBuffer = $buffer_allocate$(OFF + 8);
+
+    @Actor
+    public void actor1($Type$Result3 r) {
+        r.r1 = ($type$) %AddAndGet<$valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2($Type$Result3 r) {
+        r.r2 = ($type$) %AddAndGet<$valueLiteral1$>%
+    }
+
+    @Arbiter
+    public void arbiter1($Type$Result3 r) {
+        r.r3 = ($type$) vh.get(byteBuffer, OFF);
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/byteBuffer/X-CAETest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result3;
+
+
+@JCStressTest
+@Description("Tests atomicity of compareAndExchange.")
+@Outcome(id = "$value2$, $value0$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor2 update successfully")
+@Outcome(id = "$value0$, $value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
+@Outcome(id = "$value0$, $value0$, $value0$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
+@Outcome(id = "$value0$, $value0$, $value2$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
+@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
+@State
+public class $TestClassName$ {
+
+    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.byteBufferViewVarHandle($type$[].class, BIG_ENDIAN);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    ByteBuffer byteBuffer = $buffer_allocate$(OFF + 8);
+
+    @Actor
+    public void actor1($Type$Result3 r) {
+        r.r1 = %CAE<$valueLiteral0$, $valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2($Type$Result3 r) {
+        r.r2 = %CAE<$valueLiteral0$, $valueLiteral2$>%
+    }
+
+    @Arbiter
+    public void arbiter1($Type$Result3 r) {
+        r.r3 = ($type$) vh.get(byteBuffer, OFF);
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/byteBuffer/X-CASTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
+
+
+@JCStressTest
+@Description("Tests atomicity of compareAndSet.")
+@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
+@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor2 update successfully")
+@Outcome(id = "false, false, $value0$", expect = Expect.FORBIDDEN, desc = "not both shall fail")
+@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
+@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
+@State
+public class $TestClassName$ {
+
+    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.byteBufferViewVarHandle($type$[].class, BIG_ENDIAN);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    ByteBuffer byteBuffer = $buffer_allocate$(OFF + 8);
+
+    @Actor
+    public void actor1(Bool2$Type$Result r) {
+        r.r1 = %CAS<$valueLiteral0$, $valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2(Bool2$Type$Result r) {
+        r.r2 = %CAS<$valueLiteral0$, $valueLiteral2$>%
+    }
+
+    @Arbiter
+    public void arbiter1(Bool2$Type$Result r) {
+        r.r3 = ($type$) vh.get(byteBuffer, OFF);
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/byteBuffer/X-GetAndAddTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result3;
+
+
+@JCStressTest
+@Description("Tests atomicity of getAndAdd.")
+@Outcome(id = "$value1$, $value0$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
+@Outcome(id = "$value0$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
+@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndAdd is atomic")
+@State
+public class $TestClassName$ {
+
+    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.byteBufferViewVarHandle($type$[].class, BIG_ENDIAN);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    ByteBuffer byteBuffer = $buffer_allocate$(OFF + 8);
+
+    @Actor
+    public void actor1($Type$Result3 r) {
+        r.r1 = ($type$) %GetAndAdd<$valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2($Type$Result3 r) {
+        r.r2 = ($type$) %GetAndAdd<$valueLiteral1$>%
+    }
+
+    @Arbiter
+    public void arbiter1($Type$Result3 r) {
+        r.r3 = ($type$) vh.get(byteBuffer, OFF);
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/byteBuffer/X-GetAndSetTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result3;
+
+
+@JCStressTest
+@Description("Tests atomicity of getAndSet.")
+@Outcome(id = "$value0$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
+@Outcome(id = "$value2$, $value0$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
+@Outcome(id = "$value0$, $value0$, $value2$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndSet is atomic")
+@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndSet is atomic")
+@State
+public class $TestClassName$ {
+
+    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.byteBufferViewVarHandle($type$[].class, BIG_ENDIAN);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    ByteBuffer byteBuffer = $buffer_allocate$(OFF + 8);
+
+    @Actor
+    public void actor1($Type$Result3 r) {
+        r.r1 = ($type$) %GetAndSet<$valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2($Type$Result3 r) {
+        r.r2 = ($type$) %GetAndSet<$valueLiteral2$>%
+    }
+
+    @Arbiter
+    public void arbiter1($Type$Result3 r) {
+        r.r3 = ($type$) vh.get(byteBuffer, OFF);
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/byteBuffer/X-WeakCASContendStrongTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
+
+
+@JCStressTest
+@Description("Tests weakCompareAndSet contend with strong compareAndSet.")
+@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 execute after actor1")
+@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE, desc = "actor2 execute before actor1 or win the contention with actor1")
+@Outcome(id = "false, false, $value0$", expect = Expect.FORBIDDEN,  desc = "not both shall fail")
+@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN,  desc = "not both shall succeed")
+@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
+@State
+public class $TestClassName$ {
+
+    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.byteBufferViewVarHandle($type$[].class, BIG_ENDIAN);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    ByteBuffer byteBuffer = $buffer_allocate$(OFF + 8);
+
+    @Actor
+    public void actor1(Bool2$Type$Result r) {
+        r.r1 = %WeakCAS<$valueLiteral0$, $valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2(Bool2$Type$Result r) {
+        r.r2 = %CompareAndSet<$valueLiteral0$, $valueLiteral2$>%
+    }
+
+    @Arbiter
+    public void arbiter1(Bool2$Type$Result r) {
+        r.r3 = ($type$) vh.get(byteBuffer, OFF);
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/byteBuffer/X-WeakCASTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
+
+
+@JCStressTest
+@Description("Tests atomicity of weakCompareAndSet.")
+@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
+@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE, desc = "actor2 update successfully")
+@Outcome(id = "false, false, $value0$", expect = Expect.ACCEPTABLE,  desc = "both may fail")
+@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
+@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
+@State
+public class $TestClassName$ {
+
+    static final int OFF = ByteBuffer.wrap(new byte[128]).alignmentOffset(0, 8);
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.byteBufferViewVarHandle($type$[].class, BIG_ENDIAN);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    ByteBuffer byteBuffer = $buffer_allocate$(OFF + 8);
+
+    @Actor
+    public void actor1(Bool2$Type$Result r) {
+        r.r1 = %WeakCAS<$valueLiteral0$, $valueLiteral1$>%
+    }
+
+    @Actor
+    public void actor2(Bool2$Type$Result r) {
+        r.r2 = %WeakCAS<$valueLiteral0$, $valueLiteral2$>%
+    }
+
+    @Arbiter
+    public void arbiter1(Bool2$Type$Result r) {
+        r.r3 = ($type$) vh.get(byteBuffer, OFF);
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/fields/X-AddAndGetTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result3;
+
+
+@JCStressTest
+@Description("Tests atomicity of addAndGet.")
+@Outcome(id = "$value2$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
+@Outcome(id = "$value1$, $value2$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
+@Outcome(id = "$value1$, $value1$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because addAndGet is atomic")
+@State
+public class $TestClassName$ {
+
+    $type$ field;
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+    
+    @Actor
+    public void actor1($Type$Result3 r) {
+        r.r1 = ($type$) %AddAndGet<$valueLiteral1$>%
+    }
+    
+    @Actor
+    public void actor2($Type$Result3 r) {
+        r.r2 = ($type$) %AddAndGet<$valueLiteral1$>%
+    }
+
+    @Arbiter 
+    public void arbiter1($Type$Result3 r) {
+        r.r3 = field;
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/fields/X-CAETest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result3;
+
+
+@JCStressTest
+@Description("Tests atomicity of compareAndExchange.")
+@Outcome(id = "$value2$, $value0$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor2 update successfully")
+@Outcome(id = "$value0$, $value1$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
+@Outcome(id = "$value0$, $value0$, $value0$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
+@Outcome(id = "$value0$, $value0$, $value2$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
+@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because compareAndExchange is atomic")
+@State
+public class $TestClassName$ {
+
+    $type$ field;
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+    
+    @Actor
+    public void actor1($Type$Result3 r) {
+        r.r1 = %CAE<$valueLiteral0$, $valueLiteral1$>%
+    }
+    
+    @Actor
+    public void actor2($Type$Result3 r) {
+        r.r2 = %CAE<$valueLiteral0$, $valueLiteral2$>%
+    }
+
+    @Arbiter 
+    public void arbiter1($Type$Result3 r) {
+        r.r3 = field;
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/fields/X-CASTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
+
+
+@JCStressTest
+@Description("Tests atomicity of compareAndSet.")
+@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
+@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor2 update successfully")
+@Outcome(id = "false, false, $value0$", expect = Expect.FORBIDDEN, desc = "not both shall fail")
+@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
+@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
+@State
+public class $TestClassName$ {
+
+    $type$ field;
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+    
+    @Actor
+    public void actor1(Bool2$Type$Result r) {
+        r.r1 = %CAS<$valueLiteral0$, $valueLiteral1$>%
+    }
+    
+    @Actor
+    public void actor2(Bool2$Type$Result r) {
+        r.r2 = %CAS<$valueLiteral0$, $valueLiteral2$>%
+    }
+
+    @Arbiter 
+    public void arbiter1(Bool2$Type$Result r) {
+        r.r3 = field;
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/fields/X-GetAndAddTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result3;
+
+
+@JCStressTest
+@Description("Tests atomicity of getAndAdd.")
+@Outcome(id = "$value1$, $value0$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
+@Outcome(id = "$value0$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
+@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndAdd is atomic")
+@State
+public class $TestClassName$ {
+
+    $type$ field;
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+    
+    @Actor
+    public void actor1($Type$Result3 r) {
+        r.r1 = ($type$) %GetAndAdd<$valueLiteral1$>%
+    }
+    
+    @Actor
+    public void actor2($Type$Result3 r) {
+        r.r2 = ($type$) %GetAndAdd<$valueLiteral1$>%
+    }
+
+    @Arbiter 
+    public void arbiter1($Type$Result3 r) {
+        r.r3 = field;
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/fields/X-GetAndSetTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.$Type$Result3;
+
+
+@JCStressTest
+@Description("Tests atomicity of getAndSet.")
+@Outcome(id = "$value0$, $value1$, $value2$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute before actor2")
+@Outcome(id = "$value2$, $value0$, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 execute after actor2")
+@Outcome(id = "$value0$, $value0$, $value2$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndSet is atomic")
+@Outcome(id = "$value0$, $value0$, $value1$", expect = Expect.FORBIDDEN, desc = "This won't happen because getAndSet is atomic")
+@State
+public class $TestClassName$ {
+
+    $type$ field;
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+    
+    @Actor
+    public void actor1($Type$Result3 r) {
+        r.r1 = ($type$) %GetAndSet<$valueLiteral1$>%
+    }
+    
+    @Actor
+    public void actor2($Type$Result3 r) {
+        r.r2 = ($type$) %GetAndSet<$valueLiteral2$>%
+    }
+
+    @Arbiter 
+    public void arbiter1($Type$Result3 r) {
+        r.r3 = field;
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/fields/X-WeakCASContendStrongTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
+
+
+@JCStressTest
+@Description("Tests weakCompareAndSet contend with strong compareAndSet.")
+@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor2 execute after actor1")
+@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE, desc = "actor2 execute before actor1 or win the contention with actor1")
+@Outcome(id = "false, false, $value0$", expect = Expect.FORBIDDEN,  desc = "not both shall fail")
+@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN,  desc = "not both shall succeed")
+@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
+@State
+public class $TestClassName$ {
+
+    $type$ field;
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+    
+    @Actor
+    public void actor1(Bool2$Type$Result r) {
+        r.r1 = %WeakCAS<$valueLiteral0$, $valueLiteral1$>%
+    }
+    
+    @Actor
+    public void actor2(Bool2$Type$Result r) {
+        r.r2 = %CompareAndSet<$valueLiteral0$, $valueLiteral2$>%
+    }
+
+    @Arbiter 
+    public void arbiter1(Bool2$Type$Result r) {
+        r.r3 = field;
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jcstress-test-gen/src/main/resources/operationAtomic/fields/X-WeakCASTest.java.template	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package $package$;
+
+import static java.nio.ByteOrder.BIG_ENDIAN;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+import java.util.Random;
+import java.nio.ByteBuffer;
+
+import org.openjdk.jcstress.annotations.Actor;
+import org.openjdk.jcstress.annotations.Arbiter;
+import org.openjdk.jcstress.annotations.Expect;
+import org.openjdk.jcstress.annotations.JCStressTest;
+import org.openjdk.jcstress.annotations.Outcome;
+import org.openjdk.jcstress.annotations.State;
+import org.openjdk.jcstress.annotations.Description;
+import org.openjdk.jcstress.infra.results.Bool2$Type$Result;
+
+
+@JCStressTest
+@Description("Tests atomicity of weakCompareAndSet.")
+@Outcome(id = "true, false, $value1$", expect = Expect.ACCEPTABLE,  desc = "actor1 update successfully")
+@Outcome(id = "false, true, $value2$", expect = Expect.ACCEPTABLE, desc = "actor2 update successfully")
+@Outcome(id = "false, false, $value0$", expect = Expect.ACCEPTABLE,  desc = "both may fail")
+@Outcome(id = "true, true, $value1$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
+@Outcome(id = "true, true, $value2$", expect = Expect.FORBIDDEN, desc = "not both shall succeed")
+@State
+public class $TestClassName$ {
+
+    $type$ field;
+
+    static final VarHandle vh;
+
+    static {
+        try {
+            vh = MethodHandles.lookup().findVarHandle($TestClassName$.class, "field", $type$.class);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+    
+    @Actor
+    public void actor1(Bool2$Type$Result r) {
+        r.r1 = %WeakCAS<$valueLiteral0$, $valueLiteral1$>%
+    }
+    
+    @Actor
+    public void actor2(Bool2$Type$Result r) {
+        r.r2 = %WeakCAS<$valueLiteral0$, $valueLiteral2$>%
+    }
+
+    @Arbiter 
+    public void arbiter1(Bool2$Type$Result r) {
+        r.r3 = field;
+    }
+
+}
\ No newline at end of file
--- a/pom.xml	Fri Jun 10 14:29:27 2016 +0300
+++ b/pom.xml	Fri Jun 10 15:29:27 2016 +0300
@@ -169,6 +169,7 @@
         <module>tests-chapter-0c</module>
         <module>tests-chapter-1a</module>
         <module>tests-chapter-1b</module>
+        <module>tests-chapter-1c</module>
         <module>tests-chapter-2b</module>
         <module>tests-all</module>
     </modules>
--- a/tests-all/pom.xml	Fri Jun 10 14:29:27 2016 +0300
+++ b/tests-all/pom.xml	Fri Jun 10 15:29:27 2016 +0300
@@ -103,6 +103,11 @@
             <artifactId>jcstress-tests-chapter-1b</artifactId>
             <version>${project.version}</version>
         </dependency>
-        
+        <dependency>
+            <groupId>org.openjdk.jcstress</groupId>
+            <artifactId>jcstress-tests-chapter-1c</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
     </dependencies>
 </project>
--- a/tests-chapter-1b/pom.xml	Fri Jun 10 14:29:27 2016 +0300
+++ b/tests-chapter-1b/pom.xml	Fri Jun 10 15:29:27 2016 +0300
@@ -35,7 +35,7 @@
     <artifactId>jcstress-tests-chapter-1b</artifactId>
     <packaging>jar</packaging>
 
-    <name>Chapter 1.b: Core Library Foundations: Experimental VarHandles tests</name>
+    <name>Chapter 1.b: Library Foundations: VarHandles, Atomicity</name>
     <url>http://maven.apache.org</url>
 
     <scm>
@@ -84,7 +84,7 @@
                             <executable>${java.home}/bin/java</executable>
                             <arguments>
                                 <argument>-jar</argument>
-                                <argument>../jcstress-test-gen/target/chapter1b-generator.jar</argument>
+                                <argument>../jcstress-test-gen/target/operationAtomic-generator.jar</argument>
                                 <argument>${project.build.directory}/generated-sources/tests/</argument>
                             </arguments>
                         </configuration>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests-chapter-1c/LICENSE	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,347 @@
+The GNU General Public License (GPL)
+
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share
+and change it.  By contrast, the GNU General Public License is intended to
+guarantee your freedom to share and change free software--to make sure the
+software is free for all its users.  This General Public License applies to
+most of the Free Software Foundation's software and to any other program whose
+authors commit to using it.  (Some other Free Software Foundation software is
+covered by the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+When we speak of free software, we are referring to freedom, not price.  Our
+General Public Licenses are designed to make sure that you have the freedom to
+distribute copies of free software (and charge for this service if you wish),
+that you receive source code or can get it if you want it, that you can change
+the software or use pieces of it in new free programs; and that you know you
+can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny
+you these rights or to ask you to surrender the rights.  These restrictions
+translate to certain responsibilities for you if you distribute copies of the
+software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for
+a fee, you must give the recipients all the rights that you have.  You must
+make sure that they, too, receive or can get the source code.  And you must
+show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2)
+offer you this license which gives you legal permission to copy, distribute
+and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that
+everyone understands that there is no warranty for this free software.  If the
+software is modified by someone else and passed on, we want its recipients to
+know that what they have is not the original, so that any problems introduced
+by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents.  We
+wish to avoid the danger that redistributors of a free program will
+individually obtain patent licenses, in effect making the program proprietary.
+To prevent this, we have made it clear that any patent must be licensed for
+everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice
+placed by the copyright holder saying it may be distributed under the terms of
+this General Public License.  The "Program", below, refers to any such program
+or work, and a "work based on the Program" means either the Program or any
+derivative work under copyright law: that is to say, a work containing the
+Program or a portion of it, either verbatim or with modifications and/or
+translated into another language.  (Hereinafter, translation is included
+without limitation in the term "modification".) Each licensee is addressed as
+"you".
+
+Activities other than copying, distribution and modification are not covered by
+this License; they are outside its scope.  The act of running the Program is
+not restricted, and the output from the Program is covered only if its contents
+constitute a work based on the Program (independent of having been made by
+running the Program).  Whether that is true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program's source code as
+you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this License
+and to the absence of any warranty; and give any other recipients of the
+Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may
+at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it, thus
+forming a work based on the Program, and copy and distribute such modifications
+or work under the terms of Section 1 above, provided that you also meet all of
+these conditions:
+
+    a) You must cause the modified files to carry prominent notices stating
+    that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in whole or
+    in part contains or is derived from the Program or any part thereof, to be
+    licensed as a whole at no charge to all third parties under the terms of
+    this License.
+
+    c) If the modified program normally reads commands interactively when run,
+    you must cause it, when started running for such interactive use in the
+    most ordinary way, to print or display an announcement including an
+    appropriate copyright notice and a notice that there is no warranty (or
+    else, saying that you provide a warranty) and that users may redistribute
+    the program under these conditions, and telling the user how to view a copy
+    of this License.  (Exception: if the Program itself is interactive but does
+    not normally print such an announcement, your work based on the Program is
+    not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If identifiable
+sections of that work are not derived from the Program, and can be reasonably
+considered independent and separate works in themselves, then this License, and
+its terms, do not apply to those sections when you distribute them as separate
+works.  But when you distribute the same sections as part of a whole which is a
+work based on the Program, the distribution of the whole must be on the terms
+of this License, whose permissions for other licensees extend to the entire
+whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise the
+right to control the distribution of derivative or collective works based on
+the Program.
+
+In addition, mere aggregation of another work not based on the Program with the
+Program (or with a work based on the Program) on a volume of a storage or
+distribution medium does not bring the other work under the scope of this
+License.
+
+3. You may copy and distribute the Program (or a work based on it, under
+Section 2) in object code or executable form under the terms of Sections 1 and
+2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable source
+    code, which must be distributed under the terms of Sections 1 and 2 above
+    on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three years, to
+    give any third party, for a charge no more than your cost of physically
+    performing source distribution, a complete machine-readable copy of the
+    corresponding source code, to be distributed under the terms of Sections 1
+    and 2 above on a medium customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer to
+    distribute corresponding source code.  (This alternative is allowed only
+    for noncommercial distribution and only if you received the program in
+    object code or executable form with such an offer, in accord with
+    Subsection b above.)
+
+The source code for a work means the preferred form of the work for making
+modifications to it.  For an executable work, complete source code means all
+the source code for all modules it contains, plus any associated interface
+definition files, plus the scripts used to control compilation and installation
+of the executable.  However, as a special exception, the source code
+distributed need not include anything that is normally distributed (in either
+source or binary form) with the major components (compiler, kernel, and so on)
+of the operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the source
+code from the same place counts as distribution of the source code, even though
+third parties are not compelled to copy the source along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as
+expressly provided under this License.  Any attempt otherwise to copy, modify,
+sublicense or distribute the Program is void, and will automatically terminate
+your rights under this License.  However, parties who have received copies, or
+rights, from you under this License will not have their licenses terminated so
+long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it.
+However, nothing else grants you permission to modify or distribute the Program
+or its derivative works.  These actions are prohibited by law if you do not
+accept this License.  Therefore, by modifying or distributing the Program (or
+any work based on the Program), you indicate your acceptance of this License to
+do so, and all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program),
+the recipient automatically receives a license from the original licensor to
+copy, distribute or modify the Program subject to these terms and conditions.
+You may not impose any further restrictions on the recipients' exercise of the
+rights granted herein.  You are not responsible for enforcing compliance by
+third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues), conditions
+are imposed on you (whether by court order, agreement or otherwise) that
+contradict the conditions of this License, they do not excuse you from the
+conditions of this License.  If you cannot distribute so as to satisfy
+simultaneously your obligations under this License and any other pertinent
+obligations, then as a consequence you may not distribute the Program at all.
+For example, if a patent license would not permit royalty-free redistribution
+of the Program by all those who receive copies directly or indirectly through
+you, then the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply and
+the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or
+other property right claims or to contest validity of any such claims; this
+section has the sole purpose of protecting the integrity of the free software
+distribution system, which is implemented by public license practices.  Many
+people have made generous contributions to the wide range of software
+distributed through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee cannot impose that
+choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain
+countries either by patents or by copyrighted interfaces, the original
+copyright holder who places the Program under this License may add an explicit
+geographical distribution limitation excluding those countries, so that
+distribution is permitted only in or among countries not thus excluded.  In
+such case, this License incorporates the limitation as if written in the body
+of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of the
+General Public License from time to time.  Such new versions will be similar in
+spirit to the present version, but may differ in detail to address new problems
+or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any later
+version", you have the option of following the terms and conditions either of
+that version or of any later version published by the Free Software Foundation.
+If the Program does not specify a version number of this License, you may
+choose any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs
+whose distribution conditions are different, write to the author to ask for
+permission.  For software which is copyrighted by the Free Software Foundation,
+write to the Free Software Foundation; we sometimes make exceptions for this.
+Our decision will be guided by the two goals of preserving the free status of
+all derivatives of our free software and of promoting the sharing and reuse of
+software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
+THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE
+STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
+PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
+PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE,
+YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
+ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE
+PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
+BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER
+OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible
+use to the public, the best way to achieve this is to make it free software
+which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program.  It is safest to attach
+them to the start of each source file to most effectively convey the exclusion
+of warranty; and each file should have at least the "copyright" line and a
+pointer to where the full notice is found.
+
+    One line to give the program's name and a brief idea of what it does.
+
+    Copyright (C) <year> <name of author>
+
+    This program is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the Free
+    Software Foundation; either version 2 of the License, or (at your option)
+    any later version.
+
+    This program is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+    more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc., 59
+    Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it
+starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author Gnomovision comes
+    with ABSOLUTELY NO WARRANTY; for details type 'show w'.  This is free
+    software, and you are welcome to redistribute it under certain conditions;
+    type 'show c' for details.
+
+The hypothetical commands 'show w' and 'show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may be
+called something other than 'show w' and 'show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.  Here
+is a sample; alter the names:
+
+    Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+    'Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+    signature of Ty Coon, 1 April 1989
+
+    Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General Public
+License instead of this License.
+
+
+"CLASSPATH" EXCEPTION TO THE GPL
+
+Certain source files distributed by Oracle America and/or its affiliates are
+subject to the following clarification and special exception to the GPL, but
+only where Oracle has expressly included in the particular source file's header
+the words "Oracle designates this particular file as subject to the "Classpath"
+exception as provided by Oracle in the LICENSE file that accompanied this code."
+
+    Linking this library statically or dynamically with other modules is making
+    a combined work based on this library.  Thus, the terms and conditions of
+    the GNU General Public License cover the whole combination.
+
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent modules,
+    and to copy and distribute the resulting executable under terms of your
+    choice, provided that you also meet, for each linked independent module,
+    the terms and conditions of the license of that module.  An independent
+    module is a module which is not derived from or based on this library.  If
+    you modify this library, you may extend this exception to your version of
+    the library, but you are not obligated to do so.  If you do not wish to do
+    so, delete this exception statement from your version.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests-chapter-1c/THIRD_PARTY_README	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,29 @@
+DO NOT TRANSLATE OR LOCALIZE.
+-----------------------------
+
+%% This notice is provided with respect to JOpt-Simple v4.6.
+
+--- begin of LICENSE ---
+
+Copyright (c) SourceForge
+
+The MIT License Copyright (c) Permission is hereby granted, free of
+charge, to any person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use, copy,
+modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+--- end of LICENSE ---
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests-chapter-1c/pom.xml	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,149 @@
+<!--
+Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+This code is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License version 2 only, as
+published by the Free Software Foundation.  Oracle designates this
+particular file as subject to the "Classpath" exception as provided
+by Oracle in the LICENSE file that accompanied this code.
+
+This code is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+version 2 for more details (a copy is included in the LICENSE file that
+accompanied this code).
+
+You should have received a copy of the GNU General Public License version
+2 along with this work; if not, write to the Free Software Foundation,
+Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+or visit www.oracle.com if you need additional information or have any
+questions.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.openjdk.jcstress</groupId>
+        <artifactId>jcstress-parent</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>jcstress-tests-chapter-1c</artifactId>
+    <packaging>jar</packaging>
+
+    <name>Chapter 1.c: Library Foundations: VarHandles, Fences</name>
+    <url>http://maven.apache.org</url>
+
+    <scm>
+        <connection>scm:hg:http://hg.openjdk.java.net/code-tools/jcstress/</connection>
+    </scm>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.9</source>
+                    <target>1.9</target>
+                    <debug>false</debug>
+                    <meminitial>4096</meminitial>
+                    <fork>true</fork>
+                    <compilerArgs>
+                        <!--
+                            No, compiler, we need that sun.misc.Contended here.
+                            Stop complaining sun.misc package is invisible. You can't?
+                            Huh, I guess no module access checks for you then:
+                        -->
+                        <arg>-XDnoModules</arg>
+                    </compilerArgs>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <version>1.2.1</version>
+                <executions>
+                    <execution>
+                        <id>gen</id>
+                        <goals>
+                            <goal>exec</goal>
+                        </goals>
+                        <phase>
+                            generate-sources
+                        </phase>
+                        <configuration>
+                            <executable>${java.home}/bin/java</executable>
+                            <arguments>
+                                <argument>-jar</argument>
+                                <argument>../jcstress-test-gen/target/chapter1c-generator.jar</argument>
+                                <argument>${project.build.directory}/generated-sources/tests/</argument>
+                            </arguments>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
+                <version>1.7</version>
+                <executions>
+                    <execution>
+                        <id>add-source</id>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>add-source</goal>
+                        </goals>
+                        <configuration>
+                            <sources>
+                                <source>${project.build.directory}/generated-sources/tests/</source>
+                            </sources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>com.mycila.maven-license-plugin</groupId>
+                <artifactId>maven-license-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>buildnumber-maven-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-enforcer-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.openjdk.jcstress</groupId>
+            <artifactId>jcstress-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openjdk.jcstress</groupId>
+            <artifactId>jcstress-test-gen</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests-chapter-1c/src/main/java/Test.java	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,27 @@
+/**
+ * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+// Stub to break the habit of revision control systems to remove empty dirs
+public class Test {
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests-chapter-1c/src/main/resources/LICENSE	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,347 @@
+The GNU General Public License (GPL)
+
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share
+and change it.  By contrast, the GNU General Public License is intended to
+guarantee your freedom to share and change free software--to make sure the
+software is free for all its users.  This General Public License applies to
+most of the Free Software Foundation's software and to any other program whose
+authors commit to using it.  (Some other Free Software Foundation software is
+covered by the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+When we speak of free software, we are referring to freedom, not price.  Our
+General Public Licenses are designed to make sure that you have the freedom to
+distribute copies of free software (and charge for this service if you wish),
+that you receive source code or can get it if you want it, that you can change
+the software or use pieces of it in new free programs; and that you know you
+can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny
+you these rights or to ask you to surrender the rights.  These restrictions
+translate to certain responsibilities for you if you distribute copies of the
+software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for
+a fee, you must give the recipients all the rights that you have.  You must
+make sure that they, too, receive or can get the source code.  And you must
+show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2)
+offer you this license which gives you legal permission to copy, distribute
+and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that
+everyone understands that there is no warranty for this free software.  If the
+software is modified by someone else and passed on, we want its recipients to
+know that what they have is not the original, so that any problems introduced
+by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents.  We
+wish to avoid the danger that redistributors of a free program will
+individually obtain patent licenses, in effect making the program proprietary.
+To prevent this, we have made it clear that any patent must be licensed for
+everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice
+placed by the copyright holder saying it may be distributed under the terms of
+this General Public License.  The "Program", below, refers to any such program
+or work, and a "work based on the Program" means either the Program or any
+derivative work under copyright law: that is to say, a work containing the
+Program or a portion of it, either verbatim or with modifications and/or
+translated into another language.  (Hereinafter, translation is included
+without limitation in the term "modification".) Each licensee is addressed as
+"you".
+
+Activities other than copying, distribution and modification are not covered by
+this License; they are outside its scope.  The act of running the Program is
+not restricted, and the output from the Program is covered only if its contents
+constitute a work based on the Program (independent of having been made by
+running the Program).  Whether that is true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program's source code as
+you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this License
+and to the absence of any warranty; and give any other recipients of the
+Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may
+at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it, thus
+forming a work based on the Program, and copy and distribute such modifications
+or work under the terms of Section 1 above, provided that you also meet all of
+these conditions:
+
+    a) You must cause the modified files to carry prominent notices stating
+    that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in whole or
+    in part contains or is derived from the Program or any part thereof, to be
+    licensed as a whole at no charge to all third parties under the terms of
+    this License.
+
+    c) If the modified program normally reads commands interactively when run,
+    you must cause it, when started running for such interactive use in the
+    most ordinary way, to print or display an announcement including an
+    appropriate copyright notice and a notice that there is no warranty (or
+    else, saying that you provide a warranty) and that users may redistribute
+    the program under these conditions, and telling the user how to view a copy
+    of this License.  (Exception: if the Program itself is interactive but does
+    not normally print such an announcement, your work based on the Program is
+    not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If identifiable
+sections of that work are not derived from the Program, and can be reasonably
+considered independent and separate works in themselves, then this License, and
+its terms, do not apply to those sections when you distribute them as separate
+works.  But when you distribute the same sections as part of a whole which is a
+work based on the Program, the distribution of the whole must be on the terms
+of this License, whose permissions for other licensees extend to the entire
+whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise the
+right to control the distribution of derivative or collective works based on
+the Program.
+
+In addition, mere aggregation of another work not based on the Program with the
+Program (or with a work based on the Program) on a volume of a storage or
+distribution medium does not bring the other work under the scope of this
+License.
+
+3. You may copy and distribute the Program (or a work based on it, under
+Section 2) in object code or executable form under the terms of Sections 1 and
+2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable source
+    code, which must be distributed under the terms of Sections 1 and 2 above
+    on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three years, to
+    give any third party, for a charge no more than your cost of physically
+    performing source distribution, a complete machine-readable copy of the
+    corresponding source code, to be distributed under the terms of Sections 1
+    and 2 above on a medium customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer to
+    distribute corresponding source code.  (This alternative is allowed only
+    for noncommercial distribution and only if you received the program in
+    object code or executable form with such an offer, in accord with
+    Subsection b above.)
+
+The source code for a work means the preferred form of the work for making
+modifications to it.  For an executable work, complete source code means all
+the source code for all modules it contains, plus any associated interface
+definition files, plus the scripts used to control compilation and installation
+of the executable.  However, as a special exception, the source code
+distributed need not include anything that is normally distributed (in either
+source or binary form) with the major components (compiler, kernel, and so on)
+of the operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the source
+code from the same place counts as distribution of the source code, even though
+third parties are not compelled to copy the source along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as
+expressly provided under this License.  Any attempt otherwise to copy, modify,
+sublicense or distribute the Program is void, and will automatically terminate
+your rights under this License.  However, parties who have received copies, or
+rights, from you under this License will not have their licenses terminated so
+long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it.
+However, nothing else grants you permission to modify or distribute the Program
+or its derivative works.  These actions are prohibited by law if you do not
+accept this License.  Therefore, by modifying or distributing the Program (or
+any work based on the Program), you indicate your acceptance of this License to
+do so, and all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program),
+the recipient automatically receives a license from the original licensor to
+copy, distribute or modify the Program subject to these terms and conditions.
+You may not impose any further restrictions on the recipients' exercise of the
+rights granted herein.  You are not responsible for enforcing compliance by
+third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues), conditions
+are imposed on you (whether by court order, agreement or otherwise) that
+contradict the conditions of this License, they do not excuse you from the
+conditions of this License.  If you cannot distribute so as to satisfy
+simultaneously your obligations under this License and any other pertinent
+obligations, then as a consequence you may not distribute the Program at all.
+For example, if a patent license would not permit royalty-free redistribution
+of the Program by all those who receive copies directly or indirectly through
+you, then the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply and
+the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or
+other property right claims or to contest validity of any such claims; this
+section has the sole purpose of protecting the integrity of the free software
+distribution system, which is implemented by public license practices.  Many
+people have made generous contributions to the wide range of software
+distributed through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee cannot impose that
+choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain
+countries either by patents or by copyrighted interfaces, the original
+copyright holder who places the Program under this License may add an explicit
+geographical distribution limitation excluding those countries, so that
+distribution is permitted only in or among countries not thus excluded.  In
+such case, this License incorporates the limitation as if written in the body
+of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of the
+General Public License from time to time.  Such new versions will be similar in
+spirit to the present version, but may differ in detail to address new problems
+or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any later
+version", you have the option of following the terms and conditions either of
+that version or of any later version published by the Free Software Foundation.
+If the Program does not specify a version number of this License, you may
+choose any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs
+whose distribution conditions are different, write to the author to ask for
+permission.  For software which is copyrighted by the Free Software Foundation,
+write to the Free Software Foundation; we sometimes make exceptions for this.
+Our decision will be guided by the two goals of preserving the free status of
+all derivatives of our free software and of promoting the sharing and reuse of
+software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
+THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE
+STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
+PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
+PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE,
+YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
+ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE
+PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
+BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER
+OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible
+use to the public, the best way to achieve this is to make it free software
+which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program.  It is safest to attach
+them to the start of each source file to most effectively convey the exclusion
+of warranty; and each file should have at least the "copyright" line and a
+pointer to where the full notice is found.
+
+    One line to give the program's name and a brief idea of what it does.
+
+    Copyright (C) <year> <name of author>
+
+    This program is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the Free
+    Software Foundation; either version 2 of the License, or (at your option)
+    any later version.
+
+    This program is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+    more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc., 59
+    Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it
+starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author Gnomovision comes
+    with ABSOLUTELY NO WARRANTY; for details type 'show w'.  This is free
+    software, and you are welcome to redistribute it under certain conditions;
+    type 'show c' for details.
+
+The hypothetical commands 'show w' and 'show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may be
+called something other than 'show w' and 'show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.  Here
+is a sample; alter the names:
+
+    Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+    'Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+    signature of Ty Coon, 1 April 1989
+
+    Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General Public
+License instead of this License.
+
+
+"CLASSPATH" EXCEPTION TO THE GPL
+
+Certain source files distributed by Oracle America and/or its affiliates are
+subject to the following clarification and special exception to the GPL, but
+only where Oracle has expressly included in the particular source file's header
+the words "Oracle designates this particular file as subject to the "Classpath"
+exception as provided by Oracle in the LICENSE file that accompanied this code."
+
+    Linking this library statically or dynamically with other modules is making
+    a combined work based on this library.  Thus, the terms and conditions of
+    the GNU General Public License cover the whole combination.
+
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent modules,
+    and to copy and distribute the resulting executable under terms of your
+    choice, provided that you also meet, for each linked independent module,
+    the terms and conditions of the license of that module.  An independent
+    module is a module which is not derived from or based on this library.  If
+    you modify this library, you may extend this exception to your version of
+    the library, but you are not obligated to do so.  If you do not wish to do
+    so, delete this exception statement from your version.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests-chapter-1c/src/main/resources/THIRD_PARTY_README	Fri Jun 10 15:29:27 2016 +0300
@@ -0,0 +1,29 @@
+DO NOT TRANSLATE OR LOCALIZE.
+-----------------------------
+
+%% This notice is provided with respect to JOpt-Simple v4.6.
+
+--- begin of LICENSE ---
+
+Copyright (c) SourceForge
+
+The MIT License Copyright (c) Permission is hereby granted, free of
+charge, to any person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use, copy,
+modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+--- end of LICENSE ---