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