From 3e7b7a203e250280588eae8e1d5c86ea2be3105d Mon Sep 17 00:00:00 2001 From: stillya Date: Sat, 8 Nov 2025 22:04:13 +0500 Subject: [PATCH] make lincheck with intellij platform test framework reproducer --- build.gradle.kts | 1 + gradle/libs.versions.toml | 2 ++ .../PetAnimatedObservingStateLincheckTest.kt | 34 +++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 src/test/kotlin/dev/stillya/vpet/pet/PetAnimatedObservingStateLincheckTest.kt diff --git a/build.gradle.kts b/build.gradle.kts index 873c7a6..92d3dfa 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -32,6 +32,7 @@ repositories { dependencies { implementation(libs.jacksonDatabind) testImplementation(libs.junit) + testImplementation(libs.lincheck) // IntelliJ Platform Gradle Plugin Dependencies Extension - read more: https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin-dependencies-extension.html intellijPlatform { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 702c47d..3fa569b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,6 +2,7 @@ # libraries junit = "4.13.2" opentest4j = "1.3.0" +lincheck = "2.37" # plugins changelog = "2.4.0" @@ -15,6 +16,7 @@ jackson = "2.15.2" junit = { group = "junit", name = "junit", version.ref = "junit" } opentest4j = { group = "org.opentest4j", name = "opentest4j", version.ref = "opentest4j" } jacksonDatabind = { group = "com.fasterxml.jackson.core", name = "jackson-databind", version.ref = "jackson" } +lincheck = { group = "org.jetbrains.kotlinx", name = "lincheck", version.ref = "lincheck" } [plugins] changelog = { id = "org.jetbrains.changelog", version.ref = "changelog" } diff --git a/src/test/kotlin/dev/stillya/vpet/pet/PetAnimatedObservingStateLincheckTest.kt b/src/test/kotlin/dev/stillya/vpet/pet/PetAnimatedObservingStateLincheckTest.kt new file mode 100644 index 0000000..5398ca5 --- /dev/null +++ b/src/test/kotlin/dev/stillya/vpet/pet/PetAnimatedObservingStateLincheckTest.kt @@ -0,0 +1,34 @@ +package dev.stillya.vpet.pet + +import org.jetbrains.kotlinx.lincheck.annotations.Operation +import org.jetbrains.kotlinx.lincheck.check +import org.jetbrains.kotlinx.lincheck.strategy.managed.modelchecking.ModelCheckingOptions +import org.jetbrains.kotlinx.lincheck.strategy.stress.StressOptions +import org.junit.Test +import java.util.concurrent.atomic.AtomicBoolean + +class PetAnimatedObservingStateLincheckTest { + + private val isObserving = AtomicBoolean(false) + + @Operation + fun startObserving(): Boolean { + return isObserving.compareAndSet(false, true) + } + + @Operation + fun exitObserving(): Boolean { + return isObserving.compareAndSet(true, false) + } + + @Operation + fun isCurrentlyObserving(): Boolean { + return isObserving.get() + } + + @Test + fun stressTest() = StressOptions().check(this::class) + + @Test + fun modelCheckingTest() = ModelCheckingOptions().check(this::class) +}