syndicate-2017/racket/syndicate/tests/bank-account.rkt

22 lines
796 B
Racket

#lang syndicate/test
(spawn (field [balance 0])
(assert (list "account" (balance)))
(on (message (list "deposit" $amount))
(balance (+ (balance) amount))))
(spawn (on (asserted (list "account" $balance))
(printf "Balance changed to ~a\n" balance))
(stop-when (asserted (list "account" 70))
(printf "bye\n"))
(on-stop (printf "good.\n")))
(spawn (stop-when (asserted (observe (list "deposit" _)))
(send! (list "deposit" +100))
(send! (list "deposit" -30))))
(trace (assertion-added '("account" 0))
(and (assertion-added '("account" 100))
(assertion-removed '("account" 0)))
(and (assertion-added '("account" 70))
(assertion-removed '("account" 100))))