Ho scritto un modulo per macchine a stati finiti per un piccolo gioco di calcio al quale lavoro attualmente. Fornisce un'interfaccia per l'impostazione di un FSM (fondamentalmente i suoi stati e transizioni). Per ogni stato, è possibile fornire funzioni che verranno attivate all'entrata e all'uscita o mentre l'FSM rimane nello stesso stato, quindi queste funzioni restituiscono alcuni messaggi. Fornisce anche un'interfaccia reattiva (Yampa) che produce lo stato variabile nel tempo e raccoglie i messaggi che si verificano nel tempo. Il codice è qui Data/FSM.hs.Haskell: Come testare un FSM (reattivo) con quickcheck?
Sto cercando un buon approccio per testare questo modulo. Dato che è puro, ho pensato di provare Quickcheck. Non ho esperienza con quickcheck, quindi qualsiasi suggerimento sarebbe apprezzato! La mia comprensione di base finora: uno fornirebbe alcune funzioni che costruiscono gli FSM in modo più o meno casuale, e quindi eseguiranno alcune (ancora più o meno casuali) transizioni su di esse. Ma non riesco a vedere come costruire un test in questo modo ...
Beh, che tipo di test vuoi scrivere? Quali proprietà o comportamenti devono essere verificati? –
Beh, forse il problema è che non lo so davvero ... Per qualcosa di semplice come "per ogni fsm valido, qualsiasi elenco finito di transizioni porta a uno stato 'Niente' o stato 'Giusto s' dove s è uno stato in fsm ", ok. Ma cose più complicate come "per ogni fsm valido e elenco di transizioni e percezioni (variabili nel tempo), ogni raccolta di messaggi lungo il percorso di transizione dovrebbe essere presa", non saprei come formalizzarlo. Saprei come impostare i test unitari, ma con quickcheck sono un po 'perso. – martingw
Il collegamento è morto (https://patch-tag.com/r/martingw/Rasenschach/snapshot/current/content/pretty/Data/FSM.hs) e non è presente alcun archivio che possa trovare – icc97