Mercurial > libunicode
annotate tests/test-unicode.c @ 28:f06312a7432b
cmake: enable tests
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 07 Feb 2023 14:30:33 +0100 |
parents | 4da5819148c6 |
children | 303403de1314 |
rev | line source |
---|---|
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
18 | 2 * unicode.c -- main test file for unicode |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
27
4da5819148c6
misc: update copyright years
David Demelier <markand@malikania.fr>
parents:
24
diff
changeset
|
4 * Copyright (c) 2013-2023 David Demelier <markand@malikania.fr> |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <errno.h> |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 |
28 | 21 #include <dt.h> |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 #include "unicode.h" |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 /* |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 * /!\ Be sure to keep this file with UTF-8 encoding /!\ |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 */ |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 static size_t |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 u32len(const uint32_t *s) |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 { |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 size_t t = 0; |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 while (*s++) |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 ++t; |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 return t; |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 |
14
153c09cc6dcb
misc: miscellaneous cleanups for 2021
David Demelier <markand@malikania.fr>
parents:
12
diff
changeset
|
40 static int |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 u32cmp(const uint32_t *s1, const uint32_t *s2) |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 { |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 const size_t l1 = u32len(s1); |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 const size_t l2 = u32len(s2); |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 return l1 == l2 && memcmp(s1, s2, l1) == 0; |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 |
28 | 49 static void |
50 uni8_encode_simple(void) | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
51 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
52 size_t r; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
53 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
54 /* a -> 1 bytes. */ |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
55 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
56 uint8_t buffer[5] = { 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
57 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
58 r = uni8_encode(buffer, sizeof (buffer), U'a'); |
28 | 59 DT_EQ_INT(r, 1); |
60 DT_EQ_STR((const char *)buffer, (const char *)u8"a"); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
61 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
62 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
63 /* é -> 2 bytes. */ |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
64 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
65 uint8_t buffer[5] = { 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
66 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
67 r = uni8_encode(buffer, sizeof (buffer), U'é'); |
28 | 68 DT_EQ_INT(r, 2); |
69 DT_EQ_STR((const char *)buffer, (const char *)u8"é"); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
70 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
71 } |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 |
28 | 73 static void |
74 uni8_encode_invalid(void) | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 { |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
76 size_t r; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
77 uint8_t buffer[5] = { 0 }; |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
79 r = uni8_encode(buffer, sizeof (buffer), 0xffffffff); |
28 | 80 DT_EQ_SIZE(r, (size_t)-1); |
81 DT_EQ_INT(errno, EILSEQ); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 |
28 | 84 static void |
85 uni8_encode_toosmall(void) | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
86 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
87 size_t r; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
88 uint8_t buffer[1] = { 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
89 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
90 r = uni8_encode(buffer, sizeof (buffer), U'é'); |
28 | 91 DT_EQ_SIZE(r, (size_t)-1); |
92 DT_EQ_INT(errno, ERANGE); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
93 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
94 |
28 | 95 static void |
96 uni8_decode_simple(void) | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 { |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
98 size_t r; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
99 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
100 /* a -> 1 bytes. */ |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
101 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
102 uint32_t code = -1; |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 |
18 | 104 r = uni8_decode((const uint8_t *)u8"a", &code); |
28 | 105 DT_EQ_SIZE(r, 1U); |
106 DT_EQ_INT(code, 'a'); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
107 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
108 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
109 /* é -> 2 bytes. */ |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
110 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
111 uint32_t code = -1; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
112 |
18 | 113 r = uni8_decode((const uint8_t *)u8"é", &code); |
28 | 114 DT_EQ_SIZE(r, 2U); |
115 DT_EQ_INT(code, U'é'); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
116 } |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 |
28 | 119 static void |
120 uni8_decode_invalid(void) | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
121 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
122 size_t r; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
123 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
124 /* Invalid UTF-8 sequence. */ |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
125 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
126 uint32_t code = -1; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
127 |
18 | 128 r = uni8_decode((const uint8_t *)u8"\xff""a", &code); |
28 | 129 DT_EQ_SIZE(r, (size_t)-1); |
130 DT_EQ_SIZE(code, (uint32_t)-1); | |
131 DT_EQ_INT(errno, EILSEQ); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
132 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
133 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
134 /* Valid "€" but unfinished sequence. */ |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
135 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
136 uint32_t code = -1; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
137 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
138 r = uni8_decode((const uint8_t []){ -30, 0 }, &code); |
28 | 139 DT_EQ_SIZE(r, (size_t)-1); |
140 DT_EQ_SIZE(code, (uint32_t)-1); | |
141 DT_EQ_INT(errno, EILSEQ); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
142 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
143 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
144 |
28 | 145 static void |
146 uni8_sizeof_simple(void) | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 { |
28 | 148 DT_EQ_INT(uni8_sizeof(u8"a"[0]), 1U); |
149 DT_EQ_INT(uni8_sizeof(u8"é"[0]), 2U); | |
150 DT_EQ_INT(uni8_sizeof(u8"€"[0]), 3U); | |
151 DT_EQ_INT(uni8_sizeof(u8"𐍈"[0]), 4U); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
152 } |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
153 |
28 | 154 static void |
155 uni8_sizeof_invalid(void) | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
156 { |
28 | 157 DT_EQ_SIZE((size_t)-1, uni8_sizeof(u8"\xff"[0])); |
158 DT_EQ_INT(errno, EILSEQ); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
159 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
160 |
28 | 161 static void |
162 uni8_length_simple(void) | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
163 { |
28 | 164 DT_EQ_SIZE(uni8_length((const uint8_t *)"abc"), 3U); |
165 DT_EQ_SIZE(uni8_length((const uint8_t *)"5€"), 2U); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
166 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
167 |
28 | 168 static void |
169 uni8_length_invalid(void) | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
170 { |
28 | 171 DT_EQ_SIZE((size_t)-1, uni8_length((const uint8_t *)"a""\xff""b")); |
172 DT_EQ_INT(errno, EILSEQ); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
173 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 |
28 | 175 static void |
176 uni8_to32_simple(void) | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 { |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
178 size_t r; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
179 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
180 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
181 uint32_t buffer[10] = { 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
182 uint32_t expected[] = { U'a', U'b', U'c', 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
183 |
18 | 184 r = uni8_to32((const uint8_t *)"abc", buffer, 10); |
28 | 185 DT_EQ_SIZE(r, 3U); |
186 DT_ASSERT(u32cmp(buffer, expected)); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
187 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
188 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
189 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
190 uint32_t buffer[10] = { 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
191 uint32_t expected[] = { U'a', U'é', U'c', 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
192 |
18 | 193 r = uni8_to32((const uint8_t *)"aéc", buffer, 10); |
28 | 194 DT_EQ_SIZE(r, 3); |
195 DT_ASSERT(u32cmp(buffer, expected)); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
196 } |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
197 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
198 |
28 | 199 static void |
200 uni8_to32_invalid(void) | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
201 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
202 size_t r; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
203 uint32_t buffer[10] = { 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
204 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
205 /* Invalid UTF-8 sequence. */ |
18 | 206 r = uni8_to32((const uint8_t *)u8"\xff""a", buffer, 10); |
28 | 207 DT_EQ_SIZE(r, (size_t)-1); |
208 DT_EQ_INT(errno, EILSEQ); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
209 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
210 /* Valid "€" but unfinished sequence. */ |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
211 r = uni8_to32((const uint8_t []){ -30, 0 }, buffer, 10); |
28 | 212 DT_EQ_SIZE(r, (size_t)-1); |
213 DT_EQ_INT(errno, EILSEQ); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
214 } |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
215 |
28 | 216 static void |
217 uni8_to32_toosmall(void) | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
218 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
219 size_t r; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
220 uint32_t buffer[4] = { 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
221 |
18 | 222 r = uni8_to32((const uint8_t *)u8"bonjour à tous", buffer, 1); |
28 | 223 DT_EQ_SIZE(r, (size_t)-1); |
224 DT_EQ_INT(errno, ERANGE); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
225 } |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
226 |
28 | 227 static void |
228 uni32_sizeof_simple(void) | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
229 { |
28 | 230 DT_EQ_SIZE(uni32_sizeof(U'a'), 1); |
231 DT_EQ_SIZE(uni32_sizeof(U'é'), 2); | |
232 DT_EQ_SIZE(uni32_sizeof(U'€'), 3); | |
233 DT_EQ_SIZE(uni32_sizeof(U'𐍈'), 4); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
234 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
235 |
28 | 236 static void |
237 uni32_sizeof_invalid(void) | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
238 { |
28 | 239 DT_EQ_SIZE((size_t)-1, uni32_sizeof(0xffffffff)); |
240 DT_EQ_INT(errno, EILSEQ); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
241 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
242 |
28 | 243 static void |
244 uni32_length_simple(void) | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
245 { |
28 | 246 DT_EQ_SIZE(uni32_length((const uint32_t []){ U'a', U'é', U'c', 0 }), 3U); |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
247 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
248 |
28 | 249 static void |
250 uni32_requires_simple(void) | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
251 { |
28 | 252 DT_EQ_SIZE(uni32_requires(U"abc"), 3U); |
253 DT_EQ_SIZE(uni32_requires(U"é€𐍈"), 9U); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
254 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
255 |
28 | 256 static void |
257 uni32_requires_invalid(void) | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
258 { |
28 | 259 DT_EQ_SIZE((size_t)-1, uni32_requires(U"\xffffffff")); |
260 DT_EQ_INT(errno, EILSEQ); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
261 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
262 |
28 | 263 static void |
264 uni32_to8_simple(void) | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
265 { |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
266 size_t r; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
267 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
268 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
269 uint8_t buffer[10] = { 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
270 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
271 r = uni32_to8(U"abc", buffer, sizeof (buffer)); |
28 | 272 DT_EQ_SIZE(r, 3U); |
273 DT_EQ_STR((const char *)buffer, (const char *)u8"abc"); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
274 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
275 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
276 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
277 uint8_t buffer[20] = { 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
278 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
279 r = uni32_to8(U"ça va, 5€ ?", buffer, sizeof (buffer)); |
28 | 280 DT_EQ_SIZE(r, 14U); |
281 DT_EQ_STR((const char *)buffer, (const char *)u8"ça va, 5€ ?"); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
282 } |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
283 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
284 |
28 | 285 static void |
286 uni32_to8_invalid(void) | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
287 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
288 uint8_t buffer[10] = { 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
289 |
28 | 290 DT_EQ_SIZE(uni32_to8(U"\xffffffff", buffer, sizeof (buffer)), (size_t)-1); |
291 DT_EQ_INT(errno, EILSEQ); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
292 } |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
293 |
28 | 294 static void |
295 uni32_to8_toosmall(void) | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
296 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
297 size_t r; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
298 uint8_t buffer[3] = { 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
299 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
300 r = uni32_to8(U"ça va ?", buffer, sizeof (buffer)); |
28 | 301 DT_EQ_SIZE(r, (size_t)-1); |
302 DT_EQ_INT(errno, ERANGE); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
303 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
304 |
28 | 305 static void |
306 misc_isalpha(void) | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
307 { |
28 | 308 DT_ASSERT(uni_isalpha(U'é')); |
309 DT_ASSERT(!uni_isalpha(U'€')); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
310 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
311 |
28 | 312 static void |
313 misc_isdigit(void) | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
314 { |
28 | 315 DT_ASSERT(uni_isdigit(U'۱')); |
316 DT_ASSERT(!uni_isdigit(U'€')); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
317 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
318 |
28 | 319 static void |
320 misc_islower(void) | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
321 { |
28 | 322 DT_ASSERT(uni_islower(U'a')); |
323 DT_ASSERT(uni_islower(U'é')); | |
324 DT_ASSERT(!uni_islower(U'A')); | |
325 DT_ASSERT(!uni_islower(U'É')); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
326 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
327 |
28 | 328 static void |
329 misc_isspace(void) | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
330 { |
28 | 331 DT_ASSERT(uni_isspace(U' ')); |
332 DT_ASSERT(!uni_isspace(U'é')); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
333 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
334 |
28 | 335 static void |
336 misc_istitle(void) | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
337 { |
28 | 338 DT_ASSERT(uni_istitle(U'Dž')); |
339 DT_ASSERT(!uni_istitle(U'€')); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
340 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
341 |
28 | 342 static void |
343 misc_isupper(void) | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
344 { |
28 | 345 DT_ASSERT(!uni_isupper('a')); |
346 DT_ASSERT(!uni_isupper(U'é')); | |
347 DT_ASSERT(uni_isupper('A')); | |
348 DT_ASSERT(uni_isupper(U'É')); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
349 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
350 |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
351 int |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
352 main(int argc, char **argv) |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
353 { |
28 | 354 DT_RUN(uni8_encode_simple); |
355 DT_RUN(uni8_encode_invalid); | |
356 DT_RUN(uni8_encode_toosmall); | |
357 DT_RUN(uni8_decode_simple); | |
358 DT_RUN(uni8_decode_invalid); | |
359 DT_RUN(uni8_sizeof_simple); | |
360 DT_RUN(uni8_sizeof_invalid); | |
361 DT_RUN(uni8_length_simple); | |
362 DT_RUN(uni8_length_invalid); | |
363 DT_RUN(uni8_to32_simple); | |
364 DT_RUN(uni8_to32_invalid); | |
365 DT_RUN(uni8_to32_toosmall); | |
366 DT_RUN(uni32_sizeof_simple); | |
367 DT_RUN(uni32_sizeof_invalid); | |
368 DT_RUN(uni32_length_simple); | |
369 DT_RUN(uni32_requires_simple); | |
370 DT_RUN(uni32_requires_invalid); | |
371 DT_RUN(uni32_to8_simple); | |
372 DT_RUN(uni32_to8_invalid); | |
373 DT_RUN(uni32_to8_toosmall); | |
374 DT_RUN(misc_isalpha); | |
375 DT_RUN(misc_isdigit); | |
376 DT_RUN(misc_islower); | |
377 DT_RUN(misc_isspace); | |
378 DT_RUN(misc_istitle); | |
379 DT_RUN(misc_isupper); | |
380 DT_SUMMARY(); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
381 } |