test-pure-function.rkt (1324B)
1 #lang typed/racket 2 3 (require delay-pure 4 typed/rackunit 5 syntax/macro-testing) 6 7 (check-equal? (let ([y : Number 123]) 8 (define f (pure/stateless (λ ([x : Number]) (+ x y)))) 9 (set! y 0) 10 (f 1)) 11 124) 12 13 (check-exn #px"pure: set! is disallowed within pure/stateless and similar forms" 14 (λ () 15 (convert-compile-time-error 16 (let () 17 (define f (pure/stateless 18 (λ () 19 (let ([x 1]) 20 (λ () 21 (let ([y x]) 22 (set! x 0) 23 y)))))) 24 (define g (f)) 25 (list (g) (g)))))) 26 27 (check-equal? (let () 28 (define f (pure/stateful 29 (λ () 30 (let ([x 1]) 31 (λ () 32 (let ([y x]) 33 (set! x 0) 34 y)))))) 35 (define g (f)) 36 (list (g) (g))) 37 '(1 0)) 38 39 ;; I'm So Meta Even This Acronym 40 (check-equal? (let ([x 1]) 41 (pure/stateless (pure/stateless x))) 42 1)