srfi-14-check.scm 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531
  1. ; SRFI 14 test suite
  2. ;; adapted from Olin's test suite
  3. (define (vowel? c)
  4. (member c '(#\a #\e #\i #\o #\u)))
  5. (define-test-suite srfi-14-tests)
  6. (define-test-case char-set? srfi-14-tests
  7. (check (not (char-set? 5)))
  8. (check (char-set? (char-set #\a #\e #\i #\o #\u))))
  9. (define-test-case char-set= srfi-14-tests
  10. (check (char-set=))
  11. (check (char-set= (char-set)))
  12. (check (string->char-set "ioeauaiii")
  13. (=> char-set=)
  14. (char-set #\a #\e #\i #\o #\u))
  15. (check (not (char-set= (string->char-set "ioeauaiii")
  16. (char-set #\e #\i #\o #\u)))))
  17. (define-test-case char-set<= srfi-14-tests
  18. (check (char-set<=))
  19. (check (char-set<= (char-set)))
  20. (check (char-set<= (char-set #\a #\e #\i #\o #\u)
  21. (string->char-set "ioeauaiii")))
  22. (check (char-set<= (char-set #\e #\i #\o #\u)
  23. (string->char-set "ioeauaiii"))))
  24. (define-test-case char-set-hash srfi-14-tests
  25. (check-that (char-set-hash char-set:graphic 100)
  26. (all-of (is (lambda (x) (>= x 0)))
  27. (is (lambda (x) (<= x 99))))))
  28. (define-test-case char-set-fold srfi-14-tests
  29. (check (char-set-fold (lambda (c i) (+ i 1)) 0
  30. (char-set #\e #\i #\o #\u #\e #\e))
  31. => 4))
  32. ; The following test is ASCII/Latin-1 only, and fails with Unicode
  33. ; (char-set= (string->char-set "eiaou2468013579999")
  34. ; (char-set-unfold null? car cdr '(#\a #\e #\i #\o #\u #\u #\u)
  35. ; char-set:digit))
  36. (define-test-case char-set-unfold srfi-14-tests
  37. (check-that (char-set-unfold null? car cdr '(#\a #\e #\i #\o #\u)
  38. (string->char-set "0123456789"))
  39. (is char-set=
  40. (string->char-set "eiaou246801357999"))))
  41. (define-test-case char-set-unfold! srfi-14-tests
  42. (check-that (char-set-unfold! null? car cdr '(#\a #\e #\i #\o #\u)
  43. (string->char-set "0123456789"))
  44. (opposite (is char-set=
  45. (string->char-set "eiaou246801357")))))
  46. (define-test-case char-set-for-each srfi-14-tests
  47. (let ((cs (string->char-set "0123456789")))
  48. (char-set-for-each (lambda (c) (set! cs (char-set-delete cs c)))
  49. (string->char-set "02468000"))
  50. (check-that cs (is char-set= (string->char-set "97531"))))
  51. (let ((cs (string->char-set "0123456789")))
  52. (char-set-for-each (lambda (c) (set! cs (char-set-delete cs c)))
  53. (string->char-set "02468"))
  54. (check-that cs (opposite (is char-set= (string->char-set "7531"))))))
  55. (define-test-case char-set-map srfi-14-tests
  56. (check-that (char-set-map char-upcase (string->char-set "aeiou"))
  57. (is char-set=
  58. (string->char-set "IOUAEEEE")))
  59. (check-that (char-set-map char-upcase (string->char-set "aeiou"))
  60. (opposite (is char-set=
  61. (string->char-set "OUAEEEE")))))
  62. (define-test-case char-set-copy srfi-14-tests
  63. (check-that (char-set-copy (string->char-set "aeiou"))
  64. (is char-set= (string->char-set "aeiou"))))
  65. (define-test-case char-set srfi-14-tests
  66. (check-that (char-set #\x #\y) (is char-set= (string->char-set "xy")))
  67. (check-that (char-set #\x #\y #\z) (opposite (is char-set= (string->char-set "xy")))))
  68. (define-test-case list->char-set srfi-14-tests
  69. (check-that (list->char-set '(#\x #\y)) (is char-set= (string->char-set "xy")))
  70. (check-that (list->char-set '(#\x #\y)) (opposite (is char-set= (string->char-set "axy"))))
  71. (check-that (list->char-set '(#\x #\y) (string->char-set "12345"))
  72. (is char-set= (string->char-set "xy12345")))
  73. (check-that (list->char-set '(#\x #\y) (string->char-set "12345"))
  74. (opposite (is char-set= (string->char-set "y12345")))))
  75. (define-test-case list->char-set! srfi-14-tests
  76. (check-that (list->char-set! '(#\x #\y) (string->char-set "12345"))
  77. (is char-set= (string->char-set "xy12345")))
  78. (check-that (list->char-set! '(#\x #\y) (string->char-set "12345"))
  79. (opposite (is char-set= (string->char-set "y12345")))))
  80. (define-test-case char-set-filter srfi-14-tests
  81. (check-that (char-set-filter vowel? char-set:ascii (string->char-set "12345"))
  82. (is char-set= (string->char-set "aeiou12345")))
  83. (check-that (char-set-filter vowel? char-set:ascii (string->char-set "12345"))
  84. (opposite (is char-set= (string->char-set "aeou12345")))))
  85. (define-test-case char-set-filter! srfi-14-tests
  86. (check-that (char-set-filter! vowel? char-set:ascii (string->char-set "12345"))
  87. (is char-set= (string->char-set "aeiou12345")))
  88. (check-that (char-set-filter! vowel? char-set:ascii (string->char-set "12345"))
  89. (opposite (is char-set= (string->char-set "aeou12345")))))
  90. (define-test-case ucs-range->char-set srfi-14-tests
  91. (check-that (ucs-range->char-set 97 103 #t (string->char-set "12345"))
  92. (is char-set= (string->char-set "abcdef12345")))
  93. (check-that (ucs-range->char-set 97 103 #t (string->char-set "12345"))
  94. (opposite (is char-set= (string->char-set "abcef12345")))))
  95. (define-test-case ucs-range_>char-set! srfi-14-tests
  96. (check-that (ucs-range->char-set! 97 103 #t (string->char-set "12345"))
  97. (is char-set= (string->char-set "abcdef12345")))
  98. (check-that (ucs-range->char-set! 97 103 #t (string->char-set "12345"))
  99. (opposite (is char-set= (string->char-set "abcef12345")))))
  100. (define-test-case x->char-set srfi-14-tests
  101. (check-that (x->char-set #\x) (is char-set= (x->char-set "x")))
  102. (check-that (x->char-set #\x) (is char-set= (x->char-set (char-set #\x))))
  103. (check-that (x->char-set "y")
  104. (opposite (is char-set= (x->char-set #\x)))))
  105. (define-test-case char-set-size srfi-14-tests
  106. (check (char-set-size (char-set-intersection char-set:ascii char-set:digit))
  107. => 10))
  108. (define-test-case char-set-count srfi-14-tests
  109. (check (char-set-count vowel? char-set:ascii)
  110. => 5))
  111. (define-test-case char-set->list srfi-14-tests
  112. (check (char-set->list (char-set #\x)) => '(#\x))
  113. (check-that (char-set->list (char-set #\x)) (opposite (is '(#\X)))))
  114. (define-test-case char-set->string srfi-14-tests
  115. (check (char-set->string (char-set #\x)) => "x")
  116. (check-that (char-set->string (char-set #\x)) (opposite (is "X" ))))
  117. (define-test-case char-set-contains? srfi-14-tests
  118. (check (char-set-contains? (x->char-set "xyz") #\x))
  119. (check (not (char-set-contains? (x->char-set "xyz") #\a))))
  120. (define-test-case char-set-every srfi-14-tests
  121. (check (char-set-every char-lower-case? (x->char-set "abcd")))
  122. (check-that (char-set-every char-lower-case? (x->char-set "abcD")) (is-false)))
  123. (define-test-case char-set-any srfi-14-tests
  124. (check (char-set-any char-lower-case? (x->char-set "abcd")))
  125. (check-that (char-set-any char-lower-case? (x->char-set "ABCD")) (is-false)))
  126. (define-test-case cursors srfi-14-tests
  127. (check-that
  128. (let ((cs (x->char-set "abcd")))
  129. (let lp ((cur (char-set-cursor cs)) (ans '()))
  130. (if (end-of-char-set? cur) (list->char-set ans)
  131. (lp (char-set-cursor-next cs cur)
  132. (cons (char-upcase (char-set-ref cs cur)) ans)))))
  133. (is char-set=
  134. (x->char-set "ABCD"))))
  135. (define-test-case char-set-adjoin srfi-14-tests
  136. (check-that (char-set-adjoin (x->char-set "123") #\x #\a)
  137. (is char-set= (x->char-set "123xa")))
  138. (check-that (x->char-set "123x")
  139. (opposite (is char-set= (char-set-adjoin (x->char-set "123") #\x #\a)))))
  140. (define-test-case char-set-adjoin! srfi-14-tests
  141. (check-that (char-set-adjoin! (x->char-set "123") #\x #\a)
  142. (is char-set= (x->char-set "123xa")))
  143. (check-that (x->char-set "123x")
  144. (opposite (is char-set= (char-set-adjoin! (x->char-set "123") #\x #\a)))))
  145. (define-test-case char-set-delete srfi-14-tests
  146. (check-that (char-set-delete (x->char-set "123") #\2 #\a #\2)
  147. (is char-set= (x->char-set "13")))
  148. (check-that (char-set-delete (x->char-set "123") #\2 #\a #\2)
  149. (opposite (is char-set= (x->char-set "13a")))))
  150. (define-test-case char-set-delete! srfi-14-tests
  151. (check-that (char-set-delete! (x->char-set "123") #\2 #\a #\2)
  152. (is char-set= (x->char-set "13")))
  153. (check-that (char-set-delete! (x->char-set "123") #\2 #\a #\2)
  154. (opposite (is char-set= (x->char-set "13a")))))
  155. (define-test-case char-set-intersection srfi-14-tests
  156. (check-that
  157. (char-set-intersection char-set:hex-digit (char-set-complement char-set:digit))
  158. (is char-set=
  159. (x->char-set "abcdefABCDEF"))))
  160. (define-test-case char-set-intersection! srfi-14-tests
  161. (check-that
  162. (char-set-intersection! (char-set-complement! (x->char-set "0123456789"))
  163. char-set:hex-digit)
  164. (is char-set=
  165. (x->char-set "abcdefABCDEF"))))
  166. (define-test-case char-set-union srfi-14-tests
  167. (check-that
  168. (char-set-union char-set:hex-digit
  169. (x->char-set "abcdefghijkl"))
  170. (is char-set=
  171. (x->char-set "abcdefABCDEFghijkl0123456789"))))
  172. (define-test-case char-set-union! srfi-14-tests
  173. (check-that
  174. (char-set-union! (x->char-set "abcdefghijkl")
  175. char-set:hex-digit)
  176. (is char-set=
  177. (x->char-set "abcdefABCDEFghijkl0123456789"))))
  178. (define-test-case char-set-difference srfi-14-tests
  179. (check-that
  180. (char-set-difference (x->char-set "abcdefghijklmn")
  181. char-set:hex-digit)
  182. (is char-set=
  183. (x->char-set "ghijklmn"))))
  184. (define-test-case char-set-difference! srfi-14-tests
  185. (check-that
  186. (char-set-difference! (x->char-set "abcdefghijklmn")
  187. char-set:hex-digit)
  188. (is char-set=
  189. (x->char-set "ghijklmn"))))
  190. (define-test-case char-set-xor srfi-14-tests
  191. (check-that
  192. (char-set-xor (x->char-set "0123456789")
  193. char-set:hex-digit)
  194. (is char-set=
  195. (x->char-set "abcdefABCDEF"))))
  196. (define-test-case char-set-xor! srfi-14-tests char-set=
  197. (check-that (char-set-xor! (x->char-set "0123456789")
  198. char-set:hex-digit)
  199. (is char-set= (x->char-set "abcdefABCDEF"))))
  200. (define-test-case char-set-diff+intersection srfi-14-tests
  201. (call-with-values (lambda ()
  202. (char-set-diff+intersection char-set:hex-digit
  203. char-set:letter))
  204. (lambda (d i)
  205. (check-that d (is char-set= (x->char-set "0123456789")))
  206. (check-that i (is char-set= (x->char-set "abcdefABCDEF")))))
  207. (call-with-values (lambda ()
  208. (char-set-diff+intersection (char-set-union char-set:letter
  209. char-set:digit)
  210. char-set:letter))
  211. (lambda (d i)
  212. (check-that d (is char-set= char-set:digit))
  213. (check-that i (is char-set= char-set:letter)))))
  214. (define-test-case char-set-diff+intersection! srfi-14-tests
  215. (call-with-values (lambda ()
  216. (char-set-diff+intersection! (char-set-copy char-set:hex-digit)
  217. (char-set-copy char-set:letter)))
  218. (lambda (d i)
  219. (check-that d (is char-set= (x->char-set "0123456789")))
  220. (check-that i (is char-set= (x->char-set "abcdefABCDEF")))))
  221. (call-with-values (lambda ()
  222. (char-set-diff+intersection! (char-set-union char-set:letter
  223. char-set:digit)
  224. (char-set-copy char-set:letter)))
  225. (lambda (d i)
  226. (check-that d (is char-set= char-set:digit))
  227. (check-that i (is char-set= char-set:letter)))))
  228. ; The following stuff was adapted from the suite Matthew Flatt wrote
  229. ; for PLT Scheme
  230. (define-test-case char-set:lower-case srfi-14-tests
  231. (check (char-set-contains? char-set:lower-case #\a))
  232. (check (not (char-set-contains? char-set:lower-case #\A)))
  233. (check (char-set-contains? char-set:lower-case (scalar-value->char #x00E0)))
  234. (check (not (char-set-contains? char-set:lower-case (scalar-value->char #x00C2))))
  235. (check (char-set-contains? char-set:lower-case (scalar-value->char #x00B5))))
  236. (define-test-case char-set:upper-case srfi-14-tests
  237. (check (char-set-contains? char-set:upper-case #\A))
  238. (check (not (char-set-contains? char-set:upper-case #\a)))
  239. (check (char-set-contains? char-set:upper-case (scalar-value->char #x00C2)))
  240. (check (not (char-set-contains? char-set:upper-case (scalar-value->char #x00E0)))))
  241. (define-test-case char-set:title-case srfi-14-tests
  242. (check (char-set-contains? char-set:title-case (scalar-value->char #x01C5)))
  243. (check (char-set-contains? char-set:title-case (scalar-value->char #x1FA8)))
  244. (check (not (char-set-contains? char-set:title-case #\a)))
  245. (check (not (char-set-contains? char-set:title-case #\A))))
  246. (define-test-case char-set:letter srfi-14-tests
  247. (check (char-set-contains? char-set:letter #\a))
  248. (check (char-set-contains? char-set:letter #\A))
  249. (check (not (char-set-contains? char-set:letter #\1)))
  250. (check (char-set-contains? char-set:letter (scalar-value->char #x00AA)))
  251. (check (char-set-contains? char-set:letter (scalar-value->char #x00BA))))
  252. (define-test-case char-set:lower-case/2 srfi-14-tests
  253. (check (not (char-set-every (lambda (c) (char-set-contains? char-set:lower-case c)) char-set:letter)))
  254. (check (char-set-any (lambda (c) (char-set-contains? char-set:lower-case c)) char-set:letter)))
  255. (define-test-case char-set:upper-case/2 srfi-14-tests
  256. (check (not (char-set-every (lambda (c) (char-set-contains? char-set:upper-case c)) char-set:letter)))
  257. (check (char-set-any (lambda (c) (char-set-contains? char-set:upper-case c)) char-set:letter)))
  258. ;; Not true?
  259. ;; (test #t char-set<= char-set:letter (char-set-union char-set:lower-case char-set:upper-case char-set:title-case))
  260. (define-test-case char-set:digit srfi-14-tests
  261. (check (char-set-contains? char-set:digit #\1))
  262. (check (not (char-set-contains? char-set:digit #\a))))
  263. (define-test-case char-set:hex-digit srfi-14-tests
  264. (check (char-set-contains? char-set:hex-digit #\1))
  265. (check (char-set-contains? char-set:hex-digit #\a))
  266. (check (char-set-contains? char-set:hex-digit #\A))
  267. (check (not (char-set-contains? char-set:hex-digit #\g))))
  268. (define-test-case char-set:letter+digit srfi-14-tests equal?
  269. (check (char-set-contains? char-set:letter+digit #\1))
  270. (check (char-set-contains? char-set:letter+digit #\a))
  271. (check (char-set-contains? char-set:letter+digit #\z))
  272. (check (char-set-contains? char-set:letter+digit #\A))
  273. (check (char-set-contains? char-set:letter+digit #\Z)))
  274. (define-test-case char-set:letter/size srfi-14-tests
  275. (check (char-set-size char-set:letter) => 92496))
  276. (define-test-case char-set:letter/2 srfi-14-tests
  277. (check-that (char-set-union char-set:letter char-set:digit)
  278. (is char-set=
  279. char-set:letter+digit))
  280. (check (not (char-set-every (lambda (c) (char-set-contains? char-set:letter c)) char-set:letter+digit)))
  281. (check (not (char-set-every (lambda (c) (char-set-contains? char-set:digit c)) char-set:letter+digit)))
  282. (check (char-set-any (lambda (c) (char-set-contains? char-set:letter c)) char-set:letter+digit)))
  283. (define-test-case char-set:letter+digit/2 srfi-14-tests
  284. (check (char-set-every (lambda (c) (char-set-contains? char-set:letter+digit c)) char-set:letter))
  285. (check (char-set-every (lambda (c) (char-set-contains? char-set:letter+digit c)) char-set:digit)))
  286. (define char-set:latin-1 (ucs-range->char-set 0 256))
  287. (define-test-case char-set:latin-1 srfi-14-tests
  288. (check-that
  289. (char-set-intersection (char-set-union char-set:letter char-set:digit char-set:punctuation char-set:symbol)
  290. char-set:latin-1)
  291. (is char-set=
  292. (char-set-intersection char-set:graphic char-set:latin-1))))
  293. (define-test-case char-set:printing srfi-14-tests
  294. (check-that (char-set-union char-set:graphic char-set:whitespace)
  295. (is char-set= char-set:printing)))
  296. (define-test-case char-set:whitespace srfi-14-tests
  297. (check (char-set-contains? char-set:whitespace (scalar-value->char #x0009)))
  298. (check (char-set-contains? char-set:whitespace (scalar-value->char #x000D)))
  299. (check (not (char-set-contains? char-set:whitespace #\a))))
  300. (define-test-case char-set:iso-control srfi-14-tests
  301. (check-that (char-set-union (ucs-range->char-set #x0000 #x0020)
  302. (ucs-range->char-set #x007F #x00A0))
  303. (is char-set=
  304. char-set:iso-control)))
  305. (define-test-case char-set:punctuation srfi-14-tests
  306. (check (char-set-contains? char-set:punctuation #\!))
  307. (check (char-set-contains? char-set:punctuation (scalar-value->char #x00A1)))
  308. (check (not (char-set-contains? char-set:punctuation #\a))))
  309. (define-test-case char-set:symbol srfi-14-tests
  310. (check (char-set-contains? char-set:symbol #\$))
  311. (check (char-set-contains? char-set:symbol (scalar-value->char #x00A2)))
  312. (check (not (char-set-contains? char-set:symbol #\a))))
  313. (define-test-case char-set:blank srfi-14-tests
  314. (check (char-set-contains? char-set:blank #\space))
  315. (check (char-set-contains? char-set:blank (scalar-value->char #x3000)))
  316. (check (not (char-set-contains? char-set:blank #\a))))
  317. ;; General procedures ----------------------------------------
  318. (define-test-case char-set=/2 srfi-14-tests
  319. (check (char-set= char-set:letter char-set:letter char-set:letter))
  320. (check (not (char-set= char-set:letter char-set:digit)))
  321. (check (not (char-set= char-set:letter char-set:letter char-set:digit)))
  322. (check (not (char-set= char-set:letter char-set:digit char-set:letter))))
  323. (define-test-case char-set<=/2 srfi-14-tests
  324. (check (char-set<= char-set:graphic char-set:printing))
  325. (check (not (char-set<= char-set:printing char-set:graphic)))
  326. (check (char-set<= char-set:graphic char-set:printing char-set:full))
  327. (check (not (char-set<= char-set:graphic char-set:full char-set:printing))))
  328. (define-test-case char-set-hash/2 srfi-14-tests
  329. (check (char-set-hash char-set:graphic)
  330. =>
  331. (char-set-hash char-set:graphic)))
  332. ;; Iterating over character sets ----------------------------------------
  333. ;; The number 290 comes from "grep Nd UnicodeData.txt | wc -l"
  334. (define-test-case char-set-size/2 srfi-14-tests
  335. (check (char-set-size char-set:digit)
  336. => 290))
  337. (define-test-case cursors/2 srfi-14-tests
  338. (check-that (list->char-set
  339. (let loop ((c (char-set-cursor char-set:digit)) (l '()))
  340. (if (end-of-char-set? c)
  341. l
  342. (loop (char-set-cursor-next char-set:digit c)
  343. (cons (char-set-ref char-set:digit c)
  344. l)))))
  345. (is char-set= char-set:digit)))
  346. (define (add1 x) (+ 1 x))
  347. (define-test-case char-set-unfold/2 srfi-14-tests
  348. (check-that
  349. (char-set-unfold (lambda (x) (= x 20)) scalar-value->char add1 10)
  350. (is char-set= (ucs-range->char-set 10 20)))
  351. (check-that
  352. (char-set-unfold (lambda (x) (= x 20)) scalar-value->char add1 10 (char-set (scalar-value->char #x14)))
  353. (is char-set=
  354. (ucs-range->char-set 10 21))))
  355. (define-test-case char-set-unfold!/2 srfi-14-tests
  356. (check-that
  357. (char-set-unfold! (lambda (x) (= x 20)) scalar-value->char add1 10
  358. (char-set-copy char-set:empty))
  359. (is char-set= (ucs-range->char-set 10 20))))
  360. (define-test-case char-set-for-each/2 srfi-14-tests
  361. (check-that
  362. (let ((cs char-set:empty))
  363. (char-set-for-each
  364. (lambda (c)
  365. (set! cs (char-set-adjoin cs c)))
  366. char-set:digit)
  367. cs)
  368. (is char-set= char-set:digit)))
  369. (define-test-case char-set-map/2 srfi-14-tests equal?
  370. (check-that (char-set-map
  371. (lambda (c) c)
  372. char-set:digit)
  373. (is char-set= char-set:digit))
  374. (check-that (char-set-map
  375. (lambda (c) c)
  376. char-set:digit)
  377. (is char-set= char-set:digit))
  378. (check-that (char-set-union
  379. (char-set-map
  380. (lambda (c) c)
  381. char-set:digit)
  382. (char-set #\A))
  383. (is char-set= (char-set-adjoin char-set:digit #\A))))
  384. ;; Creating character sets ----------------------------------------
  385. (define-test-case char-set-copy/2 srfi-14-tests
  386. (check-that (char-set-copy char-set:digit)
  387. (is char-set= char-set:digit)))
  388. (define-test-case abc srfi-14-tests
  389. (let ((abc (char-set #\a #\b #\c)))
  390. (check-that (char-set #\c #\a #\b)
  391. (is char-set=
  392. abc))
  393. (check-that (string->char-set "cba") (is char-set= abc))
  394. (check-that (string->char-set! "cba" (char-set-copy char-set:empty)) (is char-set= abc))
  395. (check-that (string->char-set "cb" (char-set #\a)) (is char-set= abc))
  396. (check-that (char-set-filter (lambda (c) (char=? c #\b)) abc) (is char-set= (char-set #\b)))
  397. (check-that (char-set-filter (lambda (c) (char=? c #\b)) abc char-set:empty) (is char-set= (char-set #\b)))
  398. (check-that (char-set-filter! (lambda (c) (char=? c #\b)) (char-set-copy abc) (char-set-copy char-set:empty))
  399. (is char-set= (char-set #\b)))
  400. (check-that (x->char-set "abc") (is char-set= abc))
  401. (check-that (x->char-set abc) (is char-set= abc))
  402. (check-that (x->char-set #\a) (is char-set= (char-set #\a)))))
  403. (define-test-case ucs-range->char/2 srfi-14-tests
  404. (check-that
  405. (char-set-union (ucs-range->char-set 0 #xD800)
  406. (ucs-range->char-set #xE000 #x20000))
  407. (is char-set= (ucs-range->char-set 0 #x20000)))
  408. (check-that
  409. (ucs-range->char-set 0 #xD800)
  410. (is char-set= (ucs-range->char-set 0 #xD801)))
  411. (check-that
  412. (ucs-range->char-set 0 #xD800)
  413. (is char-set= (ucs-range->char-set 0 #xDFFF)))
  414. (check-that
  415. char-set:empty
  416. (is char-set= (ucs-range->char-set #xD800 #xD810)))
  417. (check-that
  418. char-set:empty
  419. (is char-set= (ucs-range->char-set #xD810 #xE000)))
  420. (check-that
  421. (ucs-range->char-set #xD810 #xE001)
  422. (is char-set= (ucs-range->char-set #xE000 #xE001)))
  423. (check-that
  424. (char-set (scalar-value->char #xD7FF) (scalar-value->char #xE000))
  425. (is char-set= (ucs-range->char-set #xD7FF #xE001))))
  426. ;; Querying character sets ------------------------------
  427. (define-test-case char-set-count/2 srfi-14-tests
  428. (check
  429. (char-set-count (lambda (x)
  430. (and (char<=? #\0 x)
  431. (char<=? x #\2)))
  432. char-set:digit)
  433. => 3))
  434. (define-test-case list->char-set/2 srfi-14-tests
  435. (check-that (list->char-set (char-set->list char-set:digit))
  436. (is char-set= char-set:digit))
  437. (check-that (list->char-set (char-set->list char-set:digit) char-set:empty)
  438. (is char-set= char-set:digit))
  439. (check-that (list->char-set! (char-set->list char-set:digit) (char-set-copy char-set:empty))
  440. (is char-set= char-set:digit))
  441. (check-that (string->char-set (char-set->string char-set:digit))
  442. (is char-set= char-set:digit)))