2018-04-29 15:08:52 +00:00
|
|
|
#lang racket/base
|
|
|
|
|
|
|
|
(require racket/set)
|
|
|
|
(require "../test-implementation.rkt")
|
|
|
|
(require "../main.rkt")
|
|
|
|
(require "../pattern.rkt")
|
|
|
|
(require "../skeleton.rkt")
|
|
|
|
|
|
|
|
(test-case
|
|
|
|
[(message-struct set-box (new-value))
|
|
|
|
(assertion-struct box-state (value))
|
|
|
|
|
|
|
|
(spawn!
|
|
|
|
(current-actor)
|
|
|
|
'box
|
|
|
|
(lambda ()
|
|
|
|
(define current-value (field-handle 'current-value
|
|
|
|
(generate-id! (actor-dataspace (current-actor)))
|
|
|
|
(current-actor)
|
|
|
|
0))
|
|
|
|
(add-endpoint! (current-facet)
|
|
|
|
'stop-when-ten
|
2018-04-29 21:27:55 +00:00
|
|
|
#t
|
2018-04-29 15:08:52 +00:00
|
|
|
(lambda ()
|
|
|
|
(when (= (current-value) 3)
|
|
|
|
(stop-facet! (current-facet)
|
|
|
|
(lambda ()
|
|
|
|
(printf "box: terminating\n"))))
|
2018-04-29 21:27:55 +00:00
|
|
|
(values (void) #f)))
|
2018-04-29 15:08:52 +00:00
|
|
|
(add-endpoint! (current-facet)
|
|
|
|
'assert-box-state
|
2018-04-29 21:27:55 +00:00
|
|
|
#t
|
|
|
|
(lambda () (values (box-state (current-value)) #f)))
|
|
|
|
(add-endpoint!
|
|
|
|
(current-facet)
|
|
|
|
'on-message-set-box
|
|
|
|
#t
|
|
|
|
(lambda ()
|
|
|
|
(values (observe (set-box (capture (discard))))
|
|
|
|
(skeleton-interest (list struct:set-box #f)
|
|
|
|
'()
|
|
|
|
'()
|
2018-10-20 17:27:15 +00:00
|
|
|
'((0))
|
2018-04-29 21:27:55 +00:00
|
|
|
(capture-facet-context
|
|
|
|
(lambda (op new-value)
|
|
|
|
(when (eq? '! op)
|
|
|
|
(schedule-script!
|
|
|
|
(current-actor)
|
|
|
|
(lambda ()
|
|
|
|
(printf "box: taking on new-value ~v\n"
|
|
|
|
new-value)
|
|
|
|
(current-value new-value))))))
|
|
|
|
#f)))))
|
2018-04-29 15:08:52 +00:00
|
|
|
(set))
|
|
|
|
|
|
|
|
(spawn!
|
|
|
|
(current-actor)
|
|
|
|
'client
|
|
|
|
(lambda ()
|
2018-04-29 21:27:55 +00:00
|
|
|
(add-endpoint!
|
|
|
|
(current-facet)
|
|
|
|
'stop-when-retracted-observe-set-box
|
|
|
|
#t
|
|
|
|
(lambda ()
|
|
|
|
(values (observe (observe (set-box (discard))))
|
|
|
|
(skeleton-interest (list struct:observe (list struct:set-box #f))
|
|
|
|
'()
|
|
|
|
'()
|
|
|
|
'()
|
|
|
|
(capture-facet-context
|
|
|
|
(lambda (op)
|
|
|
|
(when (eq? '- op)
|
|
|
|
(stop-facet!
|
|
|
|
(current-facet)
|
|
|
|
(lambda ()
|
|
|
|
(printf "client: box has gone\n"))))))
|
|
|
|
#f))))
|
|
|
|
(add-endpoint!
|
|
|
|
(current-facet)
|
|
|
|
'on-asserted-box-state
|
|
|
|
#t
|
|
|
|
(lambda ()
|
|
|
|
(values (observe (box-state (capture (discard))))
|
|
|
|
(skeleton-interest (list struct:box-state #f)
|
|
|
|
'()
|
|
|
|
'()
|
2018-10-20 17:27:15 +00:00
|
|
|
'((0))
|
2018-04-29 21:27:55 +00:00
|
|
|
(capture-facet-context
|
|
|
|
(lambda (op v)
|
|
|
|
(when (eq? '+ op)
|
|
|
|
(schedule-script!
|
|
|
|
(current-actor)
|
|
|
|
(lambda ()
|
|
|
|
(printf
|
|
|
|
"client: learned that box's value is now ~v\n"
|
|
|
|
v)
|
|
|
|
(enqueue-send! (current-actor)
|
|
|
|
(set-box (+ v 1))))))))
|
|
|
|
#f)))))
|
2018-04-29 15:08:52 +00:00
|
|
|
(set))]
|
|
|
|
no-crashes
|
2018-05-06 09:55:02 +00:00
|
|
|
(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")))
|