Make sequence/c first-order check more specific
closes PR 14983
This commit is contained in:
parent
ab68a4dc38
commit
30610babe3
|
@ -6,7 +6,8 @@
|
|||
(make-basic-contract-namespace
|
||||
'racket/contract
|
||||
'racket/promise
|
||||
'racket/class)])
|
||||
'racket/class
|
||||
'racket/sequence)])
|
||||
|
||||
(contract-eval '(define-contract-struct couple (hd tl)))
|
||||
|
||||
|
@ -203,4 +204,25 @@
|
|||
(ctest #t contract-first-order-passes?
|
||||
(class/c [m (-> any/c integer? integer?)])
|
||||
(class* object% ((interface () [m (-> any/c integer? integer?)]))
|
||||
(define/public (m x) x))))
|
||||
(define/public (m x) x)))
|
||||
|
||||
(ctest #t contract-first-order-passes?
|
||||
(sequence/c any/c)
|
||||
(list 1 2 3))
|
||||
(ctest #t contract-first-order-passes?
|
||||
(sequence/c any/c)
|
||||
(vector 1 2 3))
|
||||
(ctest #f contract-first-order-passes?
|
||||
(sequence/c any/c)
|
||||
(hash 'x 1 'y 2))
|
||||
(ctest #f contract-first-order-passes?
|
||||
(sequence/c any/c any/c)
|
||||
(list 1 2 3))
|
||||
(ctest #f contract-first-order-passes?
|
||||
(sequence/c any/c any/c)
|
||||
(vector 1 2 3))
|
||||
(ctest #t contract-first-order-passes?
|
||||
(sequence/c any/c any/c)
|
||||
(hash 'x 1 'y 2))
|
||||
|
||||
)
|
||||
|
|
|
@ -183,7 +183,12 @@
|
|||
(list '#:min-count min-count)
|
||||
'())
|
||||
ctcs))
|
||||
#:first-order sequence?
|
||||
#:first-order
|
||||
(λ (val)
|
||||
(and (sequence? val)
|
||||
(if (vector? val) (= n-cs 1) #t)
|
||||
(if (list? val) (= n-cs 1) #t)
|
||||
(if (hash? val) (= n-cs 2) #t)))
|
||||
#:projection
|
||||
(λ (orig-blame)
|
||||
(define blame (blame-add-context orig-blame "an element of"))
|
||||
|
|
Loading…
Reference in New Issue
Block a user