{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,1,11]],"date-time":"2026-01-11T20:32:10Z","timestamp":1768163530522,"version":"3.49.0"},"reference-count":31,"publisher":"Association for Computing Machinery (ACM)","issue":"ICFP","license":[{"start":{"date-parts":[[2017,8,29]],"date-time":"2017-08-29T00:00:00Z","timestamp":1503964800000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2017,8,29]]},"abstract":"<jats:p>Many types of interactive applications, including video games, raise particular challenges when it comes to testing and debugging. Reasons include de-facto lack of reproducibility and difficulties of automatically generating suitable test data. This paper demonstrates that certain variants of Functional Reactive Programming (FRP) implemented in pure functional languages can mitigate such difficulties by offering referential transparency at the level of whole programs. This opens up for a multi-pronged approach for assisting with testing and debugging that works across platforms, including assertions based on temporal logic, recording and replaying of runs (also from deployed code), and automated random testing using QuickCheck. The approach has been validated on real, non-trivial games implemented in the FRP system Yampa through a tool providing a convenient Graphical User Interface that allows the execution of the code under scrutiny to be controlled, moving along the execution time line, and pin-pointing of violations of assertions on PCs as well as mobile platforms.<\/jats:p>","DOI":"10.1145\/3110246","type":"journal-article","created":{"date-parts":[[2017,8,29]],"date-time":"2017-08-29T18:19:41Z","timestamp":1504030781000},"page":"1-27","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":21,"title":["Testing and debugging functional reactive programming"],"prefix":"10.1145","volume":"1","author":[{"given":"Ivan","family":"Perez","sequence":"first","affiliation":[{"name":"University of Nottingham, UK"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Henrik","family":"Nilsson","sequence":"additional","affiliation":[{"name":"University of Nottingham, UK"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"320","published-online":{"date-parts":[[2017,8,29]]},"reference":[{"key":"e_1_2_1_1_1","unstructured":"John Carmack. 1998. John Carmack Archive - .plan. http:\/\/fd.fabiensanglard.net\/doom3\/pdfs\/johnc-plan_1998.pdf . (1998).  John Carmack. 1998. John Carmack Archive - .plan. http:\/\/fd.fabiensanglard.net\/doom3\/pdfs\/johnc-plan_1998.pdf . (1998)."},{"key":"e_1_2_1_2_1","doi-asserted-by":"publisher","DOI":"10.1145\/351240.351266"},{"key":"e_1_2_1_3_1","volume-title":"Proceedings of International Conference on Advances in Infrastructure for Electronic Business, Education, Science, Medicine, and Mobile Technologies on the Internet","author":"Cornelis F.","year":"2003","unstructured":"F. Cornelis , Andy Georges , M. Christiaens , Michiel Ronsse , T. Ghesquiere , and K. De Bosschere . 2003. A taxonomy of execution replay systems . Proceedings of International Conference on Advances in Infrastructure for Electronic Business, Education, Science, Medicine, and Mobile Technologies on the Internet ( 2003 ). F. Cornelis, Andy Georges, M. Christiaens, Michiel Ronsse, T. Ghesquiere, and K. De Bosschere. 2003. A taxonomy of execution replay systems. Proceedings of International Conference on Advances in Infrastructure for Electronic Business, Education, Science, Medicine, and Mobile Technologies on the Internet (2003)."},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/871895.871897"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1145\/258948.258973"},{"key":"e_1_2_1_6_1","volume-title":"Handbook of Theoretical Computer Science (Vol. B)","author":"Emerson E. Allen","unstructured":"E. Allen Emerson . 1990. Handbook of Theoretical Computer Science (Vol. B) . MIT Press , Cambridge, MA, USA , Chapter Temporal and Modal Logic, 995\u20131072. http:\/\/dl.acm.org\/citation.cfm?id=114891.114907 E. Allen Emerson. 1990. Handbook of Theoretical Computer Science (Vol. B). MIT Press, Cambridge, MA, USA, Chapter Temporal and Modal Logic, 995\u20131072. http:\/\/dl.acm.org\/citation.cfm?id=114891.114907"},{"key":"e_1_2_1_7_1","doi-asserted-by":"publisher","DOI":"10.1109\/ASE.2001.989841"},{"key":"e_1_2_1_8_1","volume-title":"Symposium on Reliability in Distributed Software and Database Systems . 3\u201312","author":"Gray Jim","year":"1986","unstructured":"Jim Gray . 1986 . Why Do Computers Stop and What Can Be Done About It? . In Symposium on Reliability in Distributed Software and Database Systems . 3\u201312 . Jim Gray. 1986. Why Do Computers Stop and What Can Be Done About It?. In Symposium on Reliability in Distributed Software and Database Systems . 3\u201312."},{"key":"e_1_2_1_9_1","volume-title":"Game Engine Architecture","author":"Gregory Jason","unstructured":"Jason Gregory . 2014. Game Engine Architecture , Second Edition (2 nd ed.). A. K. Peters, Ltd. , Natick, MA, USA. Jason Gregory. 2014. Game Engine Architecture, Second Edition (2nd ed.). A. K. Peters, Ltd., Natick, MA, USA.","edition":"2"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1109\/ASE.2001.989799"},{"key":"e_1_2_1_11_1","volume-title":"Generalising monads to arrows. Science of computer programming 37, 1","author":"Hughes John","year":"2000","unstructured":"John Hughes . 2000a. Generalising monads to arrows. Science of computer programming 37, 1 ( 2000 ), 67\u2013111. John Hughes. 2000a. Generalising monads to arrows. Science of computer programming 37, 1 (2000), 67\u2013111."},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","DOI":"10.1016\/S0167-6423(99)00023-4"},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.1145\/1808266.1808281"},{"key":"e_1_2_1_14_1","doi-asserted-by":"publisher","DOI":"10.1145\/2103776.2103783"},{"key":"e_1_2_1_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/2603088.2603106"},{"key":"e_1_2_1_16_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.entcs.2012.08.015"},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/2428116.2428128"},{"key":"e_1_2_1_18_1","doi-asserted-by":"publisher","DOI":"10.1145\/1822348.1822363"},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.1109\/SEFM.2005.44"},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.1145\/581690.581695"},{"key":"e_1_2_1_21_1","volume-title":"Draft Proceedings of Implementation and Application of Functional Languages (IFL\u201909)","author":"Patai Gergely","year":"2009","unstructured":"Gergely Patai . 2009 . Eventless reactivity from scratch . Draft Proceedings of Implementation and Application of Functional Languages (IFL\u201909) (2009), 126\u2013140. Gergely Patai. 2009. Eventless reactivity from scratch. Draft Proceedings of Implementation and Application of Functional Languages (IFL\u201909) (2009), 126\u2013140."},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/507669.507664"},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/3122955.3122957"},{"key":"e_1_2_1_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/2976002.2976010"},{"key":"e_1_2_1_25_1","doi-asserted-by":"publisher","DOI":"10.1145\/2804302.2804316"},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.1109\/SFCS.1977.32"},{"key":"e_1_2_1_27_1","volume-title":"present and future","author":"Prior Arthur N","unstructured":"Arthur N Prior . 1967. Past , present and future . Vol. 154 . Oxford University Press . Arthur N Prior. 1967. Past, present and future. Vol. 154. Oxford University Press."},{"key":"e_1_2_1_28_1","volume-title":"Koen De Bosschere, and Jacques Chassin De Kergommeaux","author":"Ronsse Michiel","year":"2000","unstructured":"Michiel Ronsse , Koen De Bosschere, and Jacques Chassin De Kergommeaux . 2000 . Execution replay and debugging. arXiv preprint cs\/0011006 (2000). Michiel Ronsse, Koen De Bosschere, and Jacques Chassin De Kergommeaux. 2000. Execution replay and debugging. arXiv preprint cs\/0011006 (2000)."},{"key":"e_1_2_1_30_1","doi-asserted-by":"publisher","DOI":"10.1109\/IRI.2004.1431509"},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1109\/52.819971"},{"key":"e_1_2_1_32_1","unstructured":"Sergei Winitzki. 2014. Temporal Logic and Functional Reactive Programming. https:\/\/github.com\/winitzki\/talks\/tree\/master\/ frp . (2014).  Sergei Winitzki. 2014. Temporal Logic and Functional Reactive Programming. https:\/\/github.com\/winitzki\/talks\/tree\/master\/ frp . (2014)."}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3110246","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3110246","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T03:30:10Z","timestamp":1750217410000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3110246"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2017,8,29]]},"references-count":31,"journal-issue":{"issue":"ICFP","published-print":{"date-parts":[[2017,8,29]]}},"alternative-id":["10.1145\/3110246"],"URL":"https:\/\/doi.org\/10.1145\/3110246","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2017,8,29]]},"assertion":[{"value":"2017-08-29","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}