Spec-Zone.ru › Kotlin 1.9

Последовательная спецификация

Чтобы убедиться, что алгоритм обеспечивает правильное последовательное поведение, вы можете определить его последовательную спецификацию, написав простую последовательную реализацию структуры данных для тестирования.

Эта функция также позволяет написать один тест вместо двух отдельных последовательного и одновременного тестов.

Для предоставления последовательной спецификации алгоритма для проверки:

  1. Реализуйте последовательную версию всех методов тестирования.

  2. Передайте класс с последовательной реализацией в параметр 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.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()
}

Получите полный код примеров.

Последнее изменение: 25 июля 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API