Add error checking to check-duplicate.
To replace its original contract, and avoid introducing a dependecy to contracts.
This commit is contained in:
parent
4d9751e98c
commit
6b9fc4551d
|
@ -336,6 +336,9 @@
|
||||||
(test 'a check-duplicate '(a a b))
|
(test 'a check-duplicate '(a a b))
|
||||||
(test '(a 3) check-duplicate '((a 1) (b 2) (a 3)) #:key car)
|
(test '(a 3) check-duplicate '((a 1) (b 2) (a 3)) #:key car)
|
||||||
(test 4 check-duplicate '(1 2 3 4 5 6) (lambda (x y) (equal? (modulo x 3) (modulo y 3))))
|
(test 4 check-duplicate '(1 2 3 4 5 6) (lambda (x y) (equal? (modulo x 3) (modulo y 3))))
|
||||||
|
(err/rt-test (check-duplicate 'a))
|
||||||
|
(err/rt-test (check-duplicate '(1) #f))
|
||||||
|
(err/rt-test (check-duplicate '(1) #:key #f))
|
||||||
|
|
||||||
;; ---------- remove-duplicates ----------
|
;; ---------- remove-duplicates ----------
|
||||||
(let ()
|
(let ()
|
||||||
|
|
|
@ -355,6 +355,11 @@
|
||||||
(define (check-duplicate items
|
(define (check-duplicate items
|
||||||
[same? equal?]
|
[same? equal?]
|
||||||
#:key [key values])
|
#:key [key values])
|
||||||
|
(unless (list? items)
|
||||||
|
(raise-argument-error 'check-duplicate "list?" items))
|
||||||
|
(unless (and (procedure? key)
|
||||||
|
(procedure-arity-includes? key 1))
|
||||||
|
(raise-argument-error 'check-duplicate "(-> any/c any/c)" key))
|
||||||
(cond [(eq? same? equal?)
|
(cond [(eq? same? equal?)
|
||||||
(check-duplicate/t items key (make-hash))]
|
(check-duplicate/t items key (make-hash))]
|
||||||
[(eq? same? eq?)
|
[(eq? same? eq?)
|
||||||
|
@ -362,6 +367,11 @@
|
||||||
[(eq? same? eqv?)
|
[(eq? same? eqv?)
|
||||||
(check-duplicate/t items key (make-hasheqv))]
|
(check-duplicate/t items key (make-hasheqv))]
|
||||||
[else
|
[else
|
||||||
|
(unless (and (procedure? same?)
|
||||||
|
(procedure-arity-includes? same? 2))
|
||||||
|
(raise-argument-error 'check-duplicate
|
||||||
|
"(any/c any/c . -> . any/c)"
|
||||||
|
same?))
|
||||||
(check-duplicate/list items key same?)]))
|
(check-duplicate/list items key same?)]))
|
||||||
(define (check-duplicate/t items key table)
|
(define (check-duplicate/t items key table)
|
||||||
(let loop ([items items])
|
(let loop ([items items])
|
||||||
|
|
Loading…
Reference in New Issue
Block a user