www

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

test-split-xlist-ann.rkt (4953B)


      1 #lang typed/racket
      2 
      3 (require phc-toolkit
      4          xlist
      5          type-expander
      6          "../split-xlist.rkt")
      7 
      8 (check-equal?:
      9  (((inst f-split-list Number (Listof Symbol))
     10    (make-predicate (Listof Symbol))) (ann '(1 2 3 a b)
     11                                           (xlist Number⃰ Symbol⃰)))
     12  : (List (Listof Number)
     13          (Listof Symbol))
     14  '((1 2 3) (a b)))
     15 
     16 (check-equal?:
     17    (let ()
     18      (m-split-xlist* (ann '(1 2 3 d e f 7 8 9 . 42)
     19                           (xlist Number⃰ Symbol⃰ Number⃰ . Number))
     20                      [n1 s n2 r]
     21                      Number ^ {*}
     22                      Symbol ^ {*}
     23                      Number ^ {*}
     24                      #:rest Number)
     25      (list n1 s n2 r))
     26    : (List (Listof Number)
     27            (Listof Symbol)
     28            (Listof Number)
     29            Number)
     30    '((1 2 3) (d e f) (7 8 9) 42))
     31 
     32 (check-equal?:
     33    (let ()
     34      (m-split-xlist* (ann '(1 2 3 d e f 7 8 9) (xlist Number⃰ Symbol⃰ Number⃰))
     35                      [n1 s n2 nul]
     36                      Number ^ {*}
     37                      Symbol ^ {*}
     38                      Number ^ {*}
     39                      #:rest Null)
     40      (list n1 s n2 nul))
     41    : (List (Listof Number)
     42            (Listof Symbol)
     43            (Listof Number)
     44            Null)
     45    '((1 2 3) (d e f) (7 8 9) ()))
     46 
     47 (check-equal?:
     48    (match (ann '(1 2 3 d e f 7 8 9) (xlist Number⃰ Symbol⃰ Number⃰))
     49      [(split-xlist (list a b c d) Number⃰ Symbol⃰ Number⃰)
     50       (list d c b a)])
     51    : (List Null (Listof Number) (Listof Symbol) (Listof Number))
     52    '(() (7 8 9) (d e f) (1 2 3)))
     53 
     54 
     55 (check-equal?:
     56  (match (ann '(1 2 3 d e f 7 8 9) (xlist Number Number⃰ Symbol⃰ Number⃰))
     57    [(split-xlist (list a b c d e) Number Number⃰ Symbol⃰ Number⃰)
     58     (list e d c b a)])
     59  : (List Null (Listof Number) (Listof Symbol) (Listof Number) Number)
     60  '(() (7 8 9) (d e f) (2 3) 1))
     61 
     62 (check-equal?:
     63  (match (ann '(1 2 3 d e f 7 8 9) (xlist Number² Number⃰ Symbol⃰ Number⃰))
     64    [(split-xlist (list a b c d e) Number² Number⃰ Symbol⃰ Number⃰)
     65     (list e d c b a)])
     66  : (List Null
     67          (Listof Number)
     68          (Listof Symbol)
     69          (Listof Number)
     70          (List Number Number))
     71  '(() (7 8 9) (d e f) (3) (1 2)))
     72 
     73 (check-equal?:
     74  (match (ann '(1 2 3 d e f 7 8 9) (xlist Number²⁻³ Symbol⃰ Number⃰))
     75    [(split-xlist (list a b c d) Number²⁻³ Symbol⃰ Number⃰)
     76     (list d c b a)])
     77  : (List Null
     78          (Listof Number)
     79          (Listof Symbol)
     80          (List* Number Number (U Null (List Number))))
     81  '(() (7 8 9) (d e f) (1 2 3)))
     82 
     83 (check-equal?:
     84  (match (ann '(1 2 3 4 5 d e f 7 8 9) (xlist Number³⁻⁵ Symbol⃰ Number⃰))
     85    [(split-xlist (list a b c d) Number³⁻⁵ Symbol⃰ Number⃰)
     86     (list d c b a)])
     87  : (List Null
     88          (Listof Number)
     89          (Listof Symbol)
     90          (List* Number Number Number (U Null
     91                                         (List Number)
     92                                         (List Number Number))))
     93  '(() (7 8 9) (d e f) (1 2 3 4 5)))
     94 
     95 (check-equal?:
     96  (match (ann '(1 2 3 4 d e f 7 8 9) (xlist Number³⁻⁵ Symbol⃰ Number⃰))
     97    [(split-xlist (list a b c d) Number³⁻⁵ Symbol⃰ Number⃰)
     98     (list d c b a)])
     99  : (List Null
    100          (Listof Number)
    101          (Listof Symbol)
    102          (List* Number Number Number (U Null
    103                                         (List Number)
    104                                         (List Number Number))))
    105  '(() (7 8 9) (d e f) (1 2 3 4)))
    106 
    107 (check-equal?:
    108  (match (ann '(1 2 3 d e f 7 8 9) (xlist Number³⁻⁵ Symbol⃰ Number⃰))
    109    [(split-xlist (list a b c d) Number³⁻⁵ Symbol⃰ Number⃰)
    110     (list d c b a)])
    111  : (List Null
    112          (Listof Number)
    113          (Listof Symbol)
    114          (xlist Number³⁻⁵))
    115  '(() (7 8 9) (d e f) (1 2 3)))
    116 
    117 (check-equal?:
    118  (match (ann '(1 2 3 4 d e f g 7 8 9) (xlist Number³⁻⁵ Symbol²⁻⁶ Number⃰))
    119    [(split-xlist (list a b c d) Number³⁻⁵ Symbol²⁻⁶ Number⃰)
    120     (list d c b a)])
    121  : (List Null
    122          (Listof Number)
    123          (List* Symbol Symbol (U Null
    124                                  (List Symbol)
    125                                  (List Symbol Symbol)
    126                                  (List Symbol Symbol Symbol)
    127                                  (List Symbol Symbol Symbol Symbol)))
    128          (List* Number Number Number (U Null
    129                                         (List Number)
    130                                         (List Number Number))))
    131  '(() (7 8 9) (d e f g) (1 2 3 4)))
    132 
    133 (check-equal?: (match (ann (list 1 "flob") Any)
    134                  [(and (? (make-predicate (xlist Fixnum String)))
    135                        (split-xlist whole Fixnum String)) whole])
    136                : (List Fixnum String Null)
    137                '(1 "flob" ()))
    138 
    139 (check-equal?: (match (list 1 "flob")
    140                  [(and (? (make-predicate (xlist Fixnum String)))
    141                        (split-xlist whole Fixnum String)) whole])
    142                : (List One String Null)
    143                '(1 "flob" ()))