www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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)