diff --git a/pkgs/racket-test-core/tests/racket/list.rktl b/pkgs/racket-test-core/tests/racket/list.rktl index 1a7adec316..55d1ca3e41 100644 --- a/pkgs/racket-test-core/tests/racket/list.rktl +++ b/pkgs/racket-test-core/tests/racket/list.rktl @@ -336,6 +336,9 @@ (test 'a check-duplicate '(a a b)) (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)))) +(err/rt-test (check-duplicate 'a)) +(err/rt-test (check-duplicate '(1) #f)) +(err/rt-test (check-duplicate '(1) #:key #f)) ;; ---------- remove-duplicates ---------- (let () diff --git a/racket/collects/racket/list.rkt b/racket/collects/racket/list.rkt index c3745c6c00..b0ffde536b 100644 --- a/racket/collects/racket/list.rkt +++ b/racket/collects/racket/list.rkt @@ -355,6 +355,11 @@ (define (check-duplicate items [same? equal?] #: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?) (check-duplicate/t items key (make-hash))] [(eq? same? eq?) @@ -362,6 +367,11 @@ [(eq? same? eqv?) (check-duplicate/t items key (make-hasheqv))] [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?)])) (define (check-duplicate/t items key table) (let loop ([items items])