OpenJDK / code-tools / jcstress
changeset 385:6d05ba34c4e9
Remove ACCEPTABLE_SPEC, fold it to ACCEPTABLE_INTERESTING.
line wrap: on
line diff
--- a/jcstress-core/src/main/java/org/openjdk/jcstress/annotations/Expect.java Mon Mar 06 17:13:41 2017 +0100 +++ b/jcstress-core/src/main/java/org/openjdk/jcstress/annotations/Expect.java Mon Mar 06 18:15:37 2017 +0100 @@ -40,12 +40,6 @@ ACCEPTABLE_INTERESTING, /** - * Same as {@link #ACCEPTABLE}, but this result is only formally acceptable, and may be surprising to end users. - * TODO: Fold this with ACCEPTABLE_INTERESTING - */ - ACCEPTABLE_SPEC, - - /** * Forbidden result. Should never be present. */ FORBIDDEN,
--- a/jcstress-core/src/main/java/org/openjdk/jcstress/infra/grading/HTMLReportPrinter.java Mon Mar 06 17:13:41 2017 +0100 +++ b/jcstress-core/src/main/java/org/openjdk/jcstress/infra/grading/HTMLReportPrinter.java Mon Mar 06 18:15:37 2017 +0100 @@ -149,11 +149,6 @@ r -> r.status() != Status.NORMAL && r.status() != Status.API_MISMATCH); printXTests(byName, output, - "SPEC tests", - "Formally acceptable, but surprising results are observed. Implementations going beyond the minimal requirements should have none.", - r -> r.status() == Status.NORMAL && r.grading().hasSpec); - - printXTests(byName, output, "INTERESTING tests", "Some interesting behaviors observed. This is for the plain curiosity.", r -> r.status() == Status.NORMAL && r.grading().hasInteresting); @@ -278,11 +273,6 @@ } else { output.println("<td class=\"interesting\"></td>"); } - if (grading.hasSpec) { - output.println("<td class=\"spec\">SPEC</td>"); - } else { - output.println("<td class=\"spec\"></td>"); - } output.println("<td class=\"passed\"></td>"); output.println("</tr>"); } @@ -453,8 +443,6 @@ return isZero ? Color.LIGHT_GRAY : Color.RED; case ACCEPTABLE_INTERESTING: return isZero ? Color.LIGHT_GRAY : Color.CYAN; - case ACCEPTABLE_SPEC: - return isZero ? Color.LIGHT_GRAY : Color.YELLOW; case UNKNOWN: return Color.RED; default:
--- a/jcstress-core/src/main/java/org/openjdk/jcstress/infra/grading/TestGrading.java Mon Mar 06 17:13:41 2017 +0100 +++ b/jcstress-core/src/main/java/org/openjdk/jcstress/infra/grading/TestGrading.java Mon Mar 06 18:15:37 2017 +0100 @@ -39,7 +39,6 @@ public class TestGrading { public boolean isPassed; public boolean hasInteresting; - public boolean hasSpec; public final List<GradingResult> gradingResults; public final List<String> failureMessages; @@ -54,7 +53,6 @@ isPassed = true; hasInteresting = false; - hasSpec = false; List<StateCase> unmatchedStates = new ArrayList<>(); unmatchedStates.addAll(test.cases()); @@ -92,7 +90,6 @@ Expect ex = matched.expect(); isPassed &= passed(ex, count); hasInteresting |= hasInteresting(ex, count); - hasSpec |= hasSpec(ex, count); failureMessages.add(failureMessage(s, ex, count)); gradingResults.add(new GradingResult( @@ -108,7 +105,6 @@ Expect ex = c.expect(); isPassed &= passed(ex, 0); hasInteresting |= hasInteresting(ex, 0); - hasSpec |= hasSpec(ex, 0); failureMessages.add(failureMessage("N/A", ex, 0)); gradingResults.add(new GradingResult( @@ -130,7 +126,6 @@ switch (expect) { case ACCEPTABLE: case ACCEPTABLE_INTERESTING: - case ACCEPTABLE_SPEC: return null; case FORBIDDEN: return "Observed forbidden state: " + id; @@ -146,7 +141,6 @@ switch (expect) { case ACCEPTABLE: case ACCEPTABLE_INTERESTING: - case ACCEPTABLE_SPEC: return true; case FORBIDDEN: return count == 0; @@ -160,7 +154,6 @@ private static boolean hasInteresting(Expect expect, long count) { switch (expect) { case ACCEPTABLE: - case ACCEPTABLE_SPEC: case FORBIDDEN: return false; case ACCEPTABLE_INTERESTING: @@ -172,19 +165,4 @@ } } - private static boolean hasSpec(Expect expect, long count) { - switch (expect) { - case ACCEPTABLE: - case ACCEPTABLE_INTERESTING: - case FORBIDDEN: - return false; - case ACCEPTABLE_SPEC: - return count != 0; - case UNKNOWN: - return false; - default: - throw new IllegalStateException("No grading for expect type = " + expect); - } - } - }
--- a/jcstress-core/src/main/java/org/openjdk/jcstress/infra/grading/TextReportPrinter.java Mon Mar 06 17:13:41 2017 +0100 +++ b/jcstress-core/src/main/java/org/openjdk/jcstress/infra/grading/TextReportPrinter.java Mon Mar 06 18:15:37 2017 +0100 @@ -75,13 +75,6 @@ ); printXTests(byConfig, - "SPEC tests", - "Formally acceptable, but surprising results are observed. Implementations going beyond the minimal requirements should have none.", - r -> r.status() == Status.NORMAL && r.grading().hasSpec, - true - ); - - printXTests(byConfig, "FAILED tests", "Strong asserts were violated. Correct implementations should have no assert failures here.", r -> r.status() == Status.NORMAL && !r.grading().isPassed,
--- a/jcstress-test-gen/src/main/resources/accessAtomic/X-ArrayAtomicityTest.java.template Mon Mar 06 17:13:41 2017 +0100 +++ b/jcstress-test-gen/src/main/resources/accessAtomic/X-ArrayAtomicityTest.java.template Mon Mar 06 18:15:37 2017 +0100 @@ -38,7 +38,7 @@ #if[alwaysAtomic] @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.") #else[alwaysAtomic] -@Outcome(expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec") +@Outcome(expect = Expect.ACCEPTABLE_INTERESTING, 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
--- a/jcstress-test-gen/src/main/resources/accessAtomic/X-FieldAtomicityTest.java.template Mon Mar 06 17:13:41 2017 +0100 +++ b/jcstress-test-gen/src/main/resources/accessAtomic/X-FieldAtomicityTest.java.template Mon Mar 06 18:15:37 2017 +0100 @@ -38,7 +38,7 @@ #if[alwaysAtomic] @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.") #else[alwaysAtomic] -@Outcome(expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec") +@Outcome(expect = Expect.ACCEPTABLE_INTERESTING, 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
--- a/jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleArrayAtomicityTest.java.template Mon Mar 06 17:13:41 2017 +0100 +++ b/jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleArrayAtomicityTest.java.template Mon Mar 06 18:15:37 2017 +0100 @@ -41,7 +41,7 @@ #if[alwaysAtomic] @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.") #else[alwaysAtomic] -@Outcome(expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec") +@Outcome(expect = Expect.ACCEPTABLE_INTERESTING, 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
--- a/jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleByteArrayViewAtomicityTest.java.template Mon Mar 06 17:13:41 2017 +0100 +++ b/jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleByteArrayViewAtomicityTest.java.template Mon Mar 06 18:15:37 2017 +0100 @@ -43,7 +43,7 @@ #if[alwaysAtomic] @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.") #else[alwaysAtomic] -@Outcome(expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec") +@Outcome(expect = Expect.ACCEPTABLE_INTERESTING, 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
--- a/jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleDirectByteBufferViewAtomicityTest.java.template Mon Mar 06 17:13:41 2017 +0100 +++ b/jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleDirectByteBufferViewAtomicityTest.java.template Mon Mar 06 18:15:37 2017 +0100 @@ -43,7 +43,7 @@ #if[alwaysAtomic] @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.") #else[alwaysAtomic] -@Outcome(expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec") +@Outcome(expect = Expect.ACCEPTABLE_INTERESTING, 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
--- a/jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleFieldAtomicityTest.java.template Mon Mar 06 17:13:41 2017 +0100 +++ b/jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleFieldAtomicityTest.java.template Mon Mar 06 18:15:37 2017 +0100 @@ -41,7 +41,7 @@ #if[alwaysAtomic] @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.") #else[alwaysAtomic] -@Outcome(expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec") +@Outcome(expect = Expect.ACCEPTABLE_INTERESTING, 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
--- a/jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleHeapByteBufferViewAtomicityTest.java.template Mon Mar 06 17:13:41 2017 +0100 +++ b/jcstress-test-gen/src/main/resources/accessAtomic/X-VarHandleHeapByteBufferViewAtomicityTest.java.template Mon Mar 06 18:15:37 2017 +0100 @@ -43,7 +43,7 @@ #if[alwaysAtomic] @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.") #else[alwaysAtomic] -@Outcome(expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec") +@Outcome(expect = Expect.ACCEPTABLE_INTERESTING, 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
--- a/jcstress-test-gen/src/main/resources/fences/X-LoadLoadFenceTest.java.template Mon Mar 06 17:13:41 2017 +0100 +++ b/jcstress-test-gen/src/main/resources/fences/X-LoadLoadFenceTest.java.template Mon Mar 06 18:15:37 2017 +0100 @@ -38,8 +38,8 @@ #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") +@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec, when load x in actor2 before fullFence in actor1") +@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_INTERESTING, 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
--- a/jcstress-test-gen/src/main/resources/fences/X-LoadStoreFenceTest1.java.template Mon Mar 06 17:13:41 2017 +0100 +++ b/jcstress-test-gen/src/main/resources/fences/X-LoadStoreFenceTest1.java.template Mon Mar 06 18:15:37 2017 +0100 @@ -38,7 +38,7 @@ #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.") +@Outcome(id = ".*, $value0$", expect = Expect.ACCEPTABLE_INTERESTING, 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
--- a/jcstress-test-gen/src/main/resources/fences/X-LoadStoreFenceTest2.java.template Mon Mar 06 17:13:41 2017 +0100 +++ b/jcstress-test-gen/src/main/resources/fences/X-LoadStoreFenceTest2.java.template Mon Mar 06 18:15:37 2017 +0100 @@ -38,7 +38,7 @@ #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.") +@Outcome(id = ".*, $value0$", expect = Expect.ACCEPTABLE_INTERESTING, 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
--- a/jcstress-test-gen/src/main/resources/fences/X-StoreLoadFenceTest.java.template Mon Mar 06 17:13:41 2017 +0100 +++ b/jcstress-test-gen/src/main/resources/fences/X-StoreLoadFenceTest.java.template Mon Mar 06 18:15:37 2017 +0100 @@ -40,8 +40,8 @@ @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") +@Outcome(id = "$value1$, .*", expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec.") +@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_INTERESTING, 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
--- a/jcstress-test-gen/src/main/resources/fences/X-StoreStoreFenceTest1.java.template Mon Mar 06 17:13:41 2017 +0100 +++ b/jcstress-test-gen/src/main/resources/fences/X-StoreStoreFenceTest1.java.template Mon Mar 06 18:15:37 2017 +0100 @@ -39,8 +39,8 @@ #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") +@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec, when load x in actor2 before storestore Fence in actor1") +@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_INTERESTING, 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
--- a/jcstress-test-gen/src/main/resources/fences/X-StoreStoreFenceTest2.java.template Mon Mar 06 17:13:41 2017 +0100 +++ b/jcstress-test-gen/src/main/resources/fences/X-StoreStoreFenceTest2.java.template Mon Mar 06 18:15:37 2017 +0100 @@ -39,8 +39,8 @@ #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") +@Outcome(id = "$value0$, .*", expect = Expect.ACCEPTABLE_INTERESTING, desc = "Non-atomic access detected, allowed by spec, when load var in actor2 before storestore Fence in actor1") +@Outcome(id = ".*, $value1$", expect = Expect.ACCEPTABLE_INTERESTING, 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
--- a/jcstress-test-gen/src/main/resources/init/X-FieldInitTest.java.template Mon Mar 06 17:13:41 2017 +0100 +++ b/jcstress-test-gen/src/main/resources/init/X-FieldInitTest.java.template Mon Mar 06 18:15:37 2017 +0100 @@ -40,7 +40,7 @@ #if[alwaysAtomic] @Outcome(expect = Expect.FORBIDDEN, desc = "Other values are forbidden: atomicity violation.") #else[alwaysAtomic] -@Outcome(expect = Expect.ACCEPTABLE_SPEC, desc = "Non-atomic access detected, allowed by spec.") +@Outcome(expect = Expect.ACCEPTABLE_INTERESTING, 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
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/buffers/GradeChar.java Mon Mar 06 17:13:41 2017 +0100 +++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/buffers/GradeChar.java Mon Mar 06 18:15:37 2017 +0100 @@ -32,7 +32,7 @@ @Description("Tests if operations on buffers are atomic.") @Outcome(id = "97", expect = Expect.ACCEPTABLE, desc = "Seeing the complete update.") @Outcome(id = "0", expect = Expect.ACCEPTABLE, desc = "Seeing the default value, this is valid under race.") -@Outcome( expect = Expect.ACCEPTABLE_SPEC, desc = "All other cases are unexpected, but legal.") +@Outcome( expect = Expect.ACCEPTABLE_INTERESTING, desc = "All other cases are unexpected, but legal.") @Ref("http://cs.oswego.edu/pipermail/concurrency-interest/2012-December/010390.html") @Ref("http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-December/013133.html") public class GradeChar {
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/buffers/GradeDouble.java Mon Mar 06 17:13:41 2017 +0100 +++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/buffers/GradeDouble.java Mon Mar 06 18:15:37 2017 +0100 @@ -32,7 +32,7 @@ @Description("Tests if operations on buffers are atomic.") @Outcome(id = "-4616189618054758400", expect = Expect.ACCEPTABLE, desc = "Seeing the complete update.") @Outcome(id = "0", expect = Expect.ACCEPTABLE, desc = "Seeing the default value, this is valid under race.") -@Outcome( expect = Expect.ACCEPTABLE_SPEC, desc = "All other cases are unexpected, but legal.") +@Outcome( expect = Expect.ACCEPTABLE_INTERESTING, desc = "All other cases are unexpected, but legal.") @Ref("http://cs.oswego.edu/pipermail/concurrency-interest/2012-December/010390.html") @Ref("http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-December/013133.html") public class GradeDouble {
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/buffers/GradeFloat.java Mon Mar 06 17:13:41 2017 +0100 +++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/buffers/GradeFloat.java Mon Mar 06 18:15:37 2017 +0100 @@ -32,7 +32,7 @@ @Description("Tests if operations on buffers are atomic.") @Outcome(id = "-1082130432", expect = Expect.ACCEPTABLE, desc = "Seeing the complete update.") @Outcome(id = "0", expect = Expect.ACCEPTABLE, desc = "Seeing the default value, this is valid under race.") -@Outcome( expect = Expect.ACCEPTABLE_SPEC, desc = "All other cases are unexpected, but legal.") +@Outcome( expect = Expect.ACCEPTABLE_INTERESTING, desc = "All other cases are unexpected, but legal.") @Ref("http://cs.oswego.edu/pipermail/concurrency-interest/2012-December/010390.html") @Ref("http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-December/013133.html") public class GradeFloat {
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/buffers/GradeInt.java Mon Mar 06 17:13:41 2017 +0100 +++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/buffers/GradeInt.java Mon Mar 06 18:15:37 2017 +0100 @@ -32,7 +32,7 @@ @Description("Tests if operations on buffers are atomic.") @Outcome(id = "-1", expect = Expect.ACCEPTABLE, desc = "Seeing the complete update.") @Outcome(id = "0", expect = Expect.ACCEPTABLE, desc = "Seeing the default value, this is valid under race.") -@Outcome( expect = Expect.ACCEPTABLE_SPEC, desc = "All other cases are unexpected, but legal.") +@Outcome( expect = Expect.ACCEPTABLE_INTERESTING, desc = "All other cases are unexpected, but legal.") @Ref("http://cs.oswego.edu/pipermail/concurrency-interest/2012-December/010390.html") @Ref("http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-December/013133.html") public class GradeInt {
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/crosscache/ByteBufferIntAtomicityTest.java Mon Mar 06 17:13:41 2017 +0100 +++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/crosscache/ByteBufferIntAtomicityTest.java Mon Mar 06 18:15:37 2017 +0100 @@ -41,7 +41,7 @@ @Description("Tests if ByteBuffer breaks the atomicity while doing cross cache-line reads/writes.") @Outcome(id = "0, 0, 0, 0", expect = Expect.ACCEPTABLE, desc = "Seeing the default value, this is a legal race.") @Outcome(id = "-1, -1, -1, -1", expect = Expect.ACCEPTABLE, desc = "Seeing the full value, this is a legal behavior.") -@Outcome( expect = Expect.ACCEPTABLE_SPEC, desc = "Seeing the full value, this is a legal behavior.") +@Outcome( expect = Expect.ACCEPTABLE_INTERESTING, desc = "Seeing the full value, this is a legal behavior.") @Ref("http://cs.oswego.edu/pipermail/concurrency-interest/2012-December/010390.html") @Ref("http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-December/013133.html") @State
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/crosscache/DirectByteBufferIntAtomicityTest.java Mon Mar 06 17:13:41 2017 +0100 +++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/crosscache/DirectByteBufferIntAtomicityTest.java Mon Mar 06 18:15:37 2017 +0100 @@ -41,7 +41,7 @@ @Description("Tests if ByteBuffer breaks the atomicity while doing cross cache-line reads/writes.") @Outcome(id = "0, 0, 0, 0", expect = Expect.ACCEPTABLE, desc = "Seeing the default value, this is a legal race.") @Outcome(id = "-1, -1, -1, -1", expect = Expect.ACCEPTABLE, desc = "Seeing the full value, this is a legal behavior.") -@Outcome( expect = Expect.ACCEPTABLE_SPEC, desc = "Seeing the full value, this is a legal behavior.") +@Outcome( expect = Expect.ACCEPTABLE_INTERESTING, desc = "Seeing the full value, this is a legal behavior.") @Ref("http://cs.oswego.edu/pipermail/concurrency-interest/2012-December/010390.html") @Ref("http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-December/013133.html") @State
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/primitives/perbyte/DoubleAtomicityTest.java Mon Mar 06 17:13:41 2017 +0100 +++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/primitives/perbyte/DoubleAtomicityTest.java Mon Mar 06 18:15:37 2017 +0100 @@ -41,7 +41,7 @@ @JCStressTest @Outcome(id = "0, 0, 0, 0, 0, 0, 0, 0", expect = Expect.ACCEPTABLE, desc = "Default value for the field. Observers are allowed to see the default value for the field, because there is the data race between reader and writer.") @Outcome(id = "-1, -1, -1, -1, -1, -1, -1, -1", expect = Expect.ACCEPTABLE, desc = "The value set by the actor thread. Observer sees the complete update.") -@Outcome( expect = Expect.ACCEPTABLE_SPEC, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.") +@Outcome( expect = Expect.ACCEPTABLE_INTERESTING, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.") @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7") @State public class DoubleAtomicityTest {
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/primitives/perbyte/LongAtomicityTest.java Mon Mar 06 17:13:41 2017 +0100 +++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/primitives/perbyte/LongAtomicityTest.java Mon Mar 06 18:15:37 2017 +0100 @@ -41,7 +41,7 @@ @JCStressTest @Outcome(id = "0, 0, 0, 0, 0, 0, 0, 0", expect = Expect.ACCEPTABLE, desc = "Default value for the field. Observers are allowed to see the default value for the field, because there is the data race between reader and writer.") @Outcome(id = "-1, -1, -1, -1, -1, -1, -1, -1", expect = Expect.ACCEPTABLE, desc = "The value set by the actor thread. Observer sees the complete update.") -@Outcome( expect = Expect.ACCEPTABLE_SPEC, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.") +@Outcome( expect = Expect.ACCEPTABLE_INTERESTING, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.") @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7") @State public class LongAtomicityTest {
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/primitives/reflect/DoubleAtomicityTest.java Mon Mar 06 17:13:41 2017 +0100 +++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/primitives/reflect/DoubleAtomicityTest.java Mon Mar 06 18:15:37 2017 +0100 @@ -43,7 +43,7 @@ @JCStressTest @Outcome(id = "0.0", expect = Expect.ACCEPTABLE, desc = "Default value for the field. Observers are allowed to see the default value for the field, because there is the data race between reader and writer.") @Outcome(id = "NaN", expect = Expect.ACCEPTABLE, desc = "The value set by the actor thread. Observer sees the complete update.") -@Outcome( expect = Expect.ACCEPTABLE_SPEC, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.") +@Outcome( expect = Expect.ACCEPTABLE_INTERESTING, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.") @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7") @State public class DoubleAtomicityTest {
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/primitives/reflect/LongAtomicityTest.java Mon Mar 06 17:13:41 2017 +0100 +++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomicity/primitives/reflect/LongAtomicityTest.java Mon Mar 06 18:15:37 2017 +0100 @@ -43,7 +43,7 @@ @JCStressTest @Outcome(id = "0", expect = Expect.ACCEPTABLE, desc = "Default value for the field. Observers are allowed to see the default value for the field, because there is the data race between reader and writer.") @Outcome(id = "-1", expect = Expect.ACCEPTABLE, desc = "The value set by the actor thread. Observer sees the complete update.") -@Outcome( expect = Expect.ACCEPTABLE_SPEC, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.") +@Outcome( expect = Expect.ACCEPTABLE_INTERESTING, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.") @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7") @State public class LongAtomicityTest {
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/booleans/AtomicBooleanPairwiseTests.java Mon Mar 06 17:13:41 2017 +0100 +++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/booleans/AtomicBooleanPairwiseTests.java Mon Mar 06 18:15:37 2017 +0100 @@ -85,7 +85,7 @@ @JCStressTest @JCStressMeta(Meta.class) - @Outcome(id = "0, 0", expect = Expect.ACCEPTABLE_SPEC, desc = "T1 and T2 both spuriously failed") + @Outcome(id = "0, 0", expect = Expect.ACCEPTABLE_INTERESTING, desc = "T1 and T2 both spuriously failed") public static class WCAS_WCAS { @Actor public void actor1(MyState s, IntResult2 r) { r.r1 = s.weakCompareAndSet(false, true) ? 1 : 0; } @Actor public void actor2(MyState s, IntResult2 r) { r.r2 = s.weakCompareAndSet(false, true) ? 1 : 0; }
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/integer/AtomicIntegerArrayPairwiseTests.java Mon Mar 06 17:13:41 2017 +0100 +++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/integer/AtomicIntegerArrayPairwiseTests.java Mon Mar 06 18:15:37 2017 +0100 @@ -542,7 +542,7 @@ @JCStressMeta(G.class) @Outcome(id = "5, 10", expect = Expect.ACCEPTABLE, desc = "T1 -> T2 execution") @Outcome(id = "1, 20", expect = Expect.ACCEPTABLE, desc = "T2 -> T1 execution") - @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_SPEC, desc = "T1 and T2 both spuriously failed") + @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_INTERESTING, desc = "T1 and T2 both spuriously failed") public static class WCAS_WCAS { @Actor public void actor1(S s, IntResult2 r) { r.r1 = s.a.weakCompareAndSet(s.idx, 0, 5) ? 5 : 1; } @Actor public void actor2(S s, IntResult2 r) { r.r2 = s.a.weakCompareAndSet(s.idx, 0, 20) ? 20 : 10; }
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/integer/AtomicIntegerFieldUpdaterPairwiseTests.java Mon Mar 06 17:13:41 2017 +0100 +++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/integer/AtomicIntegerFieldUpdaterPairwiseTests.java Mon Mar 06 18:15:37 2017 +0100 @@ -540,7 +540,7 @@ @JCStressMeta(G.class) @Outcome(id = "5, 10", expect = Expect.ACCEPTABLE, desc = "T1 -> T2 execution") @Outcome(id = "1, 20", expect = Expect.ACCEPTABLE, desc = "T2 -> T1 execution") - @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_SPEC, desc = "T1 and T2 both spuriously failed") + @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_INTERESTING, desc = "T1 and T2 both spuriously failed") public static class WCAS_WCAS { @Actor public void actor1(S s, IntResult2 r) { r.r1 = s.u.weakCompareAndSet(s, 0, 5) ? 5 : 1; } @Actor public void actor2(S s, IntResult2 r) { r.r2 = s.u.weakCompareAndSet(s, 0, 20) ? 20 : 10; }
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/integer/AtomicIntegerPairwiseTests.java Mon Mar 06 17:13:41 2017 +0100 +++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/integer/AtomicIntegerPairwiseTests.java Mon Mar 06 18:15:37 2017 +0100 @@ -538,7 +538,7 @@ @JCStressMeta(G.class) @Outcome(id = "5, 10", expect = Expect.ACCEPTABLE, desc = "T1 -> T2 execution") @Outcome(id = "1, 20", expect = Expect.ACCEPTABLE, desc = "T2 -> T1 execution") - @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_SPEC, desc = "T1 and T2 both spuriously failed") + @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_INTERESTING, desc = "T1 and T2 both spuriously failed") public static class WCAS_WCAS { @Actor public void actor1(S s, IntResult2 r) { r.r1 = s.weakCompareAndSet(0, 5) ? 5 : 1; } @Actor public void actor2(S s, IntResult2 r) { r.r2 = s.weakCompareAndSet(0, 20) ? 20 : 10; }
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/longs/AtomicLongArrayPairwiseTests.java Mon Mar 06 17:13:41 2017 +0100 +++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/longs/AtomicLongArrayPairwiseTests.java Mon Mar 06 18:15:37 2017 +0100 @@ -542,7 +542,7 @@ @JCStressMeta(G.class) @Outcome(id = "5, 10", expect = Expect.ACCEPTABLE, desc = "T1 -> T2 execution") @Outcome(id = "1, 20", expect = Expect.ACCEPTABLE, desc = "T2 -> T1 execution") - @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_SPEC, desc = "T1 and T2 both spuriously failed") + @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_INTERESTING, desc = "T1 and T2 both spuriously failed") public static class WCAS_WCAS { @Actor public void actor1(S s, LongResult2 r) { r.r1 = s.a.weakCompareAndSet(s.idx, 0, 5) ? 5 : 1; } @Actor public void actor2(S s, LongResult2 r) { r.r2 = s.a.weakCompareAndSet(s.idx, 0, 20) ? 20 : 10; }
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/longs/AtomicLongFieldUpdaterPairwiseTests.java Mon Mar 06 17:13:41 2017 +0100 +++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/longs/AtomicLongFieldUpdaterPairwiseTests.java Mon Mar 06 18:15:37 2017 +0100 @@ -540,7 +540,7 @@ @JCStressMeta(G.class) @Outcome(id = "5, 10", expect = Expect.ACCEPTABLE, desc = "T1 -> T2 execution") @Outcome(id = "1, 20", expect = Expect.ACCEPTABLE, desc = "T2 -> T1 execution") - @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_SPEC, desc = "T1 and T2 both spuriously failed") + @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_INTERESTING, desc = "T1 and T2 both spuriously failed") public static class WCAS_WCAS { @Actor public void actor1(S s, LongResult2 r) { r.r1 = s.u.weakCompareAndSet(s, 0, 5) ? 5 : 1; } @Actor public void actor2(S s, LongResult2 r) { r.r2 = s.u.weakCompareAndSet(s, 0, 20) ? 20 : 10; }
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/longs/AtomicLongPairwiseTests.java Mon Mar 06 17:13:41 2017 +0100 +++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/atomics/longs/AtomicLongPairwiseTests.java Mon Mar 06 18:15:37 2017 +0100 @@ -539,7 +539,7 @@ @JCStressMeta(G.class) @Outcome(id = "5, 10", expect = Expect.ACCEPTABLE, desc = "T1 -> T2 execution") @Outcome(id = "1, 20", expect = Expect.ACCEPTABLE, desc = "T2 -> T1 execution") - @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_SPEC, desc = "T1 and T2 both spuriously failed") + @Outcome(id = "1, 10", expect = Expect.ACCEPTABLE_INTERESTING, desc = "T1 and T2 both spuriously failed") public static class WCAS_WCAS { @Actor public void actor1(S s, LongResult2 r) { r.r1 = s.weakCompareAndSet(0, 5) ? 5 : 1; } @Actor public void actor2(S s, LongResult2 r) { r.r2 = s.weakCompareAndSet(0, 20) ? 20 : 10; }
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/init/Grading_DoubleCanSeeMost.java Mon Mar 06 17:13:41 2017 +0100 +++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/init/Grading_DoubleCanSeeMost.java Mon Mar 06 18:15:37 2017 +0100 @@ -32,7 +32,7 @@ @Outcome(id = "0.0", expect = Expect.ACCEPTABLE, desc = "Seeing the default value for field. The update to the field in the constructor is lost. This is a legal JMM behavior") @Outcome(id = "NaN", expect = Expect.ACCEPTABLE, desc = "The value set by the actor thread. Observer sees the complete update.") @Outcome(id = "42.0", expect = Expect.ACCEPTABLE, desc = "The observer sees the empty shell. This is a legal JMM behavior, since there is a race between actor and observer.") -@Outcome( expect = Expect.ACCEPTABLE_SPEC, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.") +@Outcome( expect = Expect.ACCEPTABLE_INTERESTING, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.") @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7") public class Grading_DoubleCanSeeMost { }
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/init/Grading_DoubleShouldSeeFull.java Mon Mar 06 17:13:41 2017 +0100 +++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/init/Grading_DoubleShouldSeeFull.java Mon Mar 06 18:15:37 2017 +0100 @@ -30,7 +30,7 @@ @Outcome(id = "NaN", expect = Expect.ACCEPTABLE, desc = "The value set by the actor thread. Observer sees the complete update.") @Outcome(id = "42.0", expect = Expect.ACCEPTABLE, desc = "The observer sees the empty shell. This is a legal JMM behavior, since there is a race between actor and observer.") -@Outcome( expect = Expect.ACCEPTABLE_SPEC, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.") +@Outcome( expect = Expect.ACCEPTABLE_INTERESTING, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.") @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7") public class Grading_DoubleShouldSeeFull { }
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/init/Grading_LongCanSeeMost.java Mon Mar 06 17:13:41 2017 +0100 +++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/init/Grading_LongCanSeeMost.java Mon Mar 06 18:15:37 2017 +0100 @@ -32,7 +32,7 @@ @Outcome(id = "0", expect = Expect.ACCEPTABLE, desc = "Seeing the default value for field. The update to the field in the constructor is lost. This is a legal JMM behavior") @Outcome(id = "-1", expect = Expect.ACCEPTABLE, desc = "The value set by the actor thread. Observer sees the complete update.") @Outcome(id = "42", expect = Expect.ACCEPTABLE, desc = "The observer sees the empty shell. This is a legal JMM behavior, since there is a race between actor and observer.") -@Outcome( expect = Expect.ACCEPTABLE_SPEC, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.") +@Outcome( expect = Expect.ACCEPTABLE_INTERESTING, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.") @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7") public class Grading_LongCanSeeMost { }
--- a/tests-custom/src/main/java/org/openjdk/jcstress/tests/init/Grading_LongShouldSeeFull.java Mon Mar 06 17:13:41 2017 +0100 +++ b/tests-custom/src/main/java/org/openjdk/jcstress/tests/init/Grading_LongShouldSeeFull.java Mon Mar 06 18:15:37 2017 +0100 @@ -31,7 +31,7 @@ @Outcome(id = "-1", expect = Expect.ACCEPTABLE, desc = "The value set by the actor thread. Observer sees the complete update.") @Outcome(id = "42", expect = Expect.ACCEPTABLE, desc = "The observer sees the empty shell. This is a legal JMM behavior, since there is a race between actor and observer.") -@Outcome( expect = Expect.ACCEPTABLE_SPEC, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.") +@Outcome( expect = Expect.ACCEPTABLE_INTERESTING, desc = "Seeing the torn value. This is specifically allowed by JLS. This is not a surprising behavior on some 32-bit systems which do not have full-width 64-bit instructions.") @Ref("http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7") public class Grading_LongShouldSeeFull { }