syndicate-rkt/syndicate/test/core/simple-box-and-client.rkt

30 lines
1.2 KiB
Racket

#lang syndicate/test-implementation
;; Box-and-client
(test-case
[(message-struct set-box (new-value))
(assertion-struct box-state (value))
(spawn (field [current-value 0])
(assert (box-state (current-value)))
(stop-when-true (= (current-value) 3)
(displayln "box: terminating"))
(on (message (set-box $new-value))
(printf "box: taking on new-value ~v\n" new-value)
(current-value new-value)))
(spawn (stop-when (retracted (observe (set-box _)))
(displayln "client: box has gone"))
(on (asserted (box-state $v))
(printf "client: learned that box's value is now ~v\n" v)
(send! (set-box (+ v 1)))))]
no-crashes
(expected-output (list "client: learned that box's value is now 0"
"box: taking on new-value 1"
"client: learned that box's value is now 1"
"box: taking on new-value 2"
"client: learned that box's value is now 2"
"box: taking on new-value 3"
"box: terminating"
"client: box has gone")))