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))