Escribí un módulo de máquina de estados finitos para un pequeño juego de fútbol en el que estoy trabajando actualmente. Proporciona una interfaz para configurar un FSM (básicamente sus estados y transiciones). Para cada estado, puede proporcionar funciones que se dispararán en la entrada y la salida, o mientras el FSM permanece en el mismo estado, estas funciones devuelven algunos mensajes. También proporciona una interfaz reactiva (Yampa) que produce el estado variable en el tiempo y recopila los mensajes que se producen con el tiempo. El código está aquí Data/FSM.hs.Haskell: ¿Cómo probar un FSM (reactivo) con quickcheck?
Estoy buscando un buen enfoque para probar este módulo. Como es puro, pensé en darle una oportunidad a quickcheck. No tengo experiencia con Quickcheck, ¡así que cualquier consejo sería apreciado! Mi entendimiento básico hasta ahora: uno proporcionaría algunas funciones que crean FSM de forma más o menos aleatoria y luego ejecuta algunas transiciones (de nuevo más o menos aleatorias) sobre ellas. Pero no puedo ver cómo construir una prueba de esa manera ...
Bueno, ¿qué tipo de pruebas quieres escribir? ¿Qué propiedades o comportamientos necesitan ser verificados? –
Bueno, tal vez el problema es que realmente no sé ... Para algo simple como "para cada fsm válida, cualquier lista finita de transiciones conduce a un estado 'Nada' o al estado 'Just s' donde s es un estado en fsm ", ok. Pero cosas más complicadas como "por cada fsm válida y lista de transiciones y percepciones (variables en el tiempo), cada recopilación de mensajes a lo largo de la ruta de transición debería recogerse", no sabría cómo formalizar esto. Sabría cómo configurar las pruebas unitarias para eso, pero con Quickcheck estoy un poco perdido. – martingw
El enlace está muerto (https://patch-tag.com/r/martingw/Rasenschach/snapshot/current/content/pretty/Data/FSM.hs) y no hay ningún archivo que pueda encontrar – icc97