Artifact 3923f8c24f17920475fe58ef6e328f21324fcbd9:
- File
tests/utf8.test
-
2011-10-09 22:19:01
- part of checkin
[8ac629b4bb]
on branch trunk
- Simplify the way unicode case mapping is done
Smaller, faster and includes title-case characters.
Signed-off-by: Steve Bennett <steveb@workware.net.au> (user: steveb@workware.net.au
-
2011-10-09 22:19:01
- part of checkin
[8ac629b4bb]
on branch trunk
- Simplify the way unicode case mapping is done
0000: 73 6f 75 72 63 65 20 5b 66 69 6c 65 20 64 69 72 source [file dir
0010: 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 name [info scrip
0020: 74 5d 5d 2f 74 65 73 74 69 6e 67 2e 74 63 6c 0a t]]/testing.tcl.
0030: 0a 6e 65 65 64 73 20 63 6f 6e 73 74 72 61 69 6e .needs constrain
0040: 74 20 75 74 66 38 0a 0a 74 65 73 74 20 75 74 66 t utf8..test utf
0050: 38 2d 31 2e 31 20 22 50 61 74 74 65 72 6e 20 6d 8-1.1 "Pattern m
0060: 61 74 63 68 69 6e 67 20 2d 20 3f 22 20 7b 0a 09 atching - ?" {..
0070: 73 74 72 69 6e 67 20 6d 61 74 63 68 20 22 61 62 string match "ab
0080: 63 3f 64 65 66 22 20 22 61 62 63 5c 75 30 30 62 c?def" "abc\u00b
0090: 35 64 65 66 22 0a 7d 20 31 0a 0a 74 65 73 74 20 5def".} 1..test
00a0: 75 74 66 38 2d 31 2e 32 20 22 50 61 74 74 65 72 utf8-1.2 "Patter
00b0: 6e 20 6d 61 74 63 68 69 6e 67 20 2d 20 3f 22 20 n matching - ?"
00c0: 7b 0a 09 73 74 72 69 6e 67 20 6d 61 74 63 68 20 {..string match
00d0: 22 61 62 63 3f 64 65 66 22 20 22 61 62 63 5c 75 "abc?def" "abc\u
00e0: 32 37 30 34 64 65 66 22 0a 7d 20 31 0a 0a 74 65 2704def".} 1..te
00f0: 73 74 20 75 74 66 38 2d 31 2e 33 20 22 50 61 74 st utf8-1.3 "Pat
0100: 74 65 72 6e 20 75 74 66 2d 38 20 6c 69 74 65 72 tern utf-8 liter
0110: 61 6c 22 20 7b 0a 09 73 74 72 69 6e 67 20 6d 61 al" {..string ma
0120: 74 63 68 20 22 61 62 5c 75 30 30 62 35 5c 75 32 tch "ab\u00b5\u2
0130: 37 30 34 3f 22 20 22 61 62 5c 75 30 30 62 35 5c 704?" "ab\u00b5\
0140: 75 32 37 30 34 78 22 20 0a 7d 20 31 0a 0a 74 65 u2704x" .} 1..te
0150: 73 74 20 75 74 66 38 2d 31 2e 34 20 22 50 61 74 st utf8-1.4 "Pat
0160: 74 65 72 6e 20 75 74 66 2d 38 20 63 68 61 72 20 tern utf-8 char
0170: 73 65 74 73 22 20 7b 0a 09 73 74 72 69 6e 67 20 sets" {..string
0180: 6d 61 74 63 68 20 22 61 5c 5b 62 5c 75 30 30 62 match "a\[b\u00b
0190: 35 5c 5d 5c 75 32 37 30 34 3f 22 20 22 61 5c 75 5\]\u2704?" "a\u
01a0: 30 30 62 35 5c 75 32 37 30 34 78 22 20 0a 7d 20 00b5\u2704x" .}
01b0: 31 0a 0a 74 65 73 74 20 75 74 66 38 2d 31 2e 35 1..test utf8-1.5
01c0: 20 22 50 61 74 74 65 72 6e 20 75 74 66 2d 38 20 "Pattern utf-8
01d0: 63 68 61 72 20 73 65 74 73 22 20 7b 0a 09 73 74 char sets" {..st
01e0: 72 69 6e 67 20 6d 61 74 63 68 20 22 61 5c 5b 62 ring match "a\[b
01f0: 5c 75 30 30 62 35 5c 5d 5c 75 32 37 30 34 3f 22 \u00b5\]\u2704?"
0200: 20 22 61 5c 75 30 30 62 36 5c 75 32 37 30 34 78 "a\u00b6\u2704x
0210: 22 20 0a 7d 20 30 0a 74 65 73 74 20 75 74 66 38 " .} 0.test utf8
0220: 2d 31 2e 36 20 22 50 61 74 74 65 72 6e 20 75 74 -1.6 "Pattern ut
0230: 66 2d 38 20 63 68 61 72 20 73 65 74 73 22 20 7b f-8 char sets" {
0240: 0a 09 73 74 72 69 6e 67 20 6d 61 74 63 68 20 22 ..string match "
0250: 61 5c 5b 62 5c 75 30 30 62 35 5c 5d 5c 75 32 37 a\[b\u00b5\]\u27
0260: 30 34 3f 22 20 22 61 62 5c 75 32 37 30 34 78 22 04?" "ab\u2704x"
0270: 20 0a 7d 20 31 0a 74 65 73 74 20 75 74 66 38 2d .} 1.test utf8-
0280: 31 2e 37 20 22 50 61 74 74 65 72 6e 20 75 74 66 1.7 "Pattern utf
0290: 2d 38 20 63 68 61 72 20 73 65 74 73 22 20 7b 0a -8 char sets" {.
02a0: 09 73 74 72 69 6e 67 20 6d 61 74 63 68 20 22 61 .string match "a
02b0: 5c 5b 62 5c 75 30 30 62 35 5c 5d 3f 22 20 22 61 \[b\u00b5\]?" "a
02c0: 5c 75 32 37 30 34 78 22 0a 7d 20 30 0a 74 65 73 \u2704x".} 0.tes
02d0: 74 20 75 74 66 38 2d 31 2e 38 20 22 50 61 74 74 t utf8-1.8 "Patt
02e0: 65 72 6e 20 75 74 66 2d 38 20 63 68 61 72 20 73 ern utf-8 char s
02f0: 65 74 73 22 20 7b 0a 09 73 74 72 69 6e 67 20 6d ets" {..string m
0300: 61 74 63 68 20 22 61 5c 5b 5c 75 30 30 62 35 2d atch "a\[\u00b5-
0310: 5c 75 30 30 63 33 5c 5d 22 20 22 61 5c 75 62 64 \u00c3\]" "a\ubd
0320: 22 0a 7d 20 31 0a 74 65 73 74 20 75 74 66 38 2d ".} 1.test utf8-
0330: 31 2e 39 20 22 50 61 74 74 65 72 6e 20 75 74 66 1.9 "Pattern utf
0340: 2d 38 20 63 68 61 72 20 73 65 74 73 22 20 7b 0a -8 char sets" {.
0350: 09 73 74 72 69 6e 67 20 6d 61 74 63 68 20 22 61 .string match "a
0360: 5c 5b 5c 75 30 30 62 35 2d 5c 75 30 30 63 33 5c \[\u00b5-\u00c3\
0370: 5d 22 20 22 61 5c 75 63 34 22 0a 7d 20 30 0a 0a ]" "a\uc4".} 0..
0380: 74 65 73 74 20 75 74 66 38 2d 32 2e 31 20 22 50 test utf8-2.1 "P
0390: 61 74 74 65 72 6e 20 75 74 66 2d 38 20 6e 6f 63 attern utf-8 noc
03a0: 61 73 65 22 20 7b 0a 09 73 74 72 69 6e 67 20 6d ase" {..string m
03b0: 61 74 63 68 20 2d 6e 6f 63 61 73 65 20 22 61 5c atch -nocase "a\
03c0: 75 31 65 64 63 5c 75 31 65 66 34 2a 22 20 22 41 u1edc\u1ef4*" "A
03d0: 5c 75 31 65 64 64 5c 75 31 65 66 35 58 58 22 0a \u1edd\u1ef5XX".
03e0: 7d 20 31 0a 0a 74 65 73 74 20 75 74 66 38 2d 32 } 1..test utf8-2
03f0: 2e 32 20 22 50 61 74 74 65 72 6e 20 75 74 66 2d .2 "Pattern utf-
0400: 38 20 63 61 73 65 20 64 69 66 66 65 72 65 6e 63 8 case differenc
0410: 65 22 20 7b 0a 09 73 74 72 69 6e 67 20 6d 61 74 e" {..string mat
0420: 63 68 20 22 61 5c 75 31 65 64 63 5c 75 31 65 66 ch "a\u1edc\u1ef
0430: 34 2a 22 20 22 41 5c 75 31 65 64 64 5c 75 31 65 4*" "A\u1edd\u1e
0440: 66 35 58 58 22 0a 7d 20 30 0a 0a 74 65 73 74 20 f5XX".} 0..test
0450: 75 74 66 38 2d 33 2e 31 20 22 6c 73 65 61 72 63 utf8-3.1 "lsearc
0460: 68 20 2d 67 6c 6f 62 22 20 7b 0a 09 6c 73 65 61 h -glob" {..lsea
0470: 72 63 68 20 2d 67 6c 6f 62 20 7b 31 20 64 20 61 rch -glob {1 d a
0480: 5c 75 30 30 62 35 78 79 62 20 63 7d 20 61 5c 75 \u00b5xyb c} a\u
0490: 62 35 2a 62 0a 7d 20 32 0a 0a 74 65 73 74 20 75 b5*b.} 2..test u
04a0: 74 66 38 2d 33 2e 32 20 22 73 77 69 74 63 68 20 tf8-3.2 "switch
04b0: 2d 67 6c 6f 62 22 20 7b 0a 09 73 77 69 74 63 68 -glob" {..switch
04c0: 20 2d 67 6c 6f 62 20 2d 2d 20 61 5c 75 62 35 78 -glob -- a\ub5x
04d0: 79 62 20 61 5c 75 62 35 2a 62 20 7b 20 73 65 74 yb a\ub5*b { set
04e0: 20 78 20 31 20 7d 20 64 65 66 61 75 6c 74 20 7b x 1 } default {
04f0: 20 73 65 74 20 78 20 30 20 7d 0a 09 73 65 74 20 set x 0 }..set
0500: 78 0a 7d 20 31 0a 0a 73 65 74 20 78 20 22 5c 75 x.} 1..set x "\u
0510: 62 35 74 65 73 74 22 0a 74 65 73 74 20 75 74 66 b5test".test utf
0520: 38 2d 33 2e 33 20 22 69 6e 66 6f 20 70 72 6f 63 8-3.3 "info proc
0530: 73 22 20 7b 0a 09 70 72 6f 63 20 24 78 20 7b 7d s" {..proc $x {}
0540: 20 7b 20 69 6e 66 6f 20 70 72 6f 63 73 20 5c 5b { info procs \[
0550: 5c 75 62 35 58 5d 3f 3f 3f 3f 20 7d 0a 09 24 78 \ub5X]???? }..$x
0560: 0a 7d 20 24 78 0a 0a 74 65 73 74 20 75 74 66 38 .} $x..test utf8
0570: 2d 33 2e 33 20 22 69 6e 66 6f 20 63 6f 6d 6d 61 -3.3 "info comma
0580: 6e 64 73 22 20 7b 0a 09 69 6e 66 6f 20 63 6f 6d nds" {..info com
0590: 6d 61 6e 64 73 20 5c 5b 5c 75 62 35 58 5d 3f 3f mands \[\ub5X]??
05a0: 3f 3f 0a 7d 20 24 78 0a 0a 74 65 73 74 20 75 74 ??.} $x..test ut
05b0: 66 38 2d 33 2e 34 20 22 70 72 6f 63 20 6e 61 6d f8-3.4 "proc nam
05c0: 65 20 77 69 74 68 20 69 6e 76 61 6c 69 64 20 75 e with invalid u
05d0: 74 66 2d 38 22 20 7b 0a 09 63 61 74 63 68 20 7b tf-8" {..catch {
05e0: 20 70 72 6f 63 20 61 62 5c 78 63 32 20 7b 7d 20 proc ab\xc2 {}
05f0: 7b 7d 20 7d 20 6d 73 67 0a 7d 20 30 0a 0a 74 65 {} } msg.} 0..te
0600: 73 74 20 75 74 66 38 2d 33 2e 35 20 22 72 65 6e st utf8-3.5 "ren
0610: 61 6d 65 20 74 6f 20 69 6e 76 61 6c 69 64 20 6e ame to invalid n
0620: 61 6d 65 22 20 7b 0a 09 63 61 74 63 68 20 7b 20 ame" {..catch {
0630: 72 65 6e 61 6d 65 20 61 62 5c 78 63 32 20 61 62 rename ab\xc2 ab
0640: 5c 78 63 33 20 7d 20 6d 73 67 0a 7d 20 30 0a 0a \xc3 } msg.} 0..
0650: 63 61 74 63 68 20 7b 72 65 6e 61 6d 65 20 61 62 catch {rename ab
0660: 5c 78 63 33 20 22 22 7d 0a 0a 74 65 73 74 20 75 \xc3 ""}..test u
0670: 74 66 38 2d 34 2e 31 20 22 73 70 6c 69 74 20 77 tf8-4.1 "split w
0680: 69 74 68 20 75 74 66 2d 38 22 20 7b 0a 09 73 70 ith utf-8" {..sp
0690: 6c 69 74 20 22 7a 79 5c 75 32 37 30 32 78 77 22 lit "zy\u2702xw"
06a0: 20 78 0a 7d 20 22 7a 79 5c 75 32 37 30 32 20 77 x.} "zy\u2702 w
06b0: 22 0a 0a 74 65 73 74 20 75 74 66 38 2d 34 2e 32 "..test utf8-4.2
06c0: 20 22 73 70 6c 69 74 20 77 69 74 68 20 75 74 66 "split with utf
06d0: 2d 38 22 20 7b 0a 09 73 70 6c 69 74 20 22 7a 79 -8" {..split "zy
06e0: 5c 75 32 37 30 32 78 77 22 20 5c 75 32 37 30 32 \u2702xw" \u2702
06f0: 0a 7d 20 22 7a 79 20 78 77 22 0a 0a 74 65 73 74 .} "zy xw"..test
0700: 20 75 74 66 38 2d 34 2e 32 20 22 73 70 6c 69 74 utf8-4.2 "split
0710: 20 77 69 74 68 20 75 74 66 2d 38 22 20 7b 0a 09 with utf-8" {..
0720: 73 70 6c 69 74 20 22 7a 79 5c 75 32 37 30 32 78 split "zy\u2702x
0730: 77 22 20 7b 7d 0a 7d 20 22 7a 20 79 20 5c 75 32 w" {}.} "z y \u2
0740: 37 30 32 20 78 20 77 22 0a 0a 74 65 73 74 20 75 702 x w"..test u
0750: 74 66 38 2d 35 2e 31 20 22 73 74 72 69 6e 67 20 tf8-5.1 "string
0760: 66 69 72 73 74 20 77 69 74 68 20 75 74 66 2d 38 first with utf-8
0770: 22 20 7b 0a 09 73 74 72 69 6e 67 20 66 69 72 73 " {..string firs
0780: 74 20 77 20 22 7a 79 5c 75 32 37 30 32 78 77 22 t w "zy\u2702xw"
0790: 0a 7d 20 34 0a 0a 74 65 73 74 20 75 74 66 38 2d .} 4..test utf8-
07a0: 35 2e 32 20 22 73 74 72 69 6e 67 20 66 69 72 73 5.2 "string firs
07b0: 74 20 77 69 74 68 20 75 74 66 2d 38 22 20 7b 0a t with utf-8" {.
07c0: 09 73 74 72 69 6e 67 20 66 69 72 73 74 20 5c 75 .string first \u
07d0: 32 37 30 32 20 22 5c 75 62 35 7a 79 5c 75 32 37 2702 "\ub5zy\u27
07e0: 30 32 78 77 22 0a 7d 20 33 0a 0a 74 65 73 74 20 02xw".} 3..test
07f0: 75 74 66 38 2d 35 2e 33 20 22 73 74 72 69 6e 67 utf8-5.3 "string
0800: 20 66 69 72 73 74 20 77 69 74 68 20 75 74 66 2d first with utf-
0810: 38 22 20 7b 0a 09 73 74 72 69 6e 67 20 66 69 72 8" {..string fir
0820: 73 74 20 5c 75 32 37 30 34 20 22 5c 75 62 35 7a st \u2704 "\ub5z
0830: 79 5c 75 32 37 30 32 78 77 22 0a 7d 20 2d 31 0a y\u2702xw".} -1.
0840: 0a 74 65 73 74 20 75 74 66 38 2d 35 2e 34 20 22 .test utf8-5.4 "
0850: 73 74 72 69 6e 67 20 66 69 72 73 74 20 77 69 74 string first wit
0860: 68 20 75 74 66 2d 38 22 20 7b 0a 09 73 74 72 69 h utf-8" {..stri
0870: 6e 67 20 66 69 72 73 74 20 5c 75 32 37 30 32 20 ng first \u2702
0880: 22 5c 75 62 35 7a 79 5c 75 32 37 30 32 78 77 5c "\ub5zy\u2702xw\
0890: 75 32 37 30 32 42 42 22 0a 7d 20 33 0a 0a 74 65 u2702BB".} 3..te
08a0: 73 74 20 75 74 66 38 2d 36 2e 31 20 22 73 74 72 st utf8-6.1 "str
08b0: 69 6e 67 20 6c 61 73 74 20 77 69 74 68 20 75 74 ing last with ut
08c0: 66 2d 38 22 20 7b 0a 09 73 74 72 69 6e 67 20 6c f-8" {..string l
08d0: 61 73 74 20 77 20 22 7a 79 5c 75 32 37 30 32 78 ast w "zy\u2702x
08e0: 77 22 0a 7d 20 34 0a 0a 74 65 73 74 20 75 74 66 w".} 4..test utf
08f0: 38 2d 36 2e 32 20 22 73 74 72 69 6e 67 20 6c 61 8-6.2 "string la
0900: 73 74 20 77 69 74 68 20 75 74 66 2d 38 22 20 7b st with utf-8" {
0910: 0a 09 73 74 72 69 6e 67 20 6c 61 73 74 20 5c 75 ..string last \u
0920: 32 37 30 32 20 22 5c 75 62 35 7a 79 5c 75 32 37 2702 "\ub5zy\u27
0930: 30 32 78 77 22 0a 7d 20 33 0a 0a 74 65 73 74 20 02xw".} 3..test
0940: 75 74 66 38 2d 36 2e 33 20 22 73 74 72 69 6e 67 utf8-6.3 "string
0950: 20 6c 61 73 74 20 77 69 74 68 20 75 74 66 2d 38 last with utf-8
0960: 22 20 7b 0a 09 73 74 72 69 6e 67 20 6c 61 73 74 " {..string last
0970: 20 5c 75 32 37 30 34 20 22 5c 75 62 35 7a 79 5c \u2704 "\ub5zy\
0980: 75 32 37 30 32 78 77 22 0a 7d 20 2d 31 0a 0a 74 u2702xw".} -1..t
0990: 65 73 74 20 75 74 66 38 2d 36 2e 34 20 22 73 74 est utf8-6.4 "st
09a0: 72 69 6e 67 20 6c 61 73 74 20 77 69 74 68 20 75 ring last with u
09b0: 74 66 2d 38 22 20 7b 0a 09 73 74 72 69 6e 67 20 tf-8" {..string
09c0: 6c 61 73 74 20 5c 75 32 37 30 32 20 22 5c 75 62 last \u2702 "\ub
09d0: 35 7a 79 5c 75 32 37 30 32 78 77 5c 75 32 37 30 5zy\u2702xw\u270
09e0: 32 42 42 22 0a 7d 20 36 0a 0a 74 65 73 74 20 75 2BB".} 6..test u
09f0: 74 66 38 2d 37 2e 31 20 22 73 74 72 69 6e 67 20 tf8-7.1 "string
0a00: 72 65 76 65 72 73 65 22 20 7b 0a 09 73 74 72 69 reverse" {..stri
0a10: 6e 67 20 72 65 76 65 72 73 65 20 5c 75 62 35 54 ng reverse \ub5T
0a20: 65 73 74 5c 75 32 37 30 32 0a 7d 20 5c 75 32 37 est\u2702.} \u27
0a30: 30 32 74 73 65 54 5c 75 62 35 0a 0a 74 65 73 74 02tseT\ub5..test
0a40: 20 75 74 66 38 2d 37 2e 32 20 7b 61 70 70 65 6e utf8-7.2 {appen
0a50: 64 20 63 6f 75 6e 74 73 20 63 6f 72 72 65 63 74 d counts correct
0a60: 6c 79 7d 20 7b 0a 09 73 65 74 20 78 20 5c 75 32 ly} {..set x \u2
0a70: 37 30 32 58 59 5a 0a 09 61 70 70 65 6e 64 20 78 702XYZ..append x
0a80: 20 5c 75 32 37 30 32 58 59 5a 0a 09 6c 69 73 74 \u2702XYZ..list
0a90: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length
0aa0: 24 78 5d 20 5b 73 74 72 69 6e 67 20 62 79 74 65 $x] [string byte
0ab0: 6c 65 6e 67 74 68 20 24 78 5d 0a 7d 20 7b 38 20 length $x].} {8
0ac0: 31 32 7d 0a 0a 74 65 73 74 20 75 74 66 38 2d 37 12}..test utf8-7
0ad0: 2e 33 20 7b 55 70 70 65 72 2c 20 6c 6f 77 65 72 .3 {Upper, lower
0ae0: 20 66 6f 72 20 74 69 74 6c 65 63 61 73 65 20 75 for titlecase u
0af0: 74 66 2d 38 7d 20 7b 0a 09 6c 69 73 74 20 5b 73 tf-8} {..list [s
0b00: 74 72 69 6e 67 20 74 6f 75 70 70 65 72 20 5c 75 tring toupper \u
0b10: 30 31 63 35 5d 20 5b 73 74 72 69 6e 67 20 74 6f 01c5] [string to
0b20: 6c 6f 77 65 72 20 5c 75 30 31 63 35 5d 0a 7d 20 lower \u01c5].}
0b30: 22 5c 75 30 31 63 34 20 5c 75 30 31 63 36 22 0a "\u01c4 \u01c6".
0b40: 0a 74 65 73 74 72 65 70 6f 72 74 0a .testreport.