1 | fn test_utf8_char_len() { |
2 | assert utf8_char_len(`a`) == 1 |
3 | println(utf8_char_len(`a`)) |
4 | s := 'п' |
5 | assert utf8_char_len(s[0]) == 2 |
6 | } |
7 | |
8 | fn test_utf8_wide_char() { |
9 | $if msvc { |
10 | // TODO: make this test pass msvc too |
11 | return |
12 | } |
13 | r := `✔` |
14 | s := '✔' |
15 | println('r: ${r}') |
16 | println('s: ${s}') |
17 | rstr := r.str() |
18 | println('rstr: ${rstr}') |
19 | assert utf8_char_len(r) == 1 |
20 | assert utf8_char_len(s[0]) == 3 |
21 | assert s == rstr |
22 | val := rstr.str |
23 | unsafe { |
24 | assert val[0].hex() == 'e2' |
25 | assert val[1].hex() == '9c' |
26 | assert val[2].hex() == '94' |
27 | } |
28 | } |
29 | |
30 | fn test_to_wide_latin() { |
31 | s := 'abc 123' |
32 | w := s.to_wide() |
33 | unsafe { |
34 | assert w[0] == 97 |
35 | assert w[1] == 98 |
36 | assert w[2] == 99 |
37 | assert w[3] == 32 |
38 | assert w[4] == 49 |
39 | assert w[5] == 50 |
40 | assert w[6] == 51 |
41 | assert w[7] == 0 |
42 | } |
43 | } |
44 | |
45 | fn test_to_wide_cyrillic() { |
46 | s := 'Проба' |
47 | w := s.to_wide() |
48 | unsafe { |
49 | assert w[0] == 1055 |
50 | assert w[1] == 1088 |
51 | assert w[2] == 1086 |
52 | assert w[3] == 1073 |
53 | assert w[4] == 1072 |
54 | assert w[5] == 0 |
55 | } |
56 | } |
57 | |
58 | const wide_serial_number = [u8(67), 0, 76, 0, 52, 0, 54, 0, 73, 0, 49, 0, 65, 0, 48, 0, 48, 0, |
59 | 54, 0, 52, 0, 57, 0, 0, 0, 0] |
60 | |
61 | const swide_serial_number = 'CL46I1A00649' |
62 | |
63 | fn test_string_from_wide() { |
64 | z := unsafe { string_from_wide(wide_serial_number.data) } |
65 | assert z == swide_serial_number |
66 | } |
67 | |
68 | fn test_string_from_wide2() { |
69 | z := unsafe { string_from_wide2(wide_serial_number.data, 12) } |
70 | assert z == swide_serial_number |
71 | } |
72 | |
73 | fn test_reverse_cyrillic_with_string_from_wide() { |
74 | s := 'Проба' |
75 | ws := s.to_wide() |
76 | z := unsafe { string_from_wide(ws) } |
77 | assert z == s |
78 | } |