diff --git a/collects/srfi/14/char-set.ss b/collects/srfi/14/char-set.ss index a5a373bac1..eb9663ccd0 100644 --- a/collects/srfi/14/char-set.ss +++ b/collects/srfi/14/char-set.ss @@ -244,10 +244,10 @@ [(cs . more) (fold-set char-set-delete cs more)])) - (define (char-set-complement cs) - (make-char-set - (union (complement (char-set-set cs) #x0 #xD7FF) - (complement (char-set-set cs) #xE000 #x10FFFF)))) + (define (char-set-complement cs) + (make-char-set + (difference (complement (char-set-set cs) 0 #x10FFFF) + (make-range #xD800 #xDFFF)))) (define-syntax define-set-op (syntax-rules () diff --git a/collects/tests/mzscheme/char-set.ss b/collects/tests/mzscheme/char-set.ss index 0434dbd938..87008e752d 100644 --- a/collects/tests/mzscheme/char-set.ss +++ b/collects/tests/mzscheme/char-set.ss @@ -52,7 +52,8 @@ (test #t char-set-contains? char-set:letter+digit #\A) (test #t char-set-contains? char-set:letter+digit #\Z) -(test 90547 char-set-size char-set:letter) +;; As of Unicode 4.1: +(test 91395 char-set-size char-set:letter) (test #t char-set= char-set:letter+digit (char-set-union char-set:letter char-set:digit)) ;; Slow!: @@ -108,8 +109,9 @@ ;; Iterating over character sets ---------------------------------------- -;; The number 268 comes from "grep Nd UnicodeData.txt | wc -l" -(test 268 char-set-size char-set:digit) +;; The number 270 comes from "grep Nd UnicodeData.txt | wc -l" +;; in Unicode 4.1 +(test 270 char-set-size char-set:digit) (test #t char-set= char-set:digit @@ -492,4 +494,9 @@ ;; ---------------------------------------- +;; PR 8624 --- make sure there's no error: +(test #t values (string? (char-set->string (char-set-complement char-set:graphic)))) + +;; ---------------------------------------- + (report-errs)