test-type.rkt (4785B)
1 #lang typed/racket 2 3 (require xlist 4 type-expander 5 typed/rackunit) 6 7 (define-type VectorNS (Vector Number String)) 8 9 (test-begin 10 "(xlist . single-type)" 11 (ann '() (xlist . Null)) 12 (ann '1 (xlist . 1)) 13 (ann '1 (xlist . Number)) 14 (ann #(1 "b") (xlist . VectorNS)) 15 (void)) 16 17 (test-begin 18 "(xlist #:rest . type)" 19 (ann '() (xlist #:rest Null)) 20 (ann '1 (xlist #:rest 1)) 21 (ann '1 (xlist #:rest Number)) 22 (ann #(1 "b") (xlist #:rest (Vector Number String))) 23 (void)) 24 25 26 (test-begin 27 "(xlist 1 2 3 4 5)" 28 (ann '() (xlist)) 29 (ann '(1) (xlist 1)) 30 (ann '(1 2) (xlist 1 2)) 31 (ann '(1 2 3) (xlist 1 2 3)) 32 (ann '(1 2 3 4) (xlist 1 2 3 4)) 33 (ann '(1 2 3 4 5) (xlist 1 2 3 4 5)) 34 (void)) 35 36 ;; Should fail: 37 ; (xlist ^ 1) 38 ; (xlist ^ 1 +) 39 ; (xlist ^ 1 *) 40 ; (xlist +) 41 ; (xlist *) 42 43 (test-begin 44 "(xlist 1 *) and (xlist 1 +) with or witout ^" 45 (ann '() (xlist 1 *)) 46 (ann '(1) (xlist 1 *)) 47 (ann '(1 1) (xlist 1 *)) 48 (ann '(1 1 1) (xlist 1 *)) 49 50 ; NOT (ann '() (xlist 1 +)) 51 (ann '(1) (xlist 1 +)) 52 (ann '(1 1) (xlist 1 +)) 53 (ann '(1 1 1) (xlist 1 +)) 54 55 (ann '() (xlist 1 ^ *)) 56 (ann '(1) (xlist 1 ^ *)) 57 (ann '(1 1) (xlist 1 ^ *)) 58 (ann '(1 1 1) (xlist 1 ^ *)) 59 60 ; NOT (ann '() (xlist 1 ^ +)) 61 (ann '(1) (xlist 1 ^ +)) 62 (ann '(1 1) (xlist 1 ^ +)) 63 (ann '(1 1 1) (xlist 1 ^ +)) 64 (void)) 65 66 67 (test-begin 68 "(xlist Number *) and (xlist Number +) with or witout ^" 69 (ann '() (xlist Number *)) 70 (ann '(1) (xlist Number *)) 71 (ann '(1 1) (xlist Number *)) 72 (ann '(1 1 1) (xlist Number *)) 73 74 ; NOT (ann '() (xlist Number +)) 75 (ann '(1) (xlist Number +)) 76 (ann '(1 1) (xlist Number +)) 77 (ann '(1 1 1) (xlist Number +)) 78 79 (ann '() (xlist Number ^ *)) 80 (ann '(1) (xlist Number ^ *)) 81 (ann '(1 1) (xlist Number ^ *)) 82 (ann '(1 1 1) (xlist Number ^ *)) 83 84 ; NOT (ann '() (xlist Number ^ +)) 85 (ann '(1) (xlist Number ^ +)) 86 (ann '(1 1) (xlist Number ^ +)) 87 (ann '(1 1 1) (xlist Number ^ +)) 88 (void)) 89 90 (test-begin 91 "(xlist Number *) and (xlist Number +) something after" 92 (ann '() (xlist Number * String *)) 93 (ann '(1) (xlist Number * String *)) 94 (ann '("b") (xlist Number * String *)) 95 (ann '(1 "b") (xlist Number * String *)) 96 (ann '(1 1 1 "b" "b") (xlist Number * String *)) 97 (ann '(1 1 1) (xlist Number * String *)) 98 (ann '("b" "b" "b") (xlist Number * String *)) 99 100 ; NOT (ann '() (xlist Number + String +)) 101 ; NOT (ann '(1) (xlist Number + String +)) 102 ; NOT (ann '("b") (xlist Number + String +)) 103 (ann '(1 "b") (xlist Number + String +)) 104 (ann '(1 1 "b") (xlist Number + String +)) 105 (ann '(1 "b" "b") (xlist Number + String +)) 106 107 (ann '() (xlist Number ^ * String ^ *)) 108 (ann '(1) (xlist Number ^ * String ^ *)) 109 (ann '("b") (xlist Number ^ * String ^ *)) 110 (ann '(1 "b") (xlist Number ^ * String ^ *)) 111 (ann '(1 1 1 "b" "b") (xlist Number ^ * String ^ *)) 112 (ann '(1 1 1) (xlist Number ^ * String ^ *)) 113 (ann '("b" "b" "b") (xlist Number ^ * String ^ *)) 114 115 ; NOT (ann '() (xlist Number ^ + String ^ +)) 116 ; NOT (ann '(1) (xlist Number ^ + String ^ +)) 117 ; NOT (ann '("b") (xlist Number ^ + String ^ +)) 118 (ann '(1 "b") (xlist Number ^ + String ^ +)) 119 (ann '(1 1 "b") (xlist Number ^ + String ^ +)) 120 (ann '(1 "b" "b") (xlist Number ^ + String ^ +)) 121 (void)) 122 123 (test-begin 124 "(xlist Number ^ x +)" 125 (ann '(1 1 1) (xlist Number +)) 126 (ann '(1 1 1) (xlist Number ^ +)) 127 (ann '(1 1 1) (xlist Number ^ 0 +)) 128 (ann '(1 1 1) (xlist Number ^ 1 +)) 129 (ann '(1 1 1) (xlist Number ^ 2 +)) 130 (ann '(1 1 1) (xlist Number ^ 3 +)) 131 (void)) 132 133 (test-begin 134 "(xlist Number ^ x)" 135 (ann '() (xlist Number ^ 0)) 136 (ann '(1) (xlist Number ^ 1)) 137 (ann '(1 1) (xlist Number ^ 2)) 138 (ann '(1 1 1) (xlist Number ^ 3)) 139 (ann '(1 1 1 1) (xlist Number ^ 4)) 140 (ann '(1 1 1 1 1) (xlist Number ^ 5)) 141 (void)) 142 143 (test-begin 144 "(xlist Number ^ x - y)" 145 (ann '() (xlist Number ^ -)) 146 (ann '(1 1 1) (xlist Number ^ -)) 147 (ann '() (xlist Number ^ 0 -)) 148 (ann '(1 1 1) (xlist Number ^ 0 -)) 149 (ann '(1 1 1) (xlist Number ^ 1 -)) 150 (ann '(1 1 1) (xlist Number ^ 2 -)) 151 (ann '(1 1 1) (xlist Number ^ 3 -)) 152 (ann '() (xlist Number ^ - ∞)) 153 (ann '(1 1 1) (xlist Number ^ - ∞)) 154 (ann '() (xlist Number ^ 0 - ∞)) 155 (ann '(1 1 1) (xlist Number ^ 0 - ∞)) 156 (ann '(1 1 1) (xlist Number ^ 1 - ∞)) 157 (ann '(1 1 1) (xlist Number ^ 2 - ∞)) 158 (ann '(1 1 1) (xlist Number ^ 3 - ∞)) 159 (ann '(1 1 1) (xlist Number ^ 0 - 5)) 160 (ann '(1 1 1) (xlist Number ^ 3 - 5)) 161 (ann '(1 1 1 1) (xlist Number ^ 0 - 5)) 162 (ann '(1 1 1 1) (xlist Number ^ 3 - 5)) 163 (ann '(1 1 1 1 1) (xlist Number ^ 0 - 5)) 164 (ann '(1 1 1 1 1) (xlist Number ^ 3 - 5)) 165 (void)) 166 167 (test-begin 168 "(xlist Number ^ x - String)" 169 (ann '("b") (xlist Number ^ - String)) 170 (ann '(1 1 1 "b") (xlist Number ^ - String)) 171 (ann '("b") (xlist Number ^ 0 - String)) 172 (ann '(1 1 1 "b") (xlist Number ^ 0 - String)) 173 (ann '(1 1 1 "b") (xlist Number ^ 1 - String)) 174 (ann '(1 1 1 "b") (xlist Number ^ 2 - String)) 175 (void))