File: TestStringToNumber.tcl

package info (click to toggle)
libuninum 2.7-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,204 kB
  • sloc: ansic: 9,968; sh: 8,721; tcl: 553; makefile: 27
file content (66 lines) | stat: -rw-r--r-- 1,737 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#Test conversion of Unicode strings to numbers
load tcl_uninum.so uninum
#package require uninum 2.2
fconfigure  stdout -encoding utf-8
set sl {
\u0666\u0664\u0665\u0663
\u06F6\u06F4\u06F5\u06F2
\u09EB\u09E9\u09EA
\u1045\u1048\u1043\u1047
\u4E03\u4E07\u4E03
\u096A\u096B\u0969
\u1374\u1370\u137C\u1373\u1371\u137B\u1375
\u0AEB\u0AED\u0AEC\u0AE7
\u0A6D\u0A6B\u0A69\u0A6A\u0A6F
\u05D4\u05F3\u05EA\u05EA\u05DB\u05D6
\u0CED\u0CE9\u0CEB
\u17E6\u17E9\u17E5\u17E2
\uF8F7\uF8F5\uF8F9
\u0ED4\u0ED6\u0ED2\u0ED7
\u0D68\u0D6E\u0D6D\u0D69
\u1813\u1817\u1819\u1812
\u07C5\u07C8\u07C2\u07C3
\u0B69\u0B66\u0B6B\u0B6D
xlviii
xl8
\u0BEE\u0BF1\u0BE8\u0BF0\u0BE9\u0BF2\u0BE8
\u096A\u0C6B\u0969
\u0C6D\u0C6A\u0C69\u0C6B
\u0E53\u0E59\u0E56\u0E52
\u0F25\u0F28\u0F23
28375}
					
#Insert thousands separators
proc commify { num {sep ,} {groupSize 3}} {
    while {[regsub "^(\[-+]?\\d+)(\\d{$groupSize})" $num "\\1$sep\\2" num]} {}
    return $num
}

proc UninumErrorToString {n} {
    switch $n {
	128 {return "bad character"}
	129 {return "does not fit"}
	130 {return "unknown number system"}
	131 {return "invalid base"}
	132 {return "digit inconsistent with base"}
	133 {return "out of memory"}
	134 {return "number out of range of writing system"}
	135 {return "result contains character outside BMP"}
    }
}

foreach s $sl {
    set r [UNStrToWNStr $s all]
    if {$::uninum_err} {
	if {$::uninum_err == 128} {
	    puts [format "%s\t  The character %c U+%04X does not belong in a %s number."\
		      $s $::tcl_uninum_badchar $tcl_uninum_badchar [StrGuessNumberSystem $s]]
	} else {
	    puts [format "Error: %s" [UninumErrorToString $::uninum_err]]
	}
	continue
    }
    puts [format "%s\t  %-15s  %10s" $s [StrGuessNumberSystem $s] [commify $r]]
}