Fix bugs 10101 and 10100, patch from David Van Horn.

svn: r13902
This commit is contained in:
Sam Tobin-Hochstadt 2009-03-03 01:50:09 +00:00
parent ff0b532864
commit ea156c984c
2 changed files with 25 additions and 14 deletions

View File

@ -273,14 +273,17 @@
(define char-set-diff+intersection
(case-lambda
[(cs1 cs2)
(let-values ([(cs1^cs2 cs1-cs2 cs2-cs1) (split (char-set-set cs1) (char-set-set cs2))])
(values (make-char-set cs1-cs2)
(make-char-set cs1^cs2)))]
[(cs1 cs2 . more)
(let-values ([(d i) (char-set-diff+intersection cs1 cs2)])
(values (apply char-set-difference d more)
(apply char-set-intersection i more)))]))
[(cs)
(values (char-set-difference cs)
(char-set-intersection cs (char-set-union)))]
[(cs1 cs2)
(let-values ([(cs1^cs2 cs1-cs2 cs2-cs1) (split (char-set-set cs1) (char-set-set cs2))])
(values (make-char-set cs1-cs2)
(make-char-set cs1^cs2)))]
[(cs1 cs2 . more)
(let-values ([(d i) (char-set-diff+intersection cs1 cs2)])
(values (apply char-set-difference d more)
(apply char-set-intersection i more)))]))
(define char-set-adjoin! char-set-adjoin)
(define char-set-delete! char-set-delete)
@ -432,13 +435,13 @@
[char-set-union char-sets0/c]
[char-set-union! char-sets/c]
[char-set-intersection char-sets0/c]
[char-set-intersection! char-sets/c]
[char-set-intersection! char-sets0/c]
[char-set-difference char-sets/c]
[char-set-difference! char-sets+/c]
[char-set-difference! char-sets/c]
[char-set-xor char-sets0/c]
[char-set-xor! char-sets/c]
[char-set-diff+intersection char-sets+/c]
[char-set-diff+intersection! char-sets+/c])
[char-set-diff+intersection char-sets/c]
[char-set-diff+intersection! char-sets/c])
(provide
char-set:lower-case
char-set:upper-case

View File

@ -251,8 +251,10 @@
(char-set #\v #\b)))
(test #t char-set= cs1 (char-set-diff (char-set #\U #\t #\a #\h #\v #\w)
(char-set #\v #\b)
(char-set #\w))))])
(char-set #\w)))
(test #t char-set= cs1 (char-set-diff (char-set #\U #\t #\a #\h))))])
(go char-set-difference)
(go char-set-difference!)
(go char-set-difference!))
(let ([go
@ -267,7 +269,12 @@
(let ([go
(lambda (char-set-diff+i)
(test #t andmap char-set= (list cs1 (char-set #\v))
(test #t andmap char-set= (list cs1 (char-set-union))
(call-with-values
(lambda ()
(char-set-diff+i (char-set #\U #\t #\a #\h)))
list))
(test #t andmap char-set= (list cs1 (char-set #\v))
(call-with-values
(lambda ()
(char-set-diff+i (char-set #\U #\t #\a #\h #\v)
@ -281,6 +288,7 @@
(char-set #\w)))
list)))])
(go char-set-diff+intersection)
(go char-set-diff+intersection)
(go char-set-diff+intersection!))
)