JetBrains Research представила LitmusKt - фреймворк для тестирования конкурентных сценариев в Kotlin. Он помогает исследователям и разработчикам проверять поведение многопоточных программ и JVM-памяти.
LitmusKt основан на идее litmus tests - небольших программ, моделирующих работу нескольких потоков и проверяющих возможные результаты исполнения. Такие тесты позволяют выявить неочевидные эффекты из-за reorderings, кешей и особенностей модели памяти.
Основные возможности LitmusKt:
- Поддержка JVM и Kotlin/Native;
- Встроенные модели памяти (Java, Kotlin, C11, и др.);
- Автоматическая генерация всех возможных интерлеавингов потоков;
- Проверка ожидаемых и неожиданных исходов;
- Интеграция с Kotlin DSL для лаконичного описания тестов.
Пример теста:
litmus("StoreLoad") {
thread("T1") { x = 1; r1 = y }
thread("T2") { y = 1; r2 = x }
outcome { r1 == 0 && r2 == 0 } // недопустимо по Java Memory Model
}
Этот пример проверяет, может ли оба потока одновременно прочитать нули, что нарушает JMM.
Инструмент можно использовать для анализа оптимизаций компилятора, JVM и нового Kotlin Memory Model.
https://blog.jetbrains.com/research/2025/10/litmuskt-concurrency-testing/
✍️ @kotlin_lib
