typed-racket/typed-racket-test/succeed/exn-any-mutation.rkt

22 lines
685 B
Racket

#lang racket/base
(module untyped racket/base
(provide f)
(define (f x) x))
(module typed typed/racket
(require typed/rackunit)
(struct (X) s ([i : X]) #:mutable #:transparent)
(require/typed (submod ".." untyped)
[f (-> Any (s (U Integer String)))])
(: s1 : (s Integer))
(define s1 (s 42))
(define s2 (ann s1 Any))
(define s3 (f s2))
(check-equal? (s-i s1) 42)
(check-equal? (s-i s3) 42)
(check-exn #rx"Attempted to use a higher-order value passed as `Any`"
(λ () (set-s-i! s3 "hi")))
(check-equal? (s-i s1) 42
"if the previous test hadn't errored, this would be \"hi\" with type Integer")
)
(require 'typed)