/pkgs/racket-test/tests/racket/contract/first-order.rkt

http://github.com/plt/racket · Racket · 261 lines · 224 code · 37 blank · 0 comment · 15 complexity · d1ebd9af4148ba9efe93c4253900bf84 MD5 · raw file

  1. #lang racket/base
  2. (require "test-util.rkt")
  3. (parameterize ([current-contract-namespace
  4. (make-basic-contract-namespace
  5. 'racket/contract
  6. 'racket/promise
  7. 'racket/class
  8. 'racket/sequence)])
  9. (contract-eval '(define-contract-struct couple (hd tl)))
  10. (ctest #t contract-first-order-passes? (flat-contract integer?) 1)
  11. (ctest #f contract-first-order-passes? (flat-contract integer?) 'x)
  12. (ctest #t contract-first-order-passes? (flat-contract boolean?) #t)
  13. (ctest #f contract-first-order-passes? (flat-contract boolean?) 'x)
  14. (ctest #t contract-first-order-passes? any/c 1)
  15. (ctest #t contract-first-order-passes? any/c #t)
  16. (ctest #t contract-first-order-passes? (-> integer? integer?) (λ (x) #t))
  17. (ctest #f contract-first-order-passes? (-> integer? integer?) (λ (x y) #t))
  18. (ctest #f contract-first-order-passes? (-> integer? integer?) 'x)
  19. (ctest #t contract-first-order-passes? (-> integer? boolean? integer?) (λ (x y) #t))
  20. (ctest #f contract-first-order-passes? (-> integer? boolean? integer?) (λ (x) #t))
  21. (ctest #f contract-first-order-passes? (-> integer? boolean? integer?) (λ (x y z) #t))
  22. (ctest #f contract-first-order-passes? (-> integer? boolean? #:x integer? integer?) (λ (x y) #t))
  23. (ctest #t contract-first-order-passes?
  24. (-> integer? boolean? #:x integer? integer?)
  25. (λ (x y #:x z) #t))
  26. (ctest #t contract-first-order-passes?
  27. (->* (integer?) () #:rest any/c (values char? any/c))
  28. (λ (x . y) #f))
  29. (ctest #f contract-first-order-passes?
  30. (->* (integer?) () #:rest any/c (values char? any/c))
  31. (λ (x y . z) #f))
  32. (ctest #f contract-first-order-passes?
  33. (->* (integer?) () #:rest any/c (values char? any/c))
  34. (λ (x) #f))
  35. (ctest #t contract-first-order-passes?
  36. (->* (integer?) () #:rest any/c (values char? any/c))
  37. (λ x #f))
  38. (ctest #t contract-first-order-passes? (->d ((z any/c)) () (result any/c)) (λ (x) x))
  39. (ctest #f contract-first-order-passes? (->d ((z any/c)) () (result any/c)) (λ (x y) x))
  40. (ctest #t contract-first-order-passes? (->i ((z any/c)) () (result any/c)) (λ (x) x))
  41. (ctest #f contract-first-order-passes? (->i ((z any/c)) () (result any/c)) (λ (x y) x))
  42. (ctest #t contract-first-order-passes? (listof integer?) (list 1))
  43. (ctest #f contract-first-order-passes? (listof integer?) #f)
  44. (ctest #f contract-first-order-passes? (list/c #f #f #t) (list))
  45. (ctest #t contract-first-order-passes? (list/c #f 'x #t) (list #f 'x #t))
  46. (ctest #f contract-first-order-passes? (list/c (-> number? number?)) (list (λ (x y) x)))
  47. (ctest #t contract-first-order-passes? (list/c (-> number? number?)) (list (λ (x) x)))
  48. (ctest #t contract-first-order-passes? (non-empty-listof integer?) (list 1))
  49. (ctest #f contract-first-order-passes? (non-empty-listof integer?) (list))
  50. (ctest #t contract-first-order-passes? (*list/c integer? boolean? char?) '(1 2 3 4 #f #\a))
  51. (ctest #t contract-first-order-passes? (*list/c integer? boolean? char?) '(#f #\a))
  52. (ctest #f contract-first-order-passes? (*list/c integer? boolean? char?) '(1 2 #f 4 #f #\a))
  53. (ctest #f contract-first-order-passes? (*list/c integer? boolean? char?) '())
  54. (ctest #f contract-first-order-passes? (*list/c integer? boolean? char?) '(#f))
  55. (ctest #f contract-first-order-passes? (*list/c integer? boolean? char?) 1)
  56. (ctest #t contract-first-order-passes?
  57. (vector-immutableof integer?)
  58. (vector->immutable-vector (vector 1)))
  59. (ctest #f contract-first-order-passes? (vector-immutableof integer?) 'x)
  60. (ctest #f contract-first-order-passes? (vector-immutableof integer?) '())
  61. (ctest #t contract-first-order-passes? (promise/c integer?) (delay 1))
  62. (ctest #f contract-first-order-passes? (promise/c integer?) 1)
  63. (ctest #t contract-first-order-passes?
  64. (and/c (-> positive? positive?) (-> integer? integer?))
  65. (λ (x) x))
  66. (ctest #t contract-first-order-passes?
  67. (and/c (-> positive? positive?) (-> integer? integer?))
  68. values)
  69. (ctest #f contract-first-order-passes? (and/c (-> integer?) (-> integer? integer?)) (λ (x) x))
  70. (ctest #t contract-first-order-passes?
  71. (cons/c boolean? (-> integer? integer?))
  72. (list* #t (λ (x) x)))
  73. (ctest #f contract-first-order-passes?
  74. (cons/c boolean? (-> integer? integer?))
  75. (list* 1 2))
  76. (ctest #f contract-first-order-passes? (flat-rec-contract the-name) 1)
  77. (ctest #t contract-first-order-passes?
  78. (couple/c any/c any/c)
  79. (make-couple 1 2))
  80. (ctest #f contract-first-order-passes?
  81. (couple/c any/c any/c)
  82. 2)
  83. (ctest #t contract-first-order-passes?
  84. (couple/dc [hd any/c] [tl any/c])
  85. (make-couple 1 2))
  86. (ctest #f contract-first-order-passes?
  87. (couple/dc [hd any/c] [tl any/c])
  88. 1)
  89. (ctest #t contract-first-order-passes?
  90. (couple/dc [hd any/c] [tl (hd) any/c])
  91. (make-couple 1 2))
  92. (ctest #f contract-first-order-passes?
  93. (couple/dc [hd any/c] [tl (hd) any/c])
  94. 1)
  95. (ctest #t contract-first-order-passes? (or/c (-> (>=/c 5) (>=/c 5)) boolean?) #t)
  96. (ctest #t contract-first-order-passes? (or/c (-> (>=/c 5) (>=/c 5)) boolean?) (λ (x) x))
  97. (ctest #f contract-first-order-passes? (or/c (-> (>=/c 5) (>=/c 5)) boolean?) 'x)
  98. (ctest #t contract-first-order-passes?
  99. (or/c (-> integer? integer? integer?)
  100. (-> integer? integer?))
  101. (λ (x) x))
  102. (ctest #t contract-first-order-passes?
  103. (or/c (-> integer? integer? integer?)
  104. (-> integer? integer?))
  105. (λ (x y) x))
  106. (ctest #f contract-first-order-passes?
  107. (or/c (-> integer? integer? integer?)
  108. (-> integer? integer?))
  109. (λ () x))
  110. (ctest #f contract-first-order-passes?
  111. (or/c (-> integer? integer? integer?)
  112. (-> integer? integer?))
  113. 1)
  114. (ctest #t contract-first-order-passes? (first-or/c (-> (>=/c 5) (>=/c 5)) boolean?) #t)
  115. (ctest #t contract-first-order-passes? (first-or/c (-> (>=/c 5) (>=/c 5)) boolean?) (λ (x) x))
  116. (ctest #f contract-first-order-passes? (first-or/c (-> (>=/c 5) (>=/c 5)) boolean?) 'x)
  117. (ctest #t contract-first-order-passes?
  118. (first-or/c (-> integer? integer? integer?)
  119. (-> integer? integer?))
  120. (λ (x) x))
  121. (ctest #t contract-first-order-passes?
  122. (first-or/c (-> integer? integer? integer?)
  123. (-> integer? integer?))
  124. (λ (x y) x))
  125. (ctest #f contract-first-order-passes?
  126. (first-or/c (-> integer? integer? integer?)
  127. (-> integer? integer?))
  128. (λ () x))
  129. (ctest #f contract-first-order-passes?
  130. (first-or/c (-> integer? integer? integer?)
  131. (-> integer? integer?))
  132. 1)
  133. (ctest #t contract-first-order-passes? (hash/c any/c any/c) (make-hash))
  134. (ctest #f contract-first-order-passes? (hash/c any/c any/c) #f)
  135. (ctest #f contract-first-order-passes? (hash/c symbol? boolean?) (let ([ht (make-hash)])
  136. (hash-set! ht 'x 1)
  137. ht))
  138. (ctest #f contract-first-order-passes? (hash/c symbol? boolean? #:flat? #t)
  139. (let ([ht (make-hash)]) (hash-set! ht 'x 1) ht))
  140. (ctest #f contract-first-order-passes? (hash/c symbol? boolean?) (let ([ht (make-hash)])
  141. (hash-set! ht 1 #f)
  142. ht))
  143. (ctest #f contract-first-order-passes? (hash/c symbol? boolean? #:flat? #t)
  144. (let ([ht (make-hash)]) (hash-set! ht 1 #f) ht))
  145. (ctest #t contract-first-order-passes? (hash/c symbol? boolean?) (let ([ht (make-hash)])
  146. (hash-set! ht 'x #t)
  147. ht))
  148. (ctest 1
  149. length
  150. (let ([f (contract (-> integer? any)
  151. (lambda (x)
  152. (with-continuation-mark 'x 'x
  153. (continuation-mark-set->list (current-continuation-marks) 'x)))
  154. 'pos
  155. 'neg)])
  156. (with-continuation-mark 'x 'x
  157. (f 1))))
  158. (ctest 2
  159. length
  160. (let ([f (contract (-> integer? list?)
  161. (lambda (x)
  162. (with-continuation-mark 'x 'x
  163. (continuation-mark-set->list (current-continuation-marks) 'x)))
  164. 'pos
  165. 'neg)])
  166. (with-continuation-mark 'x 'x
  167. (f 1))))
  168. (ctest #t contract-first-order-passes? (or/c 'x "x" #rx"x") 'x)
  169. (ctest #t contract-first-order-passes? (or/c 'x "x" #rx"x") "x")
  170. (ctest #t contract-first-order-passes? (or/c 'x "x" #rx"x.") "xy")
  171. (ctest #f contract-first-order-passes? (or/c 'x "x" #rx"x.") "yx")
  172. (ctest #f contract-first-order-passes? (or/c 'x "x" #rx"x.") 'y)
  173. (ctest #t contract-first-order-passes? (first-or/c 'x "x" #rx"x") 'x)
  174. (ctest #t contract-first-order-passes? (first-or/c 'x "x" #rx"x") "x")
  175. (ctest #t contract-first-order-passes? (first-or/c 'x "x" #rx"x.") "xy")
  176. (ctest #f contract-first-order-passes? (first-or/c 'x "x" #rx"x.") "yx")
  177. (ctest #f contract-first-order-passes? (first-or/c 'x "x" #rx"x.") 'y)
  178. (ctest #f contract-first-order-passes? (->m integer? integer?) (λ (x) 1))
  179. (ctest #t contract-first-order-passes? (->m integer? integer?) (λ (this x) 1))
  180. (ctest #f contract-first-order-passes? (class/c) 1)
  181. (ctest #f contract-first-order-passes? (class/c [m (-> any/c integer? integer?)]) object%)
  182. (ctest #t contract-first-order-passes?
  183. (class/c [m (-> any/c integer? integer?)])
  184. (class object%
  185. (define/public (m x) x)))
  186. (ctest #t contract-first-order-passes?
  187. (class/c [m (->m integer? integer?)])
  188. (class object%
  189. (define/public (m x) x)))
  190. (ctest #f contract-first-order-passes?
  191. (class/c [m (-> any/c integer? integer?)])
  192. (class object%
  193. (define/public (m x y) x)))
  194. (ctest #f contract-first-order-passes?
  195. (class/c [m (->m integer? integer?)])
  196. (class object%
  197. (define/public (m x y) x)))
  198. (ctest #f contract-first-order-passes?
  199. (class/c [m (->m integer? integer?)])
  200. (class* object% ((interface () [m (-> any/c integer? integer? any/c)]))
  201. (define/public (m x y) x)))
  202. (ctest #t contract-first-order-passes?
  203. (class/c [m (-> any/c integer? integer?)])
  204. (class* object% ((interface () [m (-> any/c integer? integer?)]))
  205. (define/public (m x) x)))
  206. (ctest #t contract-first-order-passes?
  207. (sequence/c any/c)
  208. (list 1 2 3))
  209. (ctest #t contract-first-order-passes?
  210. (sequence/c any/c)
  211. (vector 1 2 3))
  212. (ctest #f contract-first-order-passes?
  213. (sequence/c any/c)
  214. (hash 'x 1 'y 2))
  215. (ctest #f contract-first-order-passes?
  216. (sequence/c any/c any/c)
  217. (list 1 2 3))
  218. (ctest #f contract-first-order-passes?
  219. (sequence/c any/c any/c)
  220. (vector 1 2 3))
  221. (ctest #t contract-first-order-passes?
  222. (sequence/c any/c any/c)
  223. (hash 'x 1 'y 2))
  224. )