www

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

test-maybe-empty.rkt (1706B)


      1 #lang racket
      2 
      3 (require extensible-parser-specifications
      4          racket/require
      5          syntax/parse
      6          (subtract-in syntax/stx phc-toolkit/untyped)
      7          rackunit
      8          racket/format
      9          phc-toolkit/untyped
     10          (for-syntax syntax/parse
     11                      syntax/stx
     12                      racket/format))
     13 
     14 (check-equal? (syntax-parse #'()
     15                 [{~no-order (~maybe/empty {~seq τᵢ ... {~lift-rest τ-rest}})}
     16                  (syntax->datum #'(#:rest τ-rest #:τᵢ τᵢ …))])
     17               '(#:rest () #:τᵢ))
     18 
     19 (check-equal? (syntax-parse #'a
     20                  [{~no-order (~maybe/empty {~seq τᵢ ... {~lift-rest τ-rest}})}
     21                   (syntax->datum #'(#:rest τ-rest #:τᵢ τᵢ …))])
     22               '(#:rest a #:τᵢ))
     23 
     24 (check-equal? (syntax-parse #'(a)
     25                  [{~no-order (~maybe/empty {~seq τᵢ ... {~lift-rest τ-rest}})}
     26                   (syntax->datum #'(#:rest τ-rest #:τᵢ τᵢ …))])
     27               '(#:rest () #:τᵢ a))
     28 
     29 (check-equal? (syntax-parse #'(a . b)
     30                  [{~no-order (~maybe/empty {~seq τᵢ ... {~lift-rest τ-rest}})}
     31                   (syntax->datum #'(#:rest τ-rest #:τᵢ τᵢ …))])
     32               '(#:rest b #:τᵢ a))
     33 
     34 (check-equal? (syntax-parse #'(a b)
     35                  [{~no-order (~maybe/empty {~seq τᵢ ... {~lift-rest τ-rest}})}
     36                   (syntax->datum #'(#:rest τ-rest #:τᵢ τᵢ …))])
     37               '(#:rest () #:τᵢ a b))
     38 
     39 (check-equal? (syntax-parse #'(a b . c)
     40                  [{~no-order (~maybe/empty {~seq τᵢ ... {~lift-rest τ-rest}})}
     41                   (syntax->datum #'(#:rest τ-rest #:τᵢ τᵢ …))])
     42               '(#:rest c #:τᵢ a b))