Последовательная спецификация
Чтобы убедиться, что алгоритм обеспечивает правильное последовательное поведение, вы можете определить его последовательную спецификацию, написав прямое последовательное воплощение структуры данных для тестирования.
Для обеспечения последовательной спецификации алгоритма для проверки:
Реализуйте последовательную версию всех методов тестирования.
-
Передайте класс с последовательной реализацией в опцию
sequentialSpecification():StressOptions().sequentialSpecification(SequentialQueue::class)
Например, вот тест для проверки корректности j.u.c.ConcurrentLinkedQueue из стандартной библиотеки Java.
import org.jetbrains.kotlinx.lincheck.*
import org.jetbrains.kotlinx.lincheck.annotations.*
import org.jetbrains.kotlinx.lincheck.annotations.Operation
import org.jetbrains.kotlinx.lincheck.strategy.stress.*
import org.jetbrains.kotlinx.lincheck.verifier.*
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 {
val s = LinkedList<Int>()
fun add(x: Int) = s.add(x)
fun poll(): Int? = s.poll()
}
Последнее изменение: 10 января 2023 г.
© 2010–2023 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/sequential-specification.html