comparison mupdf-source/thirdparty/zint/backend/tests/test_iso3166.c @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
comparison
equal deleted inserted replaced
1:1d09e1dec1d9 2:b50eed0cc0ef
1 /*
2 libzint - the open source barcode library
3 Copyright (C) 2021-2022 Robin Stuart <rstuart114@gmail.com>
4
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions
7 are met:
8
9 1. Redistributions of source code must retain the above copyright
10 notice, this list of conditions and the following disclaimer.
11 2. Redistributions in binary form must reproduce the above copyright
12 notice, this list of conditions and the following disclaimer in the
13 documentation and/or other materials provided with the distribution.
14 3. Neither the name of the project nor the names of its contributors
15 may be used to endorse or promote products derived from this software
16 without specific prior written permission.
17
18 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
22 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 SUCH DAMAGE.
29 */
30 /* SPDX-License-Identifier: BSD-3-Clause */
31
32 #include "testcommon.h"
33 #include "../iso3166.h"
34
35 static void test_numeric(const testCtx *const p_ctx) {
36
37 struct item {
38 int data;
39 int ret;
40 };
41 /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */
42 struct item data[] = {
43 /* 0*/ { -1, 0 },
44 /* 1*/ { 0, 0 },
45 /* 2*/ { 1, 0 },
46 /* 3*/ { 2, 0 },
47 /* 4*/ { 3, 0 },
48 /* 5*/ { 4, 1 },
49 /* 6*/ { 5, 0 },
50 /* 7*/ { 6, 0 },
51 /* 8*/ { 7, 0 },
52 /* 9*/ { 8, 1 },
53 /* 10*/ { 9, 0 },
54 /* 11*/ { 10, 1 },
55 /* 12*/ { 11, 0 },
56 /* 13*/ { 12, 1 },
57 /* 14*/ { 13, 0 },
58 /* 15*/ { 14, 0 },
59 /* 16*/ { 15, 0 },
60 /* 17*/ { 16, 1 },
61 /* 18*/ { 17, 0 },
62 /* 19*/ { 18, 0 },
63 /* 20*/ { 19, 0 },
64 /* 21*/ { 20, 1 },
65 /* 22*/ { 21, 0 },
66 /* 23*/ { 22, 0 },
67 /* 24*/ { 23, 0 },
68 /* 25*/ { 24, 1 },
69 /* 26*/ { 25, 0 },
70 /* 27*/ { 26, 0 },
71 /* 28*/ { 27, 0 },
72 /* 29*/ { 28, 1 },
73 /* 30*/ { 29, 0 },
74 /* 31*/ { 30, 0 },
75 /* 32*/ { 31, 1 },
76 /* 33*/ { 32, 1 },
77 /* 34*/ { 33, 0 },
78 /* 35*/ { 34, 0 },
79 /* 36*/ { 35, 0 },
80 /* 37*/ { 36, 1 },
81 /* 38*/ { 37, 0 },
82 /* 39*/ { 38, 0 },
83 /* 40*/ { 39, 0 },
84 /* 41*/ { 40, 1 },
85 /* 42*/ { 41, 0 },
86 /* 43*/ { 47, 0 },
87 /* 44*/ { 48, 1 },
88 /* 45*/ { 49, 0 },
89 /* 46*/ { 50, 1 },
90 /* 47*/ { 51, 1 },
91 /* 48*/ { 52, 1 },
92 /* 49*/ { 53, 0 },
93 /* 50*/ { 67, 0 },
94 /* 51*/ { 68, 1 },
95 /* 52*/ { 69, 0 },
96 /* 53*/ { 70, 1 },
97 /* 54*/ { 71, 0 },
98 /* 55*/ { 72, 1 },
99 /* 56*/ { 73, 0 },
100 /* 57*/ { 74, 1 },
101 /* 58*/ { 75, 0 },
102 /* 59*/ { 76, 1 },
103 /* 60*/ { 77, 0 },
104 /* 61*/ { 83, 0 },
105 /* 62*/ { 84, 1 },
106 /* 63*/ { 85, 0 },
107 /* 64*/ { 86, 1 },
108 /* 65*/ { 87, 0 },
109 /* 66*/ { 99, 0 },
110 /* 67*/ { 100, 1 },
111 /* 68*/ { 101, 0 },
112 /* 69*/ { 110, 0 },
113 /* 70*/ { 119, 0 },
114 /* 71*/ { 120, 1 },
115 /* 72*/ { 121, 0 },
116 /* 73*/ { 130, 0 },
117 /* 74*/ { 131, 0 },
118 /* 75*/ { 132, 1 },
119 /* 76*/ { 133, 0 },
120 /* 77*/ { 147, 0 },
121 /* 78*/ { 148, 1 },
122 /* 79*/ { 149, 0 },
123 /* 80*/ { 150, 0 },
124 /* 81*/ { 151, 0 },
125 /* 82*/ { 152, 1 },
126 /* 83*/ { 153, 0 },
127 /* 84*/ { 154, 0 },
128 /* 85*/ { 155, 0 },
129 /* 86*/ { 156, 1 },
130 /* 87*/ { 157, 0 },
131 /* 88*/ { 158, 1 },
132 /* 89*/ { 159, 0 },
133 /* 90*/ { 160, 0 },
134 /* 91*/ { 161, 0 },
135 /* 92*/ { 162, 1 },
136 /* 93*/ { 163, 0 },
137 /* 94*/ { 169, 0 },
138 /* 95*/ { 170, 1 },
139 /* 96*/ { 171, 0 },
140 /* 97*/ { 177, 0 },
141 /* 98*/ { 178, 1 },
142 /* 99*/ { 179, 0 },
143 /*100*/ { 180, 1 },
144 /*101*/ { 181, 0 },
145 /*102*/ { 190, 0 },
146 /*103*/ { 191, 1 },
147 /*104*/ { 192, 1 },
148 /*105*/ { 193, 0 },
149 /*106*/ { 200, 0 },
150 /*107*/ { 210, 0 },
151 /*108*/ { 220, 0 },
152 /*109*/ { 230, 0 },
153 /*110*/ { 231, 1 },
154 /*111*/ { 232, 1 },
155 /*112*/ { 233, 1 },
156 /*113*/ { 234, 1 },
157 /*114*/ { 235, 0 },
158 /*115*/ { 236, 0 },
159 /*116*/ { 237, 0 },
160 /*117*/ { 238, 1 },
161 /*118*/ { 239, 1 },
162 /*119*/ { 240, 0 },
163 /*120*/ { 241, 0 },
164 /*121*/ { 242, 1 },
165 /*122*/ { 243, 0 },
166 /*123*/ { 244, 0 },
167 /*124*/ { 245, 0 },
168 /*125*/ { 246, 1 },
169 /*126*/ { 247, 0 },
170 /*127*/ { 248, 1 },
171 /*128*/ { 249, 0 },
172 /*129*/ { 250, 1 },
173 /*130*/ { 251, 0 },
174 /*131*/ { 259, 0 },
175 /*132*/ { 260, 1 },
176 /*133*/ { 261, 0 },
177 /*134*/ { 269, 0 },
178 /*135*/ { 270, 1 },
179 /*136*/ { 271, 0 },
180 /*137*/ { 280, 0 },
181 /*138*/ { 287, 0 },
182 /*139*/ { 288, 1 },
183 /*140*/ { 289, 0 },
184 /*141*/ { 290, 0 },
185 /*142*/ { 291, 0 },
186 /*143*/ { 292, 1 },
187 /*144*/ { 293, 0 },
188 /*145*/ { 299, 0 },
189 /*146*/ { 300, 1 },
190 /*147*/ { 301, 0 },
191 /*148*/ { 310, 0 },
192 /*149*/ { 319, 0 },
193 /*150*/ { 320, 1 },
194 /*151*/ { 321, 0 },
195 /*152*/ { 322, 0 },
196 /*153*/ { 323, 0 },
197 /*154*/ { 324, 1 },
198 /*155*/ { 325, 0 },
199 /*156*/ { 330, 0 },
200 /*157*/ { 339, 0 },
201 /*158*/ { 340, 1 },
202 /*159*/ { 341, 0 },
203 /*160*/ { 350, 0 },
204 /*161*/ { 367, 0 },
205 /*162*/ { 368, 1 },
206 /*163*/ { 369, 0 },
207 /*164*/ { 370, 0 },
208 /*165*/ { 379, 0 },
209 /*166*/ { 380, 1 },
210 /*167*/ { 381, 0 },
211 /*168*/ { 397, 0 },
212 /*169*/ { 398, 1 },
213 /*170*/ { 399, 0 },
214 /*171*/ { 400, 1 },
215 /*172*/ { 401, 0 },
216 /*173*/ { 409, 0 },
217 /*174*/ { 410, 1 },
218 /*175*/ { 411, 0 },
219 /*176*/ { 426, 1 },
220 /*177*/ { 427, 0 },
221 /*178*/ { 428, 1 },
222 /*179*/ { 429, 0 },
223 /*180*/ { 430, 1 },
224 /*181*/ { 431, 0 },
225 /*182*/ { 432, 0 },
226 /*183*/ { 433, 0 },
227 /*184*/ { 434, 1 },
228 /*185*/ { 435, 0 },
229 /*186*/ { 436, 0 },
230 /*187*/ { 437, 0 },
231 /*188*/ { 438, 1 },
232 /*189*/ { 439, 0 },
233 /*190*/ { 440, 1 },
234 /*191*/ { 441, 0 },
235 /*192*/ { 442, 1 },
236 /*193*/ { 443, 0 },
237 /*194*/ { 449, 0 },
238 /*195*/ { 450, 1 },
239 /*196*/ { 451, 0 },
240 /*197*/ { 460, 0 },
241 /*198*/ { 469, 0 },
242 /*199*/ { 470, 1 },
243 /*200*/ { 471, 0 },
244 /*201*/ { 479, 0 },
245 /*202*/ { 480, 1 },
246 /*203*/ { 481, 0 },
247 /*204*/ { 490, 0 },
248 /*205*/ { 497, 0 },
249 /*206*/ { 498, 1 },
250 /*207*/ { 499, 1 },
251 /*208*/ { 500, 1 },
252 /*209*/ { 501, 0 },
253 /*210*/ { 502, 0 },
254 /*211*/ { 503, 0 },
255 /*212*/ { 504, 1 },
256 /*213*/ { 505, 0 },
257 /*214*/ { 510, 0 },
258 /*215*/ { 519, 0 },
259 /*216*/ { 520, 1 },
260 /*217*/ { 521, 0 },
261 /*218*/ { 530, 0 },
262 /*219*/ { 531, 1 },
263 /*220*/ { 532, 0 },
264 /*221*/ { 539, 0 },
265 /*222*/ { 540, 1 },
266 /*223*/ { 541, 0 },
267 /*224*/ { 550, 0 },
268 /*225*/ { 561, 0 },
269 /*226*/ { 562, 1 },
270 /*227*/ { 563, 0 },
271 /*228*/ { 564, 0 },
272 /*229*/ { 565, 0 },
273 /*230*/ { 566, 1 },
274 /*231*/ { 567, 0 },
275 /*232*/ { 568, 0 },
276 /*233*/ { 569, 0 },
277 /*234*/ { 570, 1 },
278 /*235*/ { 571, 0 },
279 /*236*/ { 579, 0 },
280 /*237*/ { 580, 1 },
281 /*238*/ { 581, 1 },
282 /*239*/ { 582, 0 },
283 /*240*/ { 590, 0 },
284 /*241*/ { 599, 0 },
285 /*242*/ { 600, 1 },
286 /*243*/ { 601, 0 },
287 /*244*/ { 611, 0 },
288 /*245*/ { 612, 1 },
289 /*246*/ { 613, 0 },
290 /*247*/ { 614, 0 },
291 /*248*/ { 615, 0 },
292 /*249*/ { 616, 1 },
293 /*250*/ { 617, 0 },
294 /*251*/ { 618, 0 },
295 /*252*/ { 619, 0 },
296 /*253*/ { 620, 1 },
297 /*254*/ { 621, 0 },
298 /*255*/ { 630, 1 },
299 /*256*/ { 640, 0 },
300 /*257*/ { 650, 0 },
301 /*258*/ { 658, 0 },
302 /*259*/ { 659, 1 },
303 /*260*/ { 660, 1 },
304 /*261*/ { 661, 0 },
305 /*262*/ { 677, 0 },
306 /*263*/ { 678, 1 },
307 /*264*/ { 679, 0 },
308 /*265*/ { 680, 0 },
309 /*266*/ { 690, 1 },
310 /*267*/ { 700, 0 },
311 /*268*/ { 701, 0 },
312 /*269*/ { 702, 1 },
313 /*270*/ { 703, 1 },
314 /*271*/ { 704, 1 },
315 /*272*/ { 705, 1 },
316 /*273*/ { 706, 1 },
317 /*274*/ { 707, 0 },
318 /*275*/ { 708, 0 },
319 /*276*/ { 709, 0 },
320 /*277*/ { 710, 1 },
321 /*278*/ { 711, 0 },
322 /*279*/ { 747, 0 },
323 /*280*/ { 748, 1 },
324 /*281*/ { 749, 0 },
325 /*282*/ { 750, 0 },
326 /*283*/ { 751, 0 },
327 /*284*/ { 752, 1 },
328 /*285*/ { 753, 0 },
329 /*286*/ { 791, 0 },
330 /*287*/ { 792, 1 },
331 /*288*/ { 793, 0 },
332 /*289*/ { 794, 0 },
333 /*290*/ { 795, 1 },
334 /*291*/ { 796, 1 },
335 /*292*/ { 797, 0 },
336 /*293*/ { 798, 1 },
337 /*294*/ { 799, 0 },
338 /*295*/ { 800, 1 },
339 /*296*/ { 801, 0 },
340 /*297*/ { 802, 0 },
341 /*298*/ { 803, 0 },
342 /*299*/ { 804, 1 },
343 /*300*/ { 805, 0 },
344 /*301*/ { 806, 0 },
345 /*302*/ { 807, 1 },
346 /*303*/ { 808, 0 },
347 /*304*/ { 830, 0 },
348 /*305*/ { 831, 1 },
349 /*306*/ { 832, 1 },
350 /*307*/ { 833, 1 },
351 /*308*/ { 834, 1 },
352 /*309*/ { 835, 0 },
353 /*310*/ { 880, 0 },
354 /*311*/ { 881, 0 },
355 /*312*/ { 882, 1 },
356 /*313*/ { 883, 0 },
357 /*314*/ { 884, 0 },
358 /*315*/ { 885, 0 },
359 /*316*/ { 886, 0 },
360 /*317*/ { 887, 1 },
361 /*318*/ { 888, 0 },
362 /*319*/ { 889, 0 },
363 /*320*/ { 890, 0 },
364 /*321*/ { 891, 0 },
365 /*322*/ { 892, 0 },
366 /*323*/ { 893, 0 },
367 /*324*/ { 894, 1 },
368 /*325*/ { 895, 0 },
369 /*326*/ { 896, 0 },
370 /*327*/ { 897, 0 },
371 /*328*/ { 898, 0 },
372 /*329*/ { 899, 0 },
373 /*330*/ { 900, 0 },
374 /*331*/ { 999, 0 },
375 /*332*/ { 2000, 0 },
376 };
377 int data_size = ARRAY_SIZE(data);
378 int i, ret;
379
380 testStart("test_numeric");
381
382 for (i = 0; i < data_size; i++) {
383
384 if (testContinue(p_ctx, i)) continue;
385
386 ret = iso3166_numeric(data[i].data);
387 assert_equal(ret, data[i].ret, "i:%d ret %d != %d\n", i, ret, data[i].ret);
388 }
389
390 testFinish();
391 }
392
393 /* Binary chop version: Whether ISO 3166-1 numeric */
394 static int bc_iso3166_numeric(int cc) {
395 static const short codes[249] = {
396 /*AFG*/ 4, /*ALB*/ 8, /*ATA*/ 10, /*DZA*/ 12, /*ASM*/ 16, /*AND*/ 20, /*AGO*/ 24, /*ATG*/ 28, /*AZE*/ 31, /*ARG*/ 32,
397 /*AUS*/ 36, /*AUT*/ 40, /*BHS*/ 44, /*BHR*/ 48, /*BGD*/ 50, /*ARM*/ 51, /*BRB*/ 52, /*BEL*/ 56, /*BMU*/ 60, /*BTN*/ 64,
398 /*BOL*/ 68, /*BIH*/ 70, /*BWA*/ 72, /*BVT*/ 74, /*BRA*/ 76, /*BLZ*/ 84, /*IOT*/ 86, /*SLB*/ 90, /*VGB*/ 92, /*BRN*/ 96,
399 /*BGR*/ 100, /*MMR*/ 104, /*BDI*/ 108, /*BLR*/ 112, /*KHM*/ 116, /*CMR*/ 120, /*CAN*/ 124, /*CPV*/ 132, /*CYM*/ 136, /*CAF*/ 140,
400 /*LKA*/ 144, /*TCD*/ 148, /*CHL*/ 152, /*CHN*/ 156, /*TWN*/ 158, /*CXR*/ 162, /*CCK*/ 166, /*COL*/ 170, /*COM*/ 174, /*MYT*/ 175,
401 /*COG*/ 178, /*COD*/ 180, /*COK*/ 184, /*CRI*/ 188, /*HRV*/ 191, /*CUB*/ 192, /*CYP*/ 196, /*CZE*/ 203, /*BEN*/ 204, /*DNK*/ 208,
402 /*DMA*/ 212, /*DOM*/ 214, /*ECU*/ 218, /*SLV*/ 222, /*GNQ*/ 226, /*ETH*/ 231, /*ERI*/ 232, /*EST*/ 233, /*FRO*/ 234, /*FLK*/ 238,
403 /*SGS*/ 239, /*FJI*/ 242, /*FIN*/ 246, /*ALA*/ 248, /*FRA*/ 250, /*GUF*/ 254, /*PYF*/ 258, /*ATF*/ 260, /*DJI*/ 262, /*GAB*/ 266,
404 /*GEO*/ 268, /*GMB*/ 270, /*PSE*/ 275, /*DEU*/ 276, /*GHA*/ 288, /*GIB*/ 292, /*KIR*/ 296, /*GRC*/ 300, /*GRL*/ 304, /*GRD*/ 308,
405 /*GLP*/ 312, /*GUM*/ 316, /*GTM*/ 320, /*GIN*/ 324, /*GUY*/ 328, /*HTI*/ 332, /*HMD*/ 334, /*VAT*/ 336, /*HND*/ 340, /*HKG*/ 344,
406 /*HUN*/ 348, /*ISL*/ 352, /*IND*/ 356, /*IDN*/ 360, /*IRN*/ 364, /*IRQ*/ 368, /*IRL*/ 372, /*ISR*/ 376, /*ITA*/ 380, /*CIV*/ 384,
407 /*JAM*/ 388, /*JPN*/ 392, /*KAZ*/ 398, /*JOR*/ 400, /*KEN*/ 404, /*PRK*/ 408, /*KOR*/ 410, /*KWT*/ 414, /*KGZ*/ 417, /*LAO*/ 418,
408 /*LBN*/ 422, /*LSO*/ 426, /*LVA*/ 428, /*LBR*/ 430, /*LBY*/ 434, /*LIE*/ 438, /*LTU*/ 440, /*LUX*/ 442, /*MAC*/ 446, /*MDG*/ 450,
409 /*MWI*/ 454, /*MYS*/ 458, /*MDV*/ 462, /*MLI*/ 466, /*MLT*/ 470, /*MTQ*/ 474, /*MRT*/ 478, /*MUS*/ 480, /*MEX*/ 484, /*MCO*/ 492,
410 /*MNG*/ 496, /*MDA*/ 498, /*MNE*/ 499, /*MSR*/ 500, /*MAR*/ 504, /*MOZ*/ 508, /*OMN*/ 512, /*NAM*/ 516, /*NRU*/ 520, /*NPL*/ 524,
411 /*NLD*/ 528, /*CUW*/ 531, /*ABW*/ 533, /*SXM*/ 534, /*BES*/ 535, /*NCL*/ 540, /*VUT*/ 548, /*NZL*/ 554, /*NIC*/ 558, /*NER*/ 562,
412 /*NGA*/ 566, /*NIU*/ 570, /*NFK*/ 574, /*NOR*/ 578, /*MNP*/ 580, /*UMI*/ 581, /*FSM*/ 583, /*MHL*/ 584, /*PLW*/ 585, /*PAK*/ 586,
413 /*PAN*/ 591, /*PNG*/ 598, /*PRY*/ 600, /*PER*/ 604, /*PHL*/ 608, /*PCN*/ 612, /*POL*/ 616, /*PRT*/ 620, /*GNB*/ 624, /*TLS*/ 626,
414 /*PRI*/ 630, /*QAT*/ 634, /*REU*/ 638, /*ROU*/ 642, /*RUS*/ 643, /*RWA*/ 646, /*BLM*/ 652, /*SHN*/ 654, /*KNA*/ 659, /*AIA*/ 660,
415 /*LCA*/ 662, /*MAF*/ 663, /*SPM*/ 666, /*VCT*/ 670, /*SMR*/ 674, /*STP*/ 678, /*SAU*/ 682, /*SEN*/ 686, /*SRB*/ 688, /*SYC*/ 690,
416 /*SLE*/ 694, /*SGP*/ 702, /*SVK*/ 703, /*VNM*/ 704, /*SVN*/ 705, /*SOM*/ 706, /*ZAF*/ 710, /*ZWE*/ 716, /*ESP*/ 724, /*SSD*/ 728,
417 /*SDN*/ 729, /*ESH*/ 732, /*SUR*/ 740, /*SJM*/ 744, /*SWZ*/ 748, /*SWE*/ 752, /*CHE*/ 756, /*SYR*/ 760, /*TJK*/ 762, /*THA*/ 764,
418 /*TGO*/ 768, /*TKL*/ 772, /*TON*/ 776, /*TTO*/ 780, /*ARE*/ 784, /*TUN*/ 788, /*TUR*/ 792, /*TKM*/ 795, /*TCA*/ 796, /*TUV*/ 798,
419 /*UGA*/ 800, /*UKR*/ 804, /*MKD*/ 807, /*EGY*/ 818, /*GBR*/ 826, /*GGY*/ 831, /*JEY*/ 832, /*IMN*/ 833, /*TZA*/ 834, /*USA*/ 840,
420 /*VIR*/ 850, /*BFA*/ 854, /*URY*/ 858, /*UZB*/ 860, /*VEN*/ 862, /*WLF*/ 876, /*WSM*/ 882, /*YEM*/ 887, /*ZMB*/ 894,
421 };
422
423 int s = 0, e = ARRAY_SIZE(codes) - 1;
424
425 while (s <= e) {
426 int m = (s + e) / 2;
427 if (codes[m] < cc) {
428 s = m + 1;
429 } else if (codes[m] > cc) {
430 e = m - 1;
431 } else {
432 return 1;
433 }
434 }
435
436 return 0;
437 }
438
439 static void test_numeric_bc(const testCtx *const p_ctx) {
440
441 int i, ret, bc_ret;
442
443 testStart("test_numeric_bc");
444
445 for (i = 0; i < 1001; i++) {
446 if (testContinue(p_ctx, i)) continue;
447
448 ret = iso3166_numeric(i);
449 bc_ret = bc_iso3166_numeric(i);
450 assert_equal(ret, bc_ret, "i:%d ret %d != bc_ret %d\n", i, ret, bc_ret);
451 }
452
453 testFinish();
454 }
455
456 static void test_alpha2(const testCtx *const p_ctx) {
457
458 struct item {
459 const char *data;
460 int ret;
461 };
462 /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */
463 struct item data[] = {
464 /* 0*/ { "", 0 },
465 /* 1*/ { "A", 0 },
466 /* 2*/ { "aa", 0 },
467 /* 3*/ { "AA", 0 },
468 /* 4*/ { "AB", 0 },
469 /* 5*/ { "AC", 0 },
470 /* 6*/ { "AD", 1 },
471 /* 7*/ { "ad", 0 },
472 /* 8*/ { "AE", 1 },
473 /* 9*/ { "AF", 1 },
474 /* 10*/ { "AG", 1 },
475 /* 11*/ { "AH", 0 },
476 /* 12*/ { "AI", 1 },
477 /* 13*/ { "AJ", 0 },
478 /* 14*/ { "AP", 0 },
479 /* 15*/ { "AQ", 1 },
480 /* 16*/ { "AR", 1 },
481 /* 17*/ { "AS", 1 },
482 /* 18*/ { "AT", 1 },
483 /* 19*/ { "AU", 1 },
484 /* 20*/ { "AV", 0 },
485 /* 21*/ { "AW", 1 },
486 /* 22*/ { "AX", 1 },
487 /* 23*/ { "AY", 0 },
488 /* 24*/ { "AZ", 1 },
489 /* 25*/ { "BA", 1 },
490 /* 26*/ { "BB", 1 },
491 /* 27*/ { "BC", 0 },
492 /* 28*/ { "BD", 1 },
493 /* 29*/ { "BX", 0 },
494 /* 30*/ { "BY", 1 },
495 /* 31*/ { "BZ", 1 },
496 /* 32*/ { "CA", 1 },
497 /* 33*/ { "CB", 0 },
498 /* 34*/ { "CC", 1 },
499 /* 35*/ { "CD", 1 },
500 /* 36*/ { "CE", 0 },
501 /* 37*/ { "CT", 0 },
502 /* 38*/ { "CU", 1 },
503 /* 39*/ { "CV", 1 },
504 /* 40*/ { "CW", 1 },
505 /* 41*/ { "CX", 1 },
506 /* 42*/ { "CY", 1 },
507 /* 43*/ { "CZ", 1 },
508 /* 44*/ { "DA", 0 },
509 /* 45*/ { "DD", 0 },
510 /* 46*/ { "DE", 1 },
511 /* 47*/ { "DF", 0 },
512 /* 48*/ { "DY", 0 },
513 /* 49*/ { "DZ", 1 },
514 /* 50*/ { "EA", 0 },
515 /* 51*/ { "EB", 0 },
516 /* 52*/ { "EC", 1 },
517 /* 53*/ { "ED", 0 },
518 /* 54*/ { "EZ", 0 },
519 /* 55*/ { "FA", 0 },
520 /* 56*/ { "FQ", 0 },
521 /* 57*/ { "FR", 1 },
522 /* 58*/ { "FS", 0 },
523 /* 59*/ { "FZ", 0 },
524 /* 60*/ { "GA", 1 },
525 /* 61*/ { "GB", 1 },
526 /* 62*/ { "GC", 0 },
527 /* 63*/ { "GX", 0 },
528 /* 64*/ { "GY", 1 },
529 /* 65*/ { "GZ", 0 },
530 /* 66*/ { "HA", 0 },
531 /* 67*/ { "HI", 0 },
532 /* 68*/ { "HJ", 0 },
533 /* 69*/ { "HK", 1 },
534 /* 70*/ { "HL", 0 },
535 /* 71*/ { "HZ", 0 },
536 /* 72*/ { "IA", 0 },
537 /* 73*/ { "IC", 0 },
538 /* 74*/ { "ID", 1 },
539 /* 75*/ { "IE", 1 },
540 /* 76*/ { "IF", 0 },
541 /* 77*/ { "IZ", 0 },
542 /* 78*/ { "JA", 0 },
543 /* 79*/ { "JD", 0 },
544 /* 80*/ { "JE", 1 },
545 /* 81*/ { "JF", 0 },
546 /* 82*/ { "JZ", 0 },
547 /* 83*/ { "KA", 0 },
548 /* 84*/ { "KD", 0 },
549 /* 85*/ { "KE", 1 },
550 /* 86*/ { "KF", 0 },
551 /* 87*/ { "KG", 1 },
552 /* 88*/ { "KH", 1 },
553 /* 89*/ { "KI", 1 },
554 /* 90*/ { "KJ", 0 },
555 /* 91*/ { "KX", 0 },
556 /* 92*/ { "KY", 1 },
557 /* 93*/ { "KZ", 1 },
558 /* 94*/ { "LA", 1 },
559 /* 95*/ { "LB", 1 },
560 /* 96*/ { "LC", 1 },
561 /* 97*/ { "LD", 0 },
562 /* 98*/ { "LE", 0 },
563 /* 99*/ { "LX", 0 },
564 /*100*/ { "LY", 1 },
565 /*101*/ { "LZ", 0 },
566 /*102*/ { "MA", 1 },
567 /*103*/ { "MB", 0 },
568 /*104*/ { "MI", 0 },
569 /*105*/ { "MJ", 0 },
570 /*106*/ { "MK", 1 },
571 /*107*/ { "ML", 1 },
572 /*108*/ { "MM", 1 },
573 /*109*/ { "MN", 1 },
574 /*110*/ { "MO", 1 },
575 /*111*/ { "MP", 1 },
576 /*112*/ { "MQ", 1 },
577 /*113*/ { "MR", 1 },
578 /*114*/ { "MS", 1 },
579 /*115*/ { "MT", 1 },
580 /*116*/ { "MU", 1 },
581 /*117*/ { "MV", 1 },
582 /*118*/ { "MW", 1 },
583 /*119*/ { "MX", 1 },
584 /*120*/ { "MY", 1 },
585 /*121*/ { "MZ", 1 },
586 /*122*/ { "NA", 1 },
587 /*123*/ { "NB", 0 },
588 /*124*/ { "NC", 1 },
589 /*125*/ { "NY", 0 },
590 /*126*/ { "NZ", 1 },
591 /*127*/ { "OA", 0 },
592 /*128*/ { "OL", 0 },
593 /*129*/ { "OM", 1 },
594 /*130*/ { "ON", 0 },
595 /*131*/ { "OZ", 0 },
596 /*132*/ { "PA", 1 },
597 /*133*/ { "PB", 0 },
598 /*134*/ { "PQ", 0 },
599 /*135*/ { "PR", 1 },
600 /*136*/ { "PS", 1 },
601 /*137*/ { "PT", 1 },
602 /*138*/ { "PU", 0 },
603 /*139*/ { "PV", 0 },
604 /*140*/ { "PW", 1 },
605 /*141*/ { "PX", 0 },
606 /*142*/ { "PY", 1 },
607 /*143*/ { "PZ", 0 },
608 /*144*/ { "QA", 1 },
609 /*145*/ { "QB", 0 },
610 /*146*/ { "QZ", 0 },
611 /*147*/ { "RA", 0 },
612 /*148*/ { "RC", 0 },
613 /*149*/ { "RD", 0 },
614 /*150*/ { "RE", 1 },
615 /*151*/ { "RF", 0 },
616 /*152*/ { "RZ", 0 },
617 /*153*/ { "SA", 1 },
618 /*154*/ { "SB", 1 },
619 /*155*/ { "SC", 1 },
620 /*156*/ { "SD", 1 },
621 /*157*/ { "SE", 1 },
622 /*158*/ { "SF", 0 },
623 /*159*/ { "SW", 0 },
624 /*160*/ { "SX", 1 },
625 /*161*/ { "SY", 1 },
626 /*162*/ { "SZ", 1 },
627 /*163*/ { "TA", 0 },
628 /*164*/ { "TB", 0 },
629 /*165*/ { "TC", 1 },
630 /*166*/ { "TD", 1 },
631 /*167*/ { "TE", 0 },
632 /*168*/ { "TU", 0 },
633 /*169*/ { "TV", 1 },
634 /*170*/ { "TW", 1 },
635 /*171*/ { "TX", 0 },
636 /*172*/ { "TY", 0 },
637 /*173*/ { "TZ", 1 },
638 /*174*/ { "UA", 1 },
639 /*175*/ { "UB", 0 },
640 /*176*/ { "UX", 0 },
641 /*177*/ { "UY", 1 },
642 /*178*/ { "UZ", 1 },
643 /*179*/ { "VA", 1 },
644 /*180*/ { "VB", 0 },
645 /*181*/ { "VC", 1 },
646 /*182*/ { "VD", 0 },
647 /*183*/ { "VZ", 0 },
648 /*184*/ { "WA", 0 },
649 /*185*/ { "WE", 0 },
650 /*186*/ { "WF", 1 },
651 /*187*/ { "WG", 0 },
652 /*188*/ { "WZ", 0 },
653 /*189*/ { "XA", 0 },
654 /*190*/ { "XZ", 0 },
655 /*191*/ { "YA", 0 },
656 /*192*/ { "YC", 0 },
657 /*193*/ { "YD", 0 },
658 /*194*/ { "YE", 1 },
659 /*195*/ { "YF", 0 },
660 /*196*/ { "YZ", 0 },
661 /*197*/ { "ZA", 1 },
662 /*198*/ { "ZB", 0 },
663 /*199*/ { "ZL", 0 },
664 /*200*/ { "ZM", 1 },
665 /*201*/ { "ZN", 0 },
666 /*202*/ { "ZV", 0 },
667 /*203*/ { "ZW", 1 },
668 /*204*/ { "ZX", 0 },
669 /*205*/ { "ZY", 0 },
670 /*206*/ { "ZZ", 0 },
671 /*207*/ { "Z", 0 },
672 /*208*/ { "zz", 0 },
673 /*209*/ { "0", 0 },
674 /*210*/ { "\001", 0 },
675 /*211*/ { "\177", 0 },
676 /*212*/ { "\200", 0 },
677 /*213*/ { "\377", 0 },
678 };
679 int data_size = ARRAY_SIZE(data);
680 int i, ret;
681
682 testStart("test_alpha2");
683
684 for (i = 0; i < data_size; i++) {
685
686 if (testContinue(p_ctx, i)) continue;
687
688 ret = iso3166_alpha2(data[i].data);
689 assert_equal(ret, data[i].ret, "i:%d ret %d != %d\n", i, ret, data[i].ret);
690 }
691
692 testFinish();
693 }
694
695 /* Binary chop version: Whether ISO 3166-1 alpha2 */
696 static int bc_iso3166_alpha2(const char *cc) {
697 static const char codes[249][2] = {
698 {'A','D'}, {'A','E'}, {'A','F'}, {'A','G'}, {'A','I'}, {'A','L'}, {'A','M'}, {'A','O'}, {'A','Q'}, {'A','R'},
699 {'A','S'}, {'A','T'}, {'A','U'}, {'A','W'}, {'A','X'}, {'A','Z'}, {'B','A'}, {'B','B'}, {'B','D'}, {'B','E'},
700 {'B','F'}, {'B','G'}, {'B','H'}, {'B','I'}, {'B','J'}, {'B','L'}, {'B','M'}, {'B','N'}, {'B','O'}, {'B','Q'},
701 {'B','R'}, {'B','S'}, {'B','T'}, {'B','V'}, {'B','W'}, {'B','Y'}, {'B','Z'}, {'C','A'}, {'C','C'}, {'C','D'},
702 {'C','F'}, {'C','G'}, {'C','H'}, {'C','I'}, {'C','K'}, {'C','L'}, {'C','M'}, {'C','N'}, {'C','O'}, {'C','R'},
703 {'C','U'}, {'C','V'}, {'C','W'}, {'C','X'}, {'C','Y'}, {'C','Z'}, {'D','E'}, {'D','J'}, {'D','K'}, {'D','M'},
704 {'D','O'}, {'D','Z'}, {'E','C'}, {'E','E'}, {'E','G'}, {'E','H'}, {'E','R'}, {'E','S'}, {'E','T'}, {'F','I'},
705 {'F','J'}, {'F','K'}, {'F','M'}, {'F','O'}, {'F','R'}, {'G','A'}, {'G','B'}, {'G','D'}, {'G','E'}, {'G','F'},
706 {'G','G'}, {'G','H'}, {'G','I'}, {'G','L'}, {'G','M'}, {'G','N'}, {'G','P'}, {'G','Q'}, {'G','R'}, {'G','S'},
707 {'G','T'}, {'G','U'}, {'G','W'}, {'G','Y'}, {'H','K'}, {'H','M'}, {'H','N'}, {'H','R'}, {'H','T'}, {'H','U'},
708 {'I','D'}, {'I','E'}, {'I','L'}, {'I','M'}, {'I','N'}, {'I','O'}, {'I','Q'}, {'I','R'}, {'I','S'}, {'I','T'},
709 {'J','E'}, {'J','M'}, {'J','O'}, {'J','P'}, {'K','E'}, {'K','G'}, {'K','H'}, {'K','I'}, {'K','M'}, {'K','N'},
710 {'K','P'}, {'K','R'}, {'K','W'}, {'K','Y'}, {'K','Z'}, {'L','A'}, {'L','B'}, {'L','C'}, {'L','I'}, {'L','K'},
711 {'L','R'}, {'L','S'}, {'L','T'}, {'L','U'}, {'L','V'}, {'L','Y'}, {'M','A'}, {'M','C'}, {'M','D'}, {'M','E'},
712 {'M','F'}, {'M','G'}, {'M','H'}, {'M','K'}, {'M','L'}, {'M','M'}, {'M','N'}, {'M','O'}, {'M','P'}, {'M','Q'},
713 {'M','R'}, {'M','S'}, {'M','T'}, {'M','U'}, {'M','V'}, {'M','W'}, {'M','X'}, {'M','Y'}, {'M','Z'}, {'N','A'},
714 {'N','C'}, {'N','E'}, {'N','F'}, {'N','G'}, {'N','I'}, {'N','L'}, {'N','O'}, {'N','P'}, {'N','R'}, {'N','U'},
715 {'N','Z'}, {'O','M'}, {'P','A'}, {'P','E'}, {'P','F'}, {'P','G'}, {'P','H'}, {'P','K'}, {'P','L'}, {'P','M'},
716 {'P','N'}, {'P','R'}, {'P','S'}, {'P','T'}, {'P','W'}, {'P','Y'}, {'Q','A'}, {'R','E'}, {'R','O'}, {'R','S'},
717 {'R','U'}, {'R','W'}, {'S','A'}, {'S','B'}, {'S','C'}, {'S','D'}, {'S','E'}, {'S','G'}, {'S','H'}, {'S','I'},
718 {'S','J'}, {'S','K'}, {'S','L'}, {'S','M'}, {'S','N'}, {'S','O'}, {'S','R'}, {'S','S'}, {'S','T'}, {'S','V'},
719 {'S','X'}, {'S','Y'}, {'S','Z'}, {'T','C'}, {'T','D'}, {'T','F'}, {'T','G'}, {'T','H'}, {'T','J'}, {'T','K'},
720 {'T','L'}, {'T','M'}, {'T','N'}, {'T','O'}, {'T','R'}, {'T','T'}, {'T','V'}, {'T','W'}, {'T','Z'}, {'U','A'},
721 {'U','G'}, {'U','M'}, {'U','S'}, {'U','Y'}, {'U','Z'}, {'V','A'}, {'V','C'}, {'V','E'}, {'V','G'}, {'V','I'},
722 {'V','N'}, {'V','U'}, {'W','F'}, {'W','S'}, {'Y','E'}, {'Y','T'}, {'Z','A'}, {'Z','M'}, {'Z','W'},
723 };
724
725 int s = 0, e = sizeof(codes) / sizeof(codes[0]) - 1;
726
727 while (s <= e) {
728 int m = (s + e) / 2;
729 int cmp = strncmp(codes[m], cc, 2);
730 if (cmp < 0) {
731 s = m + 1;
732 } else if (cmp > 0) {
733 e = m - 1;
734 } else {
735 return 1;
736 }
737 }
738
739 return 0;
740 }
741
742 static void test_alpha2_bc(const testCtx *const p_ctx) {
743
744 int i, ret, bc_ret;
745 char data[2];
746
747 (void)p_ctx;
748
749 testStart("test_alpha2_bc");
750
751 for (i = 0; i < 128; i++) {
752 int j;
753 for (j = 0; j < 128; j++) {
754 data[0] = i;
755 data[1] = j;
756 ret = iso3166_alpha2(data);
757 bc_ret = bc_iso3166_alpha2(data);
758 assert_equal(ret, bc_ret, "i:%d ret %d != bc_ret %d\n", i, ret, bc_ret);
759 }
760 }
761
762 testFinish();
763 }
764
765 int main(int argc, char *argv[]) {
766
767 testFunction funcs[] = { /* name, func */
768 { "test_numeric", test_numeric },
769 { "test_alpha2", test_alpha2 },
770 { "test_numeric_bc", test_numeric_bc },
771 { "test_alpha2_bc", test_alpha2_bc },
772 };
773
774 testRun(argc, argv, funcs, ARRAY_SIZE(funcs));
775
776 testReport();
777
778 return 0;
779 }
780
781 /* vim: set ts=4 sw=4 et : */