diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b99ccadfb..11dbf8c96 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -36,7 +36,8 @@ jNoise = "b93008e35e" # JMH jmh = "1.35" - +# JCStress +jcstress = "0.8" [libraries] @@ -92,6 +93,9 @@ jNoise = { group = "com.github.Articdive.JNoise", name = "jnoise-pipeline", vers jmh-core = { group = "org.openjdk.jmh", name = "jmh-core", version.ref = "jmh" } jmh-annotationprocessor = { group = "org.openjdk.jmh", name = "jmh-generator-annprocess", version.ref = "jmh" } +# JCStress +jcstress-core = { group = "org.openjdk.jcstress", name = "jcstress-core", version.ref = "jcstress" } + [bundles] kotlin = ["kotlin-stdlib-jdk8", "kotlin-reflect"] diff --git a/jcstress-tests/build.gradle.kts b/jcstress-tests/build.gradle.kts new file mode 100644 index 000000000..3f9bb5841 --- /dev/null +++ b/jcstress-tests/build.gradle.kts @@ -0,0 +1,9 @@ +plugins { + id("io.github.reyerizo.gradle.jcstress") version "0.8.13" + id("minestom.common-conventions") +} + +dependencies { + jcstressImplementation(rootProject) + jcstress(libs.jcstress.core) +} \ No newline at end of file diff --git a/jcstress-tests/src/jcstress/java/net/minestom/server/ConstructorBasic.java b/jcstress-tests/src/jcstress/java/net/minestom/server/ConstructorBasic.java new file mode 100644 index 000000000..825d9a7b6 --- /dev/null +++ b/jcstress-tests/src/jcstress/java/net/minestom/server/ConstructorBasic.java @@ -0,0 +1,49 @@ +package net.minestom.server; + +import org.openjdk.jcstress.annotations.*; +import org.openjdk.jcstress.infra.results.I_Result; + +import static org.openjdk.jcstress.annotations.Expect.ACCEPTABLE; +import static org.openjdk.jcstress.annotations.Expect.ACCEPTABLE_INTERESTING; + +@JCStressTest +@Outcome(id = "-1", expect = ACCEPTABLE, desc = "Object has not been seen") +@Outcome(id = {"4", "5"}, expect = ACCEPTABLE_INTERESTING, desc = "Object only partially initialized") +@Outcome(id = "9", expect = ACCEPTABLE, desc = "Object fully initialized") +@State +public class ConstructorBasic { + private SimpleClass value; + + @Actor + public void actor1() { + value = new SimpleClass(); + } + + @Actor + public void actor2(I_Result r) { + SimpleClass current = this.value; + if (current != null) { + r.r1 = current.getX() + current.getY(); + } else { + r.r1 = -1; + } + } + + public static class SimpleClass { + private int x; + private int y; + + SimpleClass() { + x = 4; + y = 5; + } + + int getX() { + return x; + } + + int getY() { + return y; + } + } +} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index f8bbb8c67..491db1ddd 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -19,4 +19,5 @@ pluginManagement { rootProject.name = "Minestom" include("code-generators") include("jmh-benchmarks") +include("jcstress-tests") include("demo") \ No newline at end of file