changeset 200:e6742cddf3eb

Migrate volatiles.* tests to annotation API, #2.
author shade
date Wed, 13 Aug 2014 02:35:11 +0400
parents e1fc329c5667
children 3b872b32f4f0
files tests-custom/src/main/java/org/openjdk/jcstress/tests/volatiles/DekkerTest.java tests-custom/src/main/java/org/openjdk/jcstress/tests/volatiles/DoubleVolatileTest.java tests-custom/src/main/java/org/openjdk/jcstress/tests/volatiles/LazySetTransitivityTest.java tests-custom/src/main/java/org/openjdk/jcstress/tests/volatiles/ReadAfterVolatileReadTest.java tests-custom/src/main/java/org/openjdk/jcstress/tests/volatiles/ReadTwiceOverVolatileReadTest.java tests-custom/src/main/java/org/openjdk/jcstress/tests/volatiles/VolatileAcquireReleaseTest.java tests-custom/src/main/java/org/openjdk/jcstress/tests/volatiles/VolatileIncrementAtomicityTest.java tests-custom/src/main/resources/org/openjdk/jcstress/desc/volatiles.xml
diffstat 8 files changed, 56 insertions(+), 333 deletions(-) [+]
line wrap: on
line diff
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/volatiles/DekkerTest.java	Wed Aug 13 02:18:17 2014 +0400
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/volatiles/DekkerTest.java	Wed Aug 13 02:35:11 2014 +0400
@@ -39,7 +39,8 @@
 @Description("Tests Dekker-lock-style idioms")
 @Outcome(id = {"[0, 1]", "[1, 0]", "[1, 1]"}, expect = ACCEPTABLE, desc = "Trivial under sequential consistency")
 @Outcome(id = "[0, 0]",                       expect = FORBIDDEN,  desc = "Violates sequential consistency")
-@Ref("[TBD Link]")
+@Ref("http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2013-February/009604.html")
+@Ref("http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8007898")
 @State
 public class DekkerTest {
 
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/volatiles/DoubleVolatileTest.java	Wed Aug 13 02:18:17 2014 +0400
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/volatiles/DoubleVolatileTest.java	Wed Aug 13 02:35:11 2014 +0400
@@ -25,11 +25,20 @@
 package org.openjdk.jcstress.tests.volatiles;
 
 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.State;
 import org.openjdk.jcstress.infra.results.IntResult3;
 
 @JCStressTest
+@Outcome(id = "[0, 0, 0]", expect = Expect.ACCEPTABLE, desc = "Legal: No updates had occured.")
+@Outcome(id = "[1, 0, 0]", expect = Expect.FORBIDDEN,  desc = "Illegal to see the stale $data once $guard1 is visible")
+@Outcome(id = "[1, 0, 1]", expect = Expect.FORBIDDEN,  desc = "Illegal to see the stale $data once $guard1 is visible")
+@Outcome(id = "[0, 0, 1]", expect = Expect.ACCEPTABLE, desc = "Legal: Seeing the update for $guard2, but no other updates.")
+@Outcome(id = "[0, 1, 0]", expect = Expect.ACCEPTABLE, desc = "Legal: Seeing the early update for $data, while no updates for guards are visible.")
+@Outcome(id = "[0, 1, 1]", expect = Expect.ACCEPTABLE, desc = "Legal: Seeing the update for $data and $guard2.")
+@Outcome(id = "[1, 1, 1]", expect = Expect.ACCEPTABLE, desc = "Legal: Seeing all updates.")
 @State
 public class DoubleVolatileTest {
 
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/volatiles/LazySetTransitivityTest.java	Wed Aug 13 02:18:17 2014 +0400
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/volatiles/LazySetTransitivityTest.java	Wed Aug 13 02:35:11 2014 +0400
@@ -25,13 +25,23 @@
 package org.openjdk.jcstress.tests.volatiles;
 
 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.infra.results.IntResult3;
 
 import java.util.concurrent.atomic.AtomicInteger;
 
 @JCStressTest
+@Outcome(id = "[1, 0, 1]", expect = Expect.ACCEPTABLE, desc = "Legal: T3 reads B=0, and there are no guarantees about the value of A.")
+@Outcome(id = "[1, 0, 0]", expect = Expect.ACCEPTABLE, desc = "Legal: T3 reads B=0, and there are no guarantees about the value of A.")
+@Outcome(id = "[0, 0, 0]", expect = Expect.ACCEPTABLE, desc = "Legal: T3 reads B=0, and there are no guarantees about the value of A.")
+@Outcome(id = "[0, 0, 1]", expect = Expect.ACCEPTABLE, desc = "Legal: T3 reads B=0, and there are no guarantees about the value of A.")
+@Outcome(id = "[1, 1, 1]", expect = Expect.ACCEPTABLE, desc = "Legal: T3 observes (B=1, A=1). This looks like the evidence for transitivity.")
+@Outcome(id = "[1, 1, 0]", expect = Expect.FORBIDDEN,  desc = "Illegal: T3 observes stale value for A.")
+@Ref("http://cs.oswego.edu/pipermail/concurrency-interest/2013-January/010669.html")
 @State
 public class LazySetTransitivityTest {
 
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/volatiles/ReadAfterVolatileReadTest.java	Wed Aug 13 02:18:17 2014 +0400
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/volatiles/ReadAfterVolatileReadTest.java	Wed Aug 13 02:35:11 2014 +0400
@@ -25,7 +25,9 @@
 package org.openjdk.jcstress.tests.volatiles;
 
 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.State;
 import org.openjdk.jcstress.infra.results.IntResult2;
 
@@ -35,6 +37,14 @@
  *  @author Aleksey Shipilev (aleksey.shipilev@oracle.com)
  */
 @JCStressTest
+@Outcome(id = "[0, 0]", expect = Expect.ACCEPTABLE, desc = "Volatile write to $y did not yet happened, the observer is allowed to see any value for $x.")
+@Outcome(id = "[0, 1]", expect = Expect.ACCEPTABLE, desc = "Volatile write to $y did not yet happened, the observer is allowed to see any value for $x.")
+@Outcome(id = "[0, 2]", expect = Expect.ACCEPTABLE, desc = "Volatile write to $y did not yet happened, the observer is allowed to see any value for $x.")
+@Outcome(id = "[0, 3]", expect = Expect.ACCEPTABLE, desc = "Volatile write to $y did not yet happened, the observer is allowed to see any value for $x.")
+@Outcome(id = "[1, 0]", expect = Expect.FORBIDDEN,  desc = "Can't read the default value for $x after $y is effective.")
+@Outcome(id = "[1, 1]", expect = Expect.FORBIDDEN,  desc = "Can't read the stale value for $x after $y is effective.")
+@Outcome(id = "[1, 2]", expect = Expect.ACCEPTABLE, desc = "Can see either after volatile write to $y is in effect.")
+@Outcome(id = "[1, 3]", expect = Expect.ACCEPTABLE, desc = "Can see either after volatile write to $y is in effect.")
 @State
 public class ReadAfterVolatileReadTest {
 
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/volatiles/ReadTwiceOverVolatileReadTest.java	Wed Aug 13 02:18:17 2014 +0400
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/volatiles/ReadTwiceOverVolatileReadTest.java	Wed Aug 13 02:35:11 2014 +0400
@@ -25,7 +25,10 @@
 package org.openjdk.jcstress.tests.volatiles;
 
 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.infra.results.IntResult3;
 
@@ -35,6 +38,13 @@
  * @author Aleksey Shipilev (aleksey.shipilev@oracle.com)
  */
 @JCStressTest
+@Outcome(id = "[0, 0, 0]", expect = Expect.ACCEPTABLE, desc = "Default value for the fields. Observers are allowed to see the default value for the field, because there is the data race between reader and writer.")
+@Outcome(id = "[0, 1, 0]", expect = Expect.FORBIDDEN,  desc = "Volatile write to $y had happened, and update to $x had been lost.")
+@Outcome(id = "[1, 1, 0]", expect = Expect.FORBIDDEN,  desc = "Volatile write to $y had happened, and update to $x had been lost.")
+@Outcome(id = "[0, 0, 1]", expect = Expect.ACCEPTABLE, desc = "Write to $y is still in flight, $x is arriving late.")
+@Outcome(id = "[0, 1, 1]", expect = Expect.ACCEPTABLE, desc = "The writes appear the the writers' order.")
+@Outcome(id = "[1, 1, 1]", expect = Expect.ACCEPTABLE, desc = "Both updates are visible.")
+@Ref("http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7170145")
 @State
 public class ReadTwiceOverVolatileReadTest {
 
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/volatiles/VolatileAcquireReleaseTest.java	Wed Aug 13 02:18:17 2014 +0400
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/volatiles/VolatileAcquireReleaseTest.java	Wed Aug 13 02:35:11 2014 +0400
@@ -25,7 +25,9 @@
 package org.openjdk.jcstress.tests.volatiles;
 
 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.State;
 import org.openjdk.jcstress.infra.results.IntResult2;
 
@@ -35,6 +37,14 @@
  *  @author Doug Lea (dl@cs.oswego.edu)
  */
 @JCStressTest
+@Outcome(id = "[0, 0]", expect = Expect.ACCEPTABLE, desc = "Before observing releasing write to, any value is OK for $x.")
+@Outcome(id = "[0, 1]", expect = Expect.ACCEPTABLE, desc = "Before observing releasing write to, any value is OK for $x.")
+@Outcome(id = "[0, 2]", expect = Expect.ACCEPTABLE, desc = "Before observing releasing write to, any value is OK for $x.")
+@Outcome(id = "[0, 3]", expect = Expect.ACCEPTABLE, desc = "Before observing releasing write to, any value is OK for $x.")
+@Outcome(id = "[1, 0]", expect = Expect.FORBIDDEN,  desc = "Can't read the default or old value for $x after $y is observed.")
+@Outcome(id = "[1, 1]", expect = Expect.FORBIDDEN,  desc = "Can't read the default or old value for $x after $y is observed.")
+@Outcome(id = "[1, 2]", expect = Expect.ACCEPTABLE, desc = "Can see a released value of $x if $y is observed.")
+@Outcome(id = "[1, 3]", expect = Expect.ACCEPTABLE, desc = "Can see a released value of $x if $y is observed.")
 @State
 public class VolatileAcquireReleaseTest {
 
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/volatiles/VolatileIncrementAtomicityTest.java	Wed Aug 13 02:18:17 2014 +0400
+++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/volatiles/VolatileIncrementAtomicityTest.java	Wed Aug 13 02:35:11 2014 +0400
@@ -25,7 +25,9 @@
 package org.openjdk.jcstress.tests.volatiles;
 
 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.State;
 import org.openjdk.jcstress.infra.results.IntResult2;
 
@@ -35,6 +37,9 @@
  * @author Aleksey Shipilev (aleksey.shipilev@oracle.com)
  */
 @JCStressTest
+@Outcome(id = "[1, 1]", expect = Expect.ACCEPTABLE_INTERESTING, desc = "Each thread sees the same value, regardless of the update. One update is lost.")
+@Outcome(id = "[1, 2]", expect = Expect.ACCEPTABLE, desc = "Each thread sees its own increment, as if the increment is atomic.")
+@Outcome(id = "[2, 1]", expect = Expect.ACCEPTABLE, desc = "Each thread sees its own increment, as if the increment is atomic.")
 @State
 public class VolatileIncrementAtomicityTest {
 
--- a/tests-custom/src/main/resources/org/openjdk/jcstress/desc/volatiles.xml	Wed Aug 13 02:18:17 2014 +0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,332 +0,0 @@
-<!--
-
-    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.
-
--->
-<testsuite>
-
-    <test name="org.openjdk.jcstress.tests.volatiles.ReadAfterVolatileReadTest">
-        <contributed-by>Aleksey Shipilev (aleksey.shipilev@oracle.com)</contributed-by>
-        <description>
-            Tests if volatile write-read induce proper happens-before.
-        </description>
-        <case>
-            <match>[0, 0]</match>
-            <match>[0, 1]</match>
-            <match>[0, 2]</match>
-            <match>[0, 3]</match>
-            <expect>ACCEPTABLE</expect>
-            <description>
-                Volatile write to $y did not yet happened, the observer is allowed to see any value for $x.
-            </description>
-        </case>
-        <case>
-            <match>[1, 0]</match>
-            <expect>FORBIDDEN</expect>
-            <description>
-                Can't read the default value for $x after $y is effective.
-            </description>
-        </case>
-        <case>
-            <match>[1, 1]</match>
-            <expect>FORBIDDEN</expect>
-            <description>
-                Can't read the stale value for $x after $y is effective.
-            </description>
-        </case>
-        <case>
-            <match>[1, 2]</match>
-            <match>[1, 3]</match>
-            <expect>ACCEPTABLE</expect>
-            <description>
-                Can see either after volatile write to $y is in effect.
-            </description>
-        </case>
-        <unmatched>
-            <expect>FORBIDDEN</expect>
-            <description>
-                This case is not expected.
-            </description>
-        </unmatched>
-    </test>
-
-    <test name="org.openjdk.jcstress.tests.volatiles.ReadTwiceOverVolatileReadTest">
-        <contributed-by>Aleksey Shipilev (aleksey.shipilev@oracle.com)</contributed-by>
-        <description>
-            Test if volatile write-read induces happens-before if in between two non-volatile reads.
-        </description>
-        <case>
-            <match>[0, 0, 0]</match>
-            <expect>ACCEPTABLE</expect>
-            <description>
-                Default value for the fields. Observers are allowed to see the default value for the field,
-                because there is the data race between reader and writer.
-            </description>
-        </case>
-        <case>
-            <match>[0, 1, 0]</match>
-            <expect>FORBIDDEN</expect>
-            <description>
-                Volatile write to $y had happened, and update to $x had been lost.
-            </description>
-            <refs>
-                <url>http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7170145</url>
-            </refs>
-        </case>
-        <case>
-            <match>[1, 1, 0]</match>
-            <expect>FORBIDDEN</expect>
-            <description>
-                Volatile write to $y had happened, and update to $x had been lost (this one is very weird).
-            </description>
-        </case>
-        <case>
-            <match>[0, 0, 1]</match>
-            <match>[1, 0, 1]</match>
-            <expect>ACCEPTABLE</expect>
-            <description>
-                Write to $y is still in flight, $x is arriving late.
-                This is the evidence the compiler had not merged the loads for $x.
-            </description>
-        </case>
-        <case>
-            <match>[0, 1, 1]</match>
-            <expect>ACCEPTABLE</expect>
-            <description>
-                The writes appear the the writers' order.
-                This code also means the compiler had not merged the loads for $x.
-            </description>
-        </case>
-        <case>
-            <match>[1, 1, 1]</match>
-            <expect>ACCEPTABLE</expect>
-            <description>
-                Both updates are visible.
-            </description>
-        </case>
-        <unmatched>
-            <expect>FORBIDDEN</expect>
-            <description>
-                This case is not expected.
-            </description>
-        </unmatched>
-    </test>
-
-    <test name="org.openjdk.jcstress.tests.volatiles.VolatileIncrementAtomicityTest">
-        <contributed-by>Aleksey Shipilev (aleksey.shipilev@oracle.com)</contributed-by>
-        <description>
-            Tests the atomicity of volatile increment.
-        </description>
-        <case>
-            <match>[1, 1]</match>
-            <expect>ACCEPTABLE_INTERESTING</expect>
-            <description>
-                Each thread sees the same value, regardless of the update. One update is lost.
-            </description>
-        </case>
-        <case>
-            <match>[1, 2]</match>
-            <match>[2, 1]</match>
-            <expect>ACCEPTABLE</expect>
-            <description>
-                Each thread sees its own increment, as if the increment is atomic.
-            </description>
-        </case>
-        <unmatched>
-            <expect>FORBIDDEN</expect>
-            <description>
-                Other cases are not expected.
-            </description>
-        </unmatched>
-    </test>
-
-    <test name="org.openjdk.jcstress.tests.volatiles.DekkerTest">
-        <contributed-by>Aleksey Shipilev (aleksey.shipilev@oracle.com)</contributed-by>
-        <description>
-            Tests the sequential consistency on Dekker-like construction.
-        </description>
-        <case>
-            <match>[0, 1]</match>
-            <match>[1, 0]</match>
-            <match>[1, 1]</match>
-            <expect>ACCEPTABLE</expect>
-            <description>
-                Acceptable under sequential consistency
-            </description>
-        </case>
-        <case>
-            <match>[0, 0]</match>
-            <expect>FORBIDDEN</expect>
-            <description>
-                Un-acceptable under sequential consistency
-            </description>
-            <refs>
-                <url>http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2013-February/009604.html</url>
-                <url>http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8007898</url>
-            </refs>
-        </case>
-        <unmatched>
-            <expect>FORBIDDEN</expect>
-            <description>
-                Other cases are not expected.
-            </description>
-        </unmatched>
-    </test>
-
-    <test name="org.openjdk.jcstress.tests.volatiles.DoubleVolatileTest">
-        <contributed-by>Aleksey Shipilev (aleksey.shipilev@oracle.com)</contributed-by>
-        <description>
-            N/A
-        </description>
-        <case>
-            <match>[0, 0, 0]</match>
-            <expect>ACCEPTABLE</expect>
-            <description>
-                Legal: No updates had occured.
-            </description>
-        </case>
-        <case>
-            <match>[1, 0, 0]</match>
-            <match>[1, 0, 1]</match>
-            <expect>FORBIDDEN</expect>
-            <description>
-                Illegal to see the stale $data once $guard1 is visible
-            </description>
-        </case>
-        <case>
-            <match>[0, 0, 1]</match>
-            <expect>ACCEPTABLE</expect>
-            <description>
-                Legal: Seeing the update for $guard2, but no other updates.
-            </description>
-        </case>
-        <case>
-            <match>[0, 1, 0]</match>
-            <expect>ACCEPTABLE</expect>
-            <description>
-                Legal: Seeing the early update for $data, while no updates for guards are visible.
-            </description>
-        </case>
-        <case>
-            <match>[0, 1, 1]</match>
-            <expect>ACCEPTABLE</expect>
-            <description>
-                Legal: Seeing the update for $data and $guard2.
-            </description>
-        </case>
-        <case>
-            <match>[1, 1, 1]</match>
-            <expect>ACCEPTABLE</expect>
-            <description>
-                Legal: Seeing all updates.
-            </description>
-        </case>
-        <unmatched>
-            <expect>FORBIDDEN</expect>
-            <description>
-                Other cases are not expected.
-            </description>
-        </unmatched>
-    </test>
-
-    <test name="org.openjdk.jcstress.tests.volatiles.LazySetTransitivityTest">
-        <contributed-by>Aleksey Shipilev (aleksey.shipilev@oracle.com)</contributed-by>
-        <description>
-            Tests the transitivity of A.lazySet(1) ---> B.set(A.get()) ---> B.get(); A.get();
-        </description>
-        <case>
-            <match>[1, 0, 1]</match>
-            <match>[1, 0, 0]</match>
-            <match>[0, 0, 0]</match>
-            <match>[0, 0, 1]</match>
-            <expect>ACCEPTABLE</expect>
-            <description>
-                Legal: T3 reads B=0, and there are no guarantees about the value of A.
-            </description>
-        </case>
-        <case>
-            <match>[1, 1, 1]</match>
-            <expect>ACCEPTABLE</expect>
-            <description>
-                Legal: T3 observes (B=1, A=1). This looks like the evidence for transitivity.
-            </description>
-        </case>
-        <case>
-            <match>[1, 1, 0]</match>
-            <expect>FORBIDDEN</expect>
-            <description>
-                Illegal: T3 observes stale value for A.
-            </description>
-            <refs>
-                <url>http://cs.oswego.edu/pipermail/concurrency-interest/2013-January/010669.html</url>
-            </refs>
-        </case>
-        <unmatched>
-            <expect>FORBIDDEN</expect>
-            <description>
-                Other cases are not expected.
-            </description>
-        </unmatched>
-    </test>
-
-    <test name="org.openjdk.jcstress.tests.volatiles.VolatileAcquireReleaseTest">
-        <contributed-by>Doug Lea (dl@cs.oswego.edu)</contributed-by>
-        <description>
-            Test if releasing volatile write induces ordering of corresponding acquiring read.
-        </description>
-        <case>
-            <match>[0, 0]</match>
-            <match>[0, 1]</match>
-            <match>[0, 2]</match>
-            <match>[0, 3]</match>
-            <expect>ACCEPTABLE</expect>
-            <description>
-                Before obeserving releasing write to, any value is OK for $x.
-            </description>
-        </case>
-        <case>
-            <match>[1, 0]</match>
-            <match>[1, 1]</match>
-            <expect>FORBIDDEN</expect>
-            <description>
-                Can't read the default or old value for $x after $y is observed.
-            </description>
-        </case>
-        <case>
-            <match>[1, 2]</match>
-            <match>[1, 3]</match>
-            <expect>ACCEPTABLE</expect>
-            <description>
-                Can see a released value of $x if $y is observed.
-            </description>
-        </case>
-        <unmatched>
-            <expect>FORBIDDEN</expect>
-            <description>
-                This case is not expected.
-            </description>
-        </unmatched>
-    </test>
-
-</testsuite>