-;;; Some test dummy values
-;;; ======================
-
-(define %fake-hive-id "the-main-hive")
-;; Some fake ids for actors
-(define %fake-emo-id (make-address "emo" %fake-hive-id))
-(define %fake-proog-id (make-address "proog" %fake-hive-id))
-(define %fake-hive-actor-id (make-address "hive" %fake-hive-id))
-
-(define test-message
- (make-message ((simple-message-id-generator))
- %fake-emo-id
- %fake-hive-actor-id ; Bootstrap messages come from the hive
- 'greet-proog `((target . ,%fake-proog-id))))
-
-;;; Actor utilities
-;;; ===============
-
-;;; Message tests
-;;; =============
-
-(let ((monkey-message
- (make-message 'id 'to 'from 'action
- '((monkey . banana)))))
- ;; A key we have
- (test-equal (message-ref monkey-message 'monkey)
- 'banana)
-
- ;; A key we don't have
- (let ((caught-error #f))
- (catch 'message-missing-key
- (lambda ()
- (message-ref monkey-message 'coo-coo))
- (lambda (. args)
- (set! caught-error #t)))
- (test-assert caught-error))
-
- ;; A key we don't have, with a default set
- (test-equal (message-ref monkey-message 'coo-coo 'danger-danger)
- 'danger-danger))
+(define-actor <Responder> (<actor>)
+ ((ping-pong
+ (lambda (actor message ping-val)
+ ;; Returns two values to its continuation: its ping-val, and the
+ ;; value of its own response-val slot.
+ (values (.response-val actor) ping-val))))
+ (response-val #:init-keyword #:response-val
+ #:accessor .response-val))