syndicate-rkt/syndicate/test/core/state-machine.rkt

31 lines
1.0 KiB
Racket

;;; SPDX-License-Identifier: LGPL-3.0-or-later
;;; SPDX-FileCopyrightText: Copyright © 2010-2021 Tony Garnock-Jones <tonyg@leastfixedpoint.com>
#lang syndicate/test-implementation
(test-case
[(message-struct toggle ())
(spawn* #:name 'flip-flop
(define (even)
(react (stop-when (message (toggle)) (odd))
(on-start (printf "+even\n"))
(on-stop (printf "-even\n"))))
(define (odd)
(react (stop-when (message (toggle)) (even))
(on-start (printf "+odd\n"))
(on-stop (printf "-odd\n"))))
(even))
(spawn* #:name 'main
(until (asserted (observe (toggle))))
(send! (toggle))
(send! (toggle))
(send! (toggle)))]
no-crashes
(expected-output (list "+even"
"-even"
"+odd"
"-odd"
"+even"
"-even"
"+odd")))