Mercurial > libunicode
annotate tests/test-unicode.c @ 24:23ceab03a393 1.0.0
unicode: remove uni_totitle
While here, add more consts.
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 23 Mar 2022 13:17:10 +0100 |
parents | 4983392b356f |
children | 4da5819148c6 |
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 * |
19
91879958b74d
misc: update copyright years
David Demelier <markand@malikania.fr>
parents:
18
diff
changeset
|
4 * Copyright (c) 2013-2022 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 |
18 | 21 #include <rexo.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 |
18 | 49 RX_TEST_CASE(uni8_encode, simple) |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
50 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
51 size_t r; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
52 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
53 /* a -> 1 bytes. */ |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
54 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
55 uint8_t buffer[5] = { 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
56 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
57 r = uni8_encode(buffer, sizeof (buffer), U'a'); |
18 | 58 RX_INT_REQUIRE_EQUAL(r, 1); |
59 RX_STR_REQUIRE_EQUAL((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
|
60 } |
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 /* é -> 2 bytes. */ |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
63 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
64 uint8_t buffer[5] = { 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
65 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
66 r = uni8_encode(buffer, sizeof (buffer), U'é'); |
18 | 67 RX_INT_REQUIRE_EQUAL(r, 2); |
68 RX_STR_REQUIRE_EQUAL((const char *)buffer, (const char *)u8"é"); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
69 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
70 } |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 |
18 | 72 RX_TEST_CASE(uni8_encode, invalid) |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 { |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
74 size_t r; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
75 uint8_t buffer[5] = { 0 }; |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
77 r = uni8_encode(buffer, sizeof (buffer), 0xffffffff); |
18 | 78 RX_UINT_REQUIRE_EQUAL(r, (size_t)-1); |
79 RX_INT_REQUIRE_EQUAL(errno, EILSEQ); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 |
18 | 82 RX_TEST_CASE(uni8_encode, toosmall) |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
83 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
84 size_t r; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
85 uint8_t buffer[1] = { 0 }; |
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 r = uni8_encode(buffer, sizeof (buffer), U'é'); |
18 | 88 RX_UINT_REQUIRE_EQUAL(r, (size_t)-1); |
89 RX_INT_REQUIRE_EQUAL(errno, ERANGE); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
90 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
91 |
18 | 92 RX_TEST_CASE(unit8_decode, simple) |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 { |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
94 size_t r; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
95 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
96 /* a -> 1 bytes. */ |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
97 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
98 uint32_t code = -1; |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 |
18 | 100 r = uni8_decode((const uint8_t *)u8"a", &code); |
101 RX_UINT_REQUIRE_EQUAL(r, 1U); | |
102 RX_INT_REQUIRE_EQUAL(code, 'a'); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
103 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
104 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
105 /* é -> 2 bytes. */ |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
106 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
107 uint32_t code = -1; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
108 |
18 | 109 r = uni8_decode((const uint8_t *)u8"é", &code); |
110 RX_UINT_REQUIRE_EQUAL(r, 2U); | |
111 RX_INT_REQUIRE_EQUAL(code, U'é'); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
112 } |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 |
18 | 115 RX_TEST_CASE(uni8_decode, invalid) |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
116 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
117 size_t r; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
118 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
119 /* Invalid UTF-8 sequence. */ |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
120 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
121 uint32_t code = -1; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
122 |
18 | 123 r = uni8_decode((const uint8_t *)u8"\xff""a", &code); |
124 RX_UINT_REQUIRE_EQUAL(r, (size_t)-1); | |
125 RX_UINT_REQUIRE_EQUAL(code, (uint32_t)-1); | |
126 RX_INT_REQUIRE_EQUAL(errno, EILSEQ); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
127 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
128 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
129 /* Valid "€" but unfinished sequence. */ |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
130 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
131 uint32_t code = -1; |
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 r = uni8_decode((const uint8_t []){ -30, 0 }, &code); |
18 | 134 RX_UINT_REQUIRE_EQUAL(r, (size_t)-1); |
135 RX_UINT_REQUIRE_EQUAL(code, (uint32_t)-1); | |
136 RX_INT_REQUIRE_EQUAL(errno, EILSEQ); | |
11
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 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
139 |
18 | 140 RX_TEST_CASE(uni8_sizeof, simple) |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
141 { |
18 | 142 RX_INT_REQUIRE_EQUAL(uni8_sizeof(u8"a"[0]), 1U); |
143 RX_INT_REQUIRE_EQUAL(uni8_sizeof(u8"é"[0]), 2U); | |
144 RX_INT_REQUIRE_EQUAL(uni8_sizeof(u8"€"[0]), 3U); | |
145 RX_INT_REQUIRE_EQUAL(uni8_sizeof(u8"𐍈"[0]), 4U); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
146 } |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 |
18 | 148 RX_TEST_CASE(uni8_sizeof, invalid) |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
149 { |
18 | 150 RX_UINT_REQUIRE_EQUAL((size_t)-1, uni8_sizeof(u8"\xff"[0])); |
151 RX_INT_REQUIRE_EQUAL(errno, EILSEQ); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
152 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
153 |
18 | 154 RX_TEST_CASE(uni8_length, simple) |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
155 { |
18 | 156 RX_UINT_REQUIRE_EQUAL(uni8_length((const uint8_t *)"abc"), 3U); |
157 RX_UINT_REQUIRE_EQUAL(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
|
158 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
159 |
18 | 160 RX_TEST_CASE(uni8_length, invalid) |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
161 { |
18 | 162 RX_UINT_REQUIRE_EQUAL((size_t)-1, uni8_length((const uint8_t *)"a""\xff""b")); |
163 RX_INT_REQUIRE_EQUAL(errno, EILSEQ); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
164 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
165 |
18 | 166 RX_TEST_CASE(uni8_to32, simple) |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
167 { |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
168 size_t r; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
169 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
170 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
171 uint32_t buffer[10] = { 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
172 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
|
173 |
18 | 174 r = uni8_to32((const uint8_t *)"abc", buffer, 10); |
175 RX_UINT_REQUIRE_EQUAL(r, 3U); | |
176 RX_REQUIRE(u32cmp(buffer, expected)); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
177 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
178 |
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 uint32_t buffer[10] = { 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
181 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
|
182 |
18 | 183 r = uni8_to32((const uint8_t *)"aéc", buffer, 10); |
184 RX_UINT_REQUIRE_EQUAL(r, 3); | |
185 RX_REQUIRE(u32cmp(buffer, expected)); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
186 } |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
188 |
18 | 189 RX_TEST_CASE(uni8_to32, invalid) |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
190 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
191 size_t r; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
192 uint32_t buffer[10] = { 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
193 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
194 /* Invalid UTF-8 sequence. */ |
18 | 195 r = uni8_to32((const uint8_t *)u8"\xff""a", buffer, 10); |
196 RX_UINT_REQUIRE_EQUAL(r, (size_t)-1); | |
197 RX_INT_REQUIRE_EQUAL(errno, EILSEQ); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
198 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
199 /* Valid "€" but unfinished sequence. */ |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
200 r = uni8_to32((const uint8_t []){ -30, 0 }, buffer, 10); |
18 | 201 RX_UINT_REQUIRE_EQUAL(r, (size_t)-1); |
202 RX_INT_REQUIRE_EQUAL(errno, EILSEQ); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
203 } |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
204 |
18 | 205 RX_TEST_CASE(uni8_to32, toosmall) |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
206 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
207 size_t r; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
208 uint32_t buffer[4] = { 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
209 |
18 | 210 r = uni8_to32((const uint8_t *)u8"bonjour à tous", buffer, 1); |
211 RX_UINT_REQUIRE_EQUAL(r, (size_t)-1); | |
212 RX_INT_REQUIRE_EQUAL(errno, ERANGE); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
213 } |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
214 |
18 | 215 RX_TEST_CASE(uni32_sizeof, simple) |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
216 { |
18 | 217 RX_UINT_REQUIRE_EQUAL(uni32_sizeof(U'a'), 1); |
218 RX_UINT_REQUIRE_EQUAL(uni32_sizeof(U'é'), 2); | |
219 RX_UINT_REQUIRE_EQUAL(uni32_sizeof(U'€'), 3); | |
220 RX_UINT_REQUIRE_EQUAL(uni32_sizeof(U'𐍈'), 4); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
221 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
222 |
18 | 223 RX_TEST_CASE(uni32_sizeof, invalid) |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
224 { |
18 | 225 RX_UINT_REQUIRE_EQUAL((size_t)-1, uni32_sizeof(0xffffffff)); |
226 RX_INT_REQUIRE_EQUAL(errno, EILSEQ); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
227 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
228 |
18 | 229 RX_TEST_CASE(uni32_length, simple) |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
230 { |
18 | 231 RX_UINT_REQUIRE_EQUAL(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
|
232 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
233 |
18 | 234 RX_TEST_CASE(uni32_requires, simple) |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
235 { |
18 | 236 RX_UINT_REQUIRE_EQUAL(uni32_requires(U"abc"), 3U); |
237 RX_UINT_REQUIRE_EQUAL(uni32_requires(U"é€𐍈"), 9U); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
238 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
239 |
18 | 240 RX_TEST_CASE(uni32_requires, invalid) |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
241 { |
18 | 242 RX_UINT_REQUIRE_EQUAL((size_t)-1, uni32_requires(U"\xffffffff")); |
243 RX_INT_REQUIRE_EQUAL(errno, EILSEQ); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
244 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
245 |
18 | 246 RX_TEST_CASE(uni32_to8, simple) |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
247 { |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
248 size_t r; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
249 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
250 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
251 uint8_t buffer[10] = { 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
252 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
253 r = uni32_to8(U"abc", buffer, sizeof (buffer)); |
18 | 254 RX_UINT_REQUIRE_EQUAL(r, 3U); |
255 RX_STR_REQUIRE_EQUAL((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
|
256 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
257 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
258 { |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
259 uint8_t buffer[20] = { 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
260 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
261 r = uni32_to8(U"ça va, 5€ ?", buffer, sizeof (buffer)); |
18 | 262 RX_UINT_REQUIRE_EQUAL(r, 14U); |
263 RX_STR_REQUIRE_EQUAL((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
|
264 } |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
265 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
266 |
18 | 267 RX_TEST_CASE(uni32_to8, invalid) |
11
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 |
18 | 271 RX_INT_REQUIRE_EQUAL(uni32_to8(U"\xffffffff", buffer, sizeof (buffer)), (size_t)-1); |
272 RX_UINT_REQUIRE_EQUAL(errno, EILSEQ); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
273 } |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
274 |
18 | 275 RX_TEST_CASE(uni32_to8, toosmall) |
11
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 size_t r; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
278 uint8_t buffer[3] = { 0 }; |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
279 |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
280 r = uni32_to8(U"ça va ?", buffer, sizeof (buffer)); |
18 | 281 RX_UINT_REQUIRE_EQUAL(r, (size_t)-1); |
282 RX_INT_REQUIRE_EQUAL(errno, ERANGE); | |
11
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
283 } |
43a9d763656b
unicode: improve C API, removing dynamic allocations
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
284 |
18 | 285 RX_TEST_CASE(misc, isalpha) |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
286 { |
18 | 287 RX_REQUIRE(uni_isalpha(U'é')); |
288 RX_REQUIRE(!uni_isalpha(U'€')); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
289 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
290 |
18 | 291 RX_TEST_CASE(misc, isdigit) |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
292 { |
18 | 293 RX_REQUIRE(uni_isdigit(U'۱')); |
294 RX_REQUIRE(!uni_isdigit(U'€')); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
295 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
296 |
18 | 297 RX_TEST_CASE(misc, islower) |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
298 { |
18 | 299 RX_REQUIRE(uni_islower(U'a')); |
300 RX_REQUIRE(uni_islower(U'é')); | |
301 RX_REQUIRE(!uni_islower(U'A')); | |
302 RX_REQUIRE(!uni_islower(U'É')); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
303 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
304 |
18 | 305 RX_TEST_CASE(misc, isspace) |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
306 { |
18 | 307 RX_REQUIRE(uni_isspace(U' ')); |
308 RX_REQUIRE(!uni_isspace(U'é')); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
309 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
310 |
18 | 311 RX_TEST_CASE(misc, istitle) |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
312 { |
18 | 313 RX_REQUIRE(uni_istitle(U'Dž')); |
314 RX_REQUIRE(!uni_istitle(U'€')); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
315 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
316 |
18 | 317 RX_TEST_CASE(misc, isupper) |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
318 { |
18 | 319 RX_REQUIRE(!uni_isupper('a')); |
320 RX_REQUIRE(!uni_isupper(U'é')); | |
321 RX_REQUIRE(uni_isupper('A')); | |
322 RX_REQUIRE(uni_isupper(U'É')); | |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
323 } |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
324 |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
325 int |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
326 main(int argc, char **argv) |
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
327 { |
18 | 328 return rx_main(0, NULL, argc, (const char **)argv) == RX_SUCCESS ? 0 : 1; |
10
ae1003c2a284
misc: extreme simplification
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
329 } |