fix contract on impersonate-async-channel

This commit is contained in:
Cameron Moy 2020-11-21 03:48:41 -05:00 committed by Matthew Flatt
parent 5e9caea86c
commit a7038173aa
2 changed files with 35 additions and 2 deletions

View File

@ -89,5 +89,38 @@
(check-limited 1)
(check-limited 3)
(report-errs)
;; async channel chaperone and impersonator
(let ()
(define (record ch c-or-i go)
(define trace '())
(define (add-to-trace ele) (set! trace (cons ele trace)))
(go (c-or-i ch
(λ (ele) (add-to-trace (list 'get ele)) ele)
(λ (ele) (add-to-trace (list 'put ele)) ele)))
(reverse trace))
(define (test-chaperone/impersonator c-or-i)
(test '((put 1) (put 2) (get 1) (get 2))
record
(make-async-channel)
c-or-i
(λ (ch)
(async-channel-put ch 1)
(async-channel-put ch 2)
(async-channel-get ch)
(async-channel-get ch)))
(test '((put 1) (get 1) (put 2) (get 2))
record
(make-async-channel)
c-or-i
(λ (ch)
(async-channel-put ch 1)
(async-channel-get ch)
(async-channel-put ch 2)
(async-channel-get ch))))
(test-chaperone/impersonator chaperone-async-channel)
(test-chaperone/impersonator impersonate-async-channel))
(report-errs)

View File

@ -273,7 +273,7 @@
(any/c . -> . any/c)
(any/c . -> . any/c))
#:rest (listof any/c)
. ->* . (and/c chaperone? async-channel?)))
. ->* . (and/c impersonator? async-channel?)))
(chaperone-async-channel ((async-channel?
(any/c . -> . any/c)
(any/c . -> . any/c))