顺序规格
为了确认算法实现了正确的顺序行为, 你可以为测试数据结构编写一个简单的顺序化实现, 用来定义算法的 顺序规格(sequential specification).
要指定需要验证的算法的顺序规格, 你需要:
实现一个所有测试方法的顺序化版本.
将带有顺序化实现的类传递给
sequentialSpecification()
选项:StressOptions().sequentialSpecification(SequentialQueue::class)
例如, 这里是一个测试, 它检查 Java 标准库的 j.u.c.ConcurrentLinkedQueue
类的正确性.
import org.jetbrains.kotlinx.lincheck.*
import org.jetbrains.kotlinx.lincheck.annotations.*
import org.jetbrains.kotlinx.lincheck.strategy.stress.*
import org.junit.*
import java.util.*
import java.util.concurrent.*
class ConcurrentLinkedQueueTest {
private val s = ConcurrentLinkedQueue<Int>()
@Operation
fun add(value: Int) = s.add(value)
@Operation
fun poll(): Int? = s.poll()
@Test
fun stressTest() = StressOptions()
.sequentialSpecification(SequentialQueue::class.java)
.check(this::class)
}
class SequentialQueue {
private val s = LinkedList<Int>()
fun add(x: Int) = s.add(x)
fun poll(): Int? = s.poll()
}
最终更新: 2024/10/17