diff --git a/collects/racket/set.rkt b/collects/racket/set.rkt index db396d8b6b..ef0c4cc844 100644 --- a/collects/racket/set.rkt +++ b/collects/racket/set.rkt @@ -1,7 +1,8 @@ #lang racket/base (require (for-syntax racket/base) racket/serialize - racket/pretty) + racket/pretty + racket/contract) (provide set seteq seteqv set? set-eq? set-eqv? set-equal? @@ -12,7 +13,8 @@ set-map set-for-each (rename-out [*in-set in-set]) for/set for/seteq for/seteqv - for*/set for*/seteq for*/seteqv) + for*/set for*/seteq for*/seteqv + set/c) (define-serializable-struct set (ht) #:omit-define-syntaxes @@ -24,9 +26,19 @@ [(integer? mode) (lambda (p port) (print p port mode))] [else write])) (define (print-prefix port) - (if (equal? 0 mode) - (write-string "(set" port) - (write-string "#, got ~v" (get-name c)))))))))) diff --git a/collects/tests/racket/contract-test.rktl b/collects/tests/racket/contract-test.rktl index fea7e49a83..4611db5c21 100644 --- a/collects/tests/racket/contract-test.rktl +++ b/collects/tests/racket/contract-test.rktl @@ -11,6 +11,7 @@ (namespace-require '(for-syntax scheme/base)) (namespace-require '(for-template scheme/base)) (namespace-require 'scheme/contract) + (namespace-require 'scheme/set) (namespace-require '(only racket/contract/private/arrow procedure-accepts-and-more?)) (namespace-require 'scheme/class) (namespace-require 'scheme/promise) @@ -9665,6 +9666,11 @@ so that propagation occurs. (test-name '(couple/dc [hd any/c] [tl ...]) (couple/dc [hd any/c] [tl (hd) any/c])) + (test-name '(set/c integer?) (set/c integer?)) + (test-name '(set/c boolean? #:cmp 'equal) (set/c boolean? #:cmp 'equal)) + (test-name '(set/c char? #:cmp 'eq) (set/c char? #:cmp 'eq)) + (test-name '(set/c (set/c char?) #:cmp 'eqv) (set/c (set/c char? #:cmp 'dont-care) #:cmp 'eqv)) + ;; NOT YET RELEASED #; (test-name '(pr/dc [x integer?] @@ -10248,6 +10254,60 @@ so that propagation occurs. 11)) 11) + +; ; +; ; +; ; ; +; ;;;; ;;;; ;;;;;; ; ;;;; +; ; ; ; ; ; ; +; ;; ; ; ; ; ; +; ;; ;;;;;; ; ; ; +; ; ; ; ; ; +; ; ; ; ; ; +; ;;;; ;;;;; ;;; ; ;;;; +; ; +; ; +; + + (test/spec-passed/result + 'set/c1 + '(contract (set/c integer?) + (set 0) + 'pos 'neg) + (contract-eval '(set 0))) + + (test/pos-blame + 'set/c2 + '(contract (set/c integer?) + (set #t) + 'pos 'neg)) + + (test/pos-blame + 'set/c3 + '(contract (set/c integer? #:cmp 'eq) + (set 0) + 'pos 'neg)) + + (test/pos-blame + 'set/c4 + '(contract (set/c integer? #:cmp 'eqv) + (set 0) + 'pos 'neg)) + + (test/pos-blame + 'set/c5 + '(contract (set/c integer? #:cmp 'equal) + (seteq 0) + 'pos 'neg)) + + (test/spec-passed/result + 'set/c6 + '(set-map (contract (set/c integer?) + (set 0) + 'pos 'neg) + values) + (list 0)) + ; ; ; diff --git a/collects/tests/racket/set.rktl b/collects/tests/racket/set.rktl index bb91761c34..bb61caa233 100644 --- a/collects/tests/racket/set.rktl +++ b/collects/tests/racket/set.rktl @@ -105,6 +105,24 @@ (void)) +(test "#" + 'print-set1 + (let ([sp (open-output-string)]) + (write (set 1) sp) + (get-output-string sp))) + +(test "#" + 'print-set1 + (let ([sp (open-output-string)]) + (write (seteq 1) sp) + (get-output-string sp))) + +(test "#" + 'print-set1 + (let ([sp (open-output-string)]) + (write (seteqv 1) sp) + (get-output-string sp))) + ;; ---------------------------------------- (test (set 1 2 3) 'for/set (for/set ([i '(0 1 2)]) (add1 i)))