Я написал конечный автомат для небольшой футбольной игры, в которой я сейчас работаю. Он предоставляет интерфейс для настройки FSM (в основном, его состояний и переходов). Для каждого состояния вы можете предоставить функции, которые будут запущены при входе и выходе или пока FSM останется в одном состоянии, эти функции затем возвратят некоторые сообщения. Он также обеспечивает реактивный интерфейс (Yampa), который дает изменяющееся во времени состояние и собирает сообщения, которые происходят со временем. Код находится здесь Data/FSM.hs.Haskell: Как протестировать (реактивный) FSM с помощью quickcheck?
Я ищу хороший подход для тестирования этого модуля. Поскольку он чист, я подумал о том, чтобы попробовать quickcheck. Я не знаком с быстрым чеком, поэтому любой совет будет оценен! Мое основное понимание до сих пор: можно было бы предоставить некоторые функции, которые будут создавать FSM более или менее случайным образом, а затем запускать некоторые (снова более или менее случайные) переходы на них. Но я не могу понять, как построить тест таким образом ...
Ну, какие тесты вы хотите написать? Какие свойства или поведение необходимо проверить? –
Ну, может быть, проблема в том, что я действительно не знаю ... Для чего-то простого типа «для каждого действительного fsm любой конечный список переходов приводит либо к состоянию« Nothing », либо к состоянию« Just s », где s - состояние в fsm ", ок. Но более сложные вещи, такие как «для каждого допустимого fsm и списка (изменяющихся во времени) переходов и восприятий, следует собирать каждую коллекцию сообщений по пути перехода», я не знаю, как это сделать. Я бы знал, как настроить для этого единичные тесты, но с помощью quickcheck я немного потерян. – martingw
Ссылка мертва (https://patch-tag.com/r/martingw/Rasenschach/snapshot/current/content/pretty/Data/FSM.hs), и нет архива, который я могу найти – icc97