www

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

test-unsyntax.rkt (2684B)


      1 #lang racket/base
      2 
      3 (require subtemplate/private/top-subscripts
      4          subtemplate/private/ddd-forms
      5          subtemplate/private/unsyntax-preparse
      6          subtemplate/private/template-subscripts
      7          (except-in subtemplate/private/override ?? ?@)
      8          stxparse-info/case
      9          stxparse-info/parse
     10          rackunit
     11          syntax/macro-testing
     12          phc-toolkit/untyped
     13          (only-in racket/base [... …]))
     14 
     15 (check-equal? (syntax->datum
     16                (syntax-parse #'(1 2 3)
     17                  [(x …)
     18                   (quasisubtemplate-ddd (x …))]))
     19               '(1 2 3))
     20 
     21 (check-equal? (syntax->datum
     22                (syntax-case #'(1 2 3) ()
     23                  [(x …)
     24                   (quasisubtemplate-ddd (#,(+ x 4) …))]))
     25               '(5 6 7))
     26 
     27 (check-equal? (syntax->datum
     28                (syntax-case #'(1 2 3) ()
     29                  [(x …)
     30                   (quasisubtemplate-ddd (a b c))]))
     31               '(a b c))
     32 
     33 (check-equal? (syntax->datum
     34                (syntax-case #'(1 2 3) ()
     35                  [(xᵢ …)
     36                   (quasisubtemplate-ddd (#,(cons yᵢ (+ xᵢ 4)) …))]))
     37               '([1/y . 5] [2/y . 6] [3/y . 7]))
     38 
     39 (check-equal? (syntax->datum
     40                (syntax-case #'(1 2 3) ()
     41                  [(xᵢ …)
     42                   (quasisubtemplate-ddd (#,@(list yᵢ (+ xᵢ 4)) …))]))
     43               '(1/y 5 2/y 6 3/y 7))
     44 
     45 (check-equal? (syntax->datum
     46                (syntax-case #'(1 2 3) ()
     47                  [(xᵢ …)
     48                   (quasisubtemplate-ddd (#,(?@ yᵢ (+ xᵢ 4)) …))]))
     49               '(1/y 5 2/y 6 3/y 7))
     50 
     51 (check-equal? (syntax->datum
     52                (syntax-parse #'([1 2 3] [a #:kw c])
     53                  [([xᵢ …] [{~and {~or zᵢ:id #:kw}} …])
     54                   (quasisubtemplate-ddd (#,(?? #'zᵢ (?@ #'yᵢ (+ xᵢ 4))) …))]))
     55               '(a 2/y 6 c))
     56 
     57 (check-equal? (syntax->datum
     58                (syntax-case #'([1 2 3] [4 5 6]) ()
     59                  [([x …] …)
     60                   (quasisubtemplate-ddd ((#,(- x) …) …))]))
     61               '((-1 -2 -3) (-4 -5 -6)))
     62 
     63 (check-equal? (syntax->datum
     64                (syntax-case #'([1 2 3] [4 5 6]) ()
     65                  [([x …] …)
     66                   (quasisubtemplate-ddd (([#,(- x) #,,x] …) …))]))
     67               (let ([l '((1 2 3) (4 5 6))])
     68                 `(([-1 ,l] [-2 ,l] [-3 ,l]) ([-4 ,l] [-5 ,l] [-6 ,l]))))
     69 
     70 (check-equal? (syntax->datum
     71                (syntax-case #'([1 2 3] [4 5 6]) ()
     72                  [([x …] …)
     73                   (quasisubtemplate-ddd (([#,(- x) #,,@x] …) …))]))
     74               (let ([l '((1 2 3) (4 5 6))])
     75                 `(([-1 ,@l] [-2 ,@l] [-3 ,@l]) ([-4 ,@l] [-5 ,@l] [-6 ,@l]))))