1f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/********************************************************************
2f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * COPYRIGHT:
3f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Copyright (c) 1997-2010, International Business Machines Corporation and
4f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * others. All Rights Reserved.
5f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ********************************************************************/
6f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/*****************************************************************************
7f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*
8f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)* File CLOCTST.C
9f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*
10f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)* Modification History:
11f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*        Name                     Description
12f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*     Madhu Katragadda            Ported for C API
13f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)******************************************************************************
14f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*/
15f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "cloctst.h"
16f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include <stdlib.h>
17f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include <stdio.h>
18f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include <string.h>
19f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "cintltst.h"
20f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "cstring.h"
21f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "uparse.h"
22f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "uresimp.h"
23f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
24f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/putil.h"
25f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/ubrk.h"
26f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/uchar.h"
27f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/ucol.h"
28f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/udat.h"
29f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/uloc.h"
30f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/umsg.h"
31f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/ures.h"
32f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/uset.h"
33f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/ustring.h"
34f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/utypes.h"
35f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/ulocdata.h"
36f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/parseerr.h" /* may not be included with some uconfig switches */
37f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "udbgutil.h"
38f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
39f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
40f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestNullDefault(void);
41f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestNonexistentLanguageExemplars(void);
42f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestLocDataErrorCodeChaining(void);
43f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestLanguageExemplarsFallbacks(void);
44f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
45f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestUnicodeDefines(void);
46f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
47f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void PrintDataTable();
48f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
49f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/*---------------------------------------------------
50f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  table of valid data
51f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --------------------------------------------------- */
52f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define LOCALE_SIZE 9
53f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define LOCALE_INFO_SIZE 28
54f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
55f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static const char* const rawData2[LOCALE_INFO_SIZE][LOCALE_SIZE] = {
56f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* language code */
57f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "en",   "fr",   "ca",   "el",   "no",   "zh",   "de",   "es",  "ja"    },
58f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* script code */
59f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "",     "",     "",     "",     "",     "", "", "", ""  },
60f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* country code */
61f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "US",   "FR",   "ES",   "GR",   "NO",   "CN", "DE", "", "JP"    },
62f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* variant code */
63f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "",     "",     "",     "",     "NY",   "", "", "", ""      },
64f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* full name */
65f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "en_US",    "fr_FR",    "ca_ES",
66f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "el_GR",    "no_NO_NY", "zh_Hans_CN",
67f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "de_DE@collation=phonebook", "es@collation=traditional",  "ja_JP@calendar=japanese" },
68f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* ISO-3 language */
69f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "eng",  "fra",  "cat",  "ell",  "nor",  "zho", "deu", "spa", "jpn"   },
70f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* ISO-3 country */
71f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "USA",  "FRA",  "ESP",  "GRC",  "NOR",  "CHN", "DEU", "", "JPN"   },
72f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* LCID */
73f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "409", "40c", "403", "408", "814",  "804", "10407", "40a", "411"     },
74f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
75f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* display language (English) */
76f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "English",  "French",   "Catalan", "Greek",    "Norwegian", "Chinese", "German", "Spanish", "Japanese"    },
77f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* display script code (English) */
78f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "",     "",     "",     "",     "",     "Simplified Han", "", "", ""       },
79f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* display country (English) */
80f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "United States",    "France",   "Spain",  "Greece",   "Norway", "China", "Germany", "", "Japan"       },
81f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* display variant (English) */
82f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "",     "",     "",     "",     "NY",  "", "", "", ""       },
83f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* display name (English) */
84f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "English (United States)", "French (France)", "Catalan (Spain)",
85f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "Greek (Greece)", "Norwegian (Norway, NY)", "Chinese (Simplified Han, China)",
86f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "German (Germany, Collation=Phonebook Sort Order)", "Spanish (Collation=Traditional Sort Order)", "Japanese (Japan, Calendar=Japanese Calendar)" },
87f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
88f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* display language (French) */
89f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "anglais",  "fran\\u00E7ais",   "catalan", "grec",    "norv\\u00E9gien",    "chinois", "allemand", "espagnol", "japonais"     },
90f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* display script code (French) */
91f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "",     "",     "",     "",     "",     "id\\u00e9ogrammes han simplifi\\u00e9s", "", "", ""         },
92f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* display country (French) */
93f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "\\u00C9tats-Unis",    "France",   "Espagne",  "Gr\\u00E8ce",   "Norv\\u00E8ge",    "Chine", "Allemagne", "", "Japon"       },
94f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* display variant (French) */
95f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "",     "",     "",     "",     "NY",   "", "", "", ""       },
96f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* display name (French) */
97f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "anglais (\\u00C9tats-Unis)", "fran\\u00E7ais (France)", "catalan (Espagne)",
98f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "grec (Gr\\u00E8ce)", "norv\\u00E9gien (Norv\\u00E8ge, NY)",  "chinois (id\\u00e9ogrammes han simplifi\\u00e9s, Chine)",
99f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "allemand (Allemagne, Ordonnancement=Ordre de l\\u2019annuaire)", "espagnol (Ordonnancement=Ordre traditionnel)", "japonais (Japon, Calendrier=Calendrier japonais)" },
100f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
101f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* display language (Catalan) */
102f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "angl\\u00E8s", "franc\\u00E8s", "catal\\u00E0", "grec",  "noruec", "xin\\u00E8s", "alemany", "espanyol", "japon\\u00E8s"    },
103f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* display script code (Catalan) */
104f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "",     "",     "",     "",     "",     "xin\\u00e8s simplificat", "", "", ""         },
105f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* display country (Catalan) */
106f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "Estats Units", "Fran\\u00E7a", "Espanya",  "Gr\\u00E8cia", "Noruega",  "Xina", "Alemanya", "", "Jap\\u00F3"    },
107f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* display variant (Catalan) */
108f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "", "", "",                    "", "NY",    "", "", "", ""    },
109f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* display name (Catalan) */
110f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "angl\\u00E8s (Estats Units)", "franc\\u00E8s (Fran\\u00E7a)", "catal\\u00E0 (Espanya)",
111f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "grec (Gr\\u00E8cia)", "noruec (Noruega, NY)", "xin\\u00E8s (xin\\u00e8s simplificat, Xina)",
112f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "alemany (Alemanya, ordre alfab\\u00e8tic=ordre de la guia telef\\u00F2nica)", "espanyol (ordre alfab\\u00e8tic=ordre tradicional)", "japon\\u00E8s (Jap\\u00F3, calendari=calendari japon\\u00e8s)" },
113f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
114f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* display language (Greek) */
115f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
116f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u0391\\u03b3\\u03b3\\u03bb\\u03b9\\u03ba\\u03ac",
117f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u0393\\u03b1\\u03bb\\u03bb\\u03b9\\u03ba\\u03ac",
118f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u039a\\u03b1\\u03c4\\u03b1\\u03bb\\u03b1\\u03bd\\u03b9\\u03ba\\u03ac",
119f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u0395\\u03bb\\u03bb\\u03b7\\u03bd\\u03b9\\u03ba\\u03ac",
120f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u039d\\u03bf\\u03c1\\u03b2\\u03b7\\u03b3\\u03b9\\u03ba\\u03ac",
121f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u039A\\u03B9\\u03BD\\u03B5\\u03B6\\u03B9\\u03BA\\u03AC",
122f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u0393\\u03B5\\u03C1\\u03BC\\u03B1\\u03BD\\u03B9\\u03BA\\u03AC",
123f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u0399\\u03C3\\u03C0\\u03B1\\u03BD\\u03B9\\u03BA\\u03AC",
124f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u0399\\u03B1\\u03C0\\u03C9\\u03BD\\u03B9\\u03BA\\u03AC"
125f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    },
126f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* display script code (Greek) */
127f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
128f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "",     "",     "",     "",     "", "\\u0391\\u03c0\\u03bb\\u03bf\\u03c0\\u03bf\\u03b9\\u03b7\\u03bc\\u03ad\\u03bd\\u03bf \\u039a\\u03b9\\u03bd\\u03b5\\u03b6\\u03b9\\u03ba\\u03cc", "", "", "" },
129f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* display country (Greek) */
130f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
131f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u0397\\u03BD\\u03C9\\u03BC\\u03AD\\u03BD\\u03B5\\u03C2 \\u03A0\\u03BF\\u03BB\\u03B9\\u03C4\\u03B5\\u03AF\\u03B5\\u03C2 \\u03C4\\u03B7\\u03C2 \\u0391\\u03BC\\u03B5\\u03C1\\u03B9\\u03BA\\u03AE\\u03C2",
132f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u0393\\u03b1\\u03bb\\u03bb\\u03af\\u03b1",
133f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u0399\\u03c3\\u03c0\\u03b1\\u03bd\\u03af\\u03b1",
134f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u0395\\u03bb\\u03bb\\u03ac\\u03b4\\u03b1",
135f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u039d\\u03bf\\u03c1\\u03b2\\u03b7\\u03b3\\u03af\\u03b1",
136f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u039A\\u03AF\\u03BD\\u03B1",
137f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u0393\\u03B5\\u03C1\\u03BC\\u03B1\\u03BD\\u03AF\\u03B1",
138f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "",
139f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u0399\\u03B1\\u03C0\\u03C9\\u03BD\\u03AF\\u03B1"
140f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    },
141f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* display variant (Greek) */
142f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {   "", "", "", "", "NY", "", "", "", ""    }, /* TODO: currently there is no translation for NY in Greek fix this test when we have it */
143f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* display name (Greek) */
144f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
145f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u0391\\u03b3\\u03b3\\u03bb\\u03b9\\u03ba\\u03ac (\\u0397\\u03BD\\u03C9\\u03BC\\u03AD\\u03BD\\u03B5\\u03C2 \\u03A0\\u03BF\\u03BB\\u03B9\\u03C4\\u03B5\\u03AF\\u03B5\\u03C2 \\u03C4\\u03B7\\u03C2 \\u0391\\u03BC\\u03B5\\u03C1\\u03B9\\u03BA\\u03AE\\u03C2)",
146f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u0393\\u03b1\\u03bb\\u03bb\\u03b9\\u03ba\\u03ac (\\u0393\\u03b1\\u03bb\\u03bb\\u03af\\u03b1)",
147f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u039a\\u03b1\\u03c4\\u03b1\\u03bb\\u03b1\\u03bd\\u03b9\\u03ba\\u03ac (\\u0399\\u03c3\\u03c0\\u03b1\\u03bd\\u03af\\u03b1)",
148f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u0395\\u03bb\\u03bb\\u03b7\\u03bd\\u03b9\\u03ba\\u03ac (\\u0395\\u03bb\\u03bb\\u03ac\\u03b4\\u03b1)",
149f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u039d\\u03bf\\u03c1\\u03b2\\u03b7\\u03b3\\u03b9\\u03ba\\u03ac (\\u039d\\u03bf\\u03c1\\u03b2\\u03b7\\u03b3\\u03af\\u03b1, NY)",
150f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u039A\\u03B9\\u03BD\\u03B5\\u03B6\\u03B9\\u03BA\\u03AC (\\u0391\\u03c0\\u03bb\\u03bf\\u03c0\\u03bf\\u03b9\\u03b7\\u03bc\\u03ad\\u03bd\\u03bf \\u039a\\u03b9\\u03bd\\u03b5\\u03b6\\u03b9\\u03ba\\u03cc, \\u039A\\u03AF\\u03BD\\u03B1)",
151f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u0393\\u03B5\\u03C1\\u03BC\\u03B1\\u03BD\\u03B9\\u03BA\\u03AC (\\u0393\\u03B5\\u03C1\\u03BC\\u03B1\\u03BD\\u03AF\\u03B1, \\u03C4\\u03B1\\u03BA\\u03C4\\u03BF\\u03C0\\u03BF\\u03AF\\u03B7\\u03C3\\u03B7=\\u03A3\\u03B5\\u03B9\\u03C1\\u03AC \\u03C4\\u03B1\\u03BE\\u03B9\\u03BD\\u03CC\\u03BC\\u03B7\\u03C3\\u03B7\\u03C2 \\u03C4\\u03B7\\u03BB\\u03B5\\u03C6\\u03C9\\u03BD\\u03B9\\u03BA\\u03BF\\u03CD \\u03BA\\u03B1\\u03C4\\u03B1\\u03BB\\u03CC\\u03B3\\u03BF\\u03C5)",
152f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u0399\\u03C3\\u03C0\\u03B1\\u03BD\\u03B9\\u03BA\\u03AC (\\u03C4\\u03B1\\u03BA\\u03C4\\u03BF\\u03C0\\u03BF\\u03AF\\u03B7\\u03C3\\u03B7=\\u03A0\\u03B1\\u03C1\\u03B1\\u03B4\\u03BF\\u03C3\\u03B9\\u03B1\\u03BA\\u03AE \\u03C3\\u03B5\\u03B9\\u03C1\\u03AC \\u03C4\\u03B1\\u03BE\\u03B9\\u03BD\\u03CC\\u03BC\\u03B7\\u03C3\\u03B7\\u03C2)",
153f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "\\u0399\\u03B1\\u03C0\\u03C9\\u03BD\\u03B9\\u03BA\\u03AC (\\u0399\\u03B1\\u03C0\\u03C9\\u03BD\\u03AF\\u03B1, \\u03B7\\u03BC\\u03B5\\u03C1\\u03BF\\u03BB\\u03CC\\u03B3\\u03B9\\u03BF=\\u0399\\u03B1\\u03C0\\u03C9\\u03BD\\u03B9\\u03BA\\u03CC \\u03B7\\u03BC\\u03B5\\u03C1\\u03BF\\u03BB\\u03CC\\u03B3\\u03B9\\u03BF)"
154f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
155f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)};
156f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
157f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static UChar*** dataTable=0;
158f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)enum {
159f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ENGLISH = 0,
160f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    FRENCH = 1,
161f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    CATALAN = 2,
162f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    GREEK = 3,
163f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    NORWEGIAN = 4
164f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)};
165f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
166f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)enum {
167f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    LANG = 0,
168f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    SCRIPT = 1,
169f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    CTRY = 2,
170f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    VAR = 3,
171f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    NAME = 4,
172f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    LANG3 = 5,
173f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    CTRY3 = 6,
174f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    LCID = 7,
175f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    DLANG_EN = 8,
176f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    DSCRIPT_EN = 9,
177f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    DCTRY_EN = 10,
178f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    DVAR_EN = 11,
179f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    DNAME_EN = 12,
180f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    DLANG_FR = 13,
181f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    DSCRIPT_FR = 14,
182f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    DCTRY_FR = 15,
183f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    DVAR_FR = 16,
184f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    DNAME_FR = 17,
185f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    DLANG_CA = 18,
186f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    DSCRIPT_CA = 19,
187f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    DCTRY_CA = 20,
188f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    DVAR_CA = 21,
189f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    DNAME_CA = 22,
190f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    DLANG_EL = 23,
191f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    DSCRIPT_EL = 24,
192f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    DCTRY_EL = 25,
193f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    DVAR_EL = 26,
194f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    DNAME_EL = 27
195f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)};
196f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
197f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define TESTCASE(name) addTest(root, &name, "tsutil/cloctst/" #name)
198f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
199f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void addLocaleTest(TestNode** root);
200f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
201f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void addLocaleTest(TestNode** root)
202f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
203f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestObsoleteNames); /* srl- move */
204f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestBasicGetters);
205f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestNullDefault);
206f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestPrefixes);
207f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestSimpleResourceInfo);
208f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestDisplayNames);
209f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestGetAvailableLocales);
210f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestDataDirectory);
211f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if !UCONFIG_NO_FILE_IO && !UCONFIG_NO_LEGACY_CONVERSION
212f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestISOFunctions);
213f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
214f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestISO3Fallback);
215f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestUninstalledISO3Names);
216f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestSimpleDisplayNames);
217f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestVariantParsing);
218f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestKeywordVariants);
219f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestKeywordVariantParsing);
220f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestCanonicalization);
221f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestKeywordSet);
222f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestKeywordSetError);
223f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestDisplayKeywords);
224f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestDisplayKeywordValues);
225f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestGetBaseName);
226f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if !UCONFIG_NO_FILE_IO
227f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestGetLocale);
228f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
229f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestDisplayNameWarning);
230f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestNonexistentLanguageExemplars);
231f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestLocDataErrorCodeChaining);
232f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestLanguageExemplarsFallbacks);
233f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestCalendar);
234f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestDateFormat);
235f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestCollation);
236f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestULocale);
237f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestUResourceBundle);
238f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestDisplayName);
239f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestAcceptLanguage);
240f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestGetLocaleForLCID);
241f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestOrientation);
242f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestLikelySubtags);
243f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestToLanguageTag);
244f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestForLanguageTag);
245f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestTrailingNull);
246f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    TESTCASE(TestUnicodeDefines);
247f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
248f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
249f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
250f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* testing uloc(), uloc_getName(), uloc_getLanguage(), uloc_getVariant(), uloc_getCountry() */
251f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestBasicGetters() {
252f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t i;
253f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t cap;
254f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status = U_ZERO_ERROR;
255f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char *testLocale = 0;
256f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char *temp = 0, *name = 0;
257f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    log_verbose("Testing Basic Getters\n");
258f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (i = 0; i < LOCALE_SIZE; i++) {
259f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        testLocale=(char*)malloc(sizeof(char) * (strlen(rawData2[NAME][i])+1));
260f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        strcpy(testLocale,rawData2[NAME][i]);
261f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
262f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_verbose("Testing   %s  .....\n", testLocale);
263f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        cap=uloc_getLanguage(testLocale, NULL, 0, &status);
264f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(status==U_BUFFER_OVERFLOW_ERROR){
265f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            status=U_ZERO_ERROR;
266f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            temp=(char*)malloc(sizeof(char) * (cap+1));
267f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            uloc_getLanguage(testLocale, temp, cap+1, &status);
268f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
269f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(U_FAILURE(status)){
270f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("ERROR: in uloc_getLanguage  %s\n", myErrorName(status));
271f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
272f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (0 !=strcmp(temp,rawData2[LANG][i]))    {
273f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("  Language code mismatch: %s versus  %s\n", temp, rawData2[LANG][i]);
274f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
275f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
276f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
277f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        cap=uloc_getCountry(testLocale, temp, cap, &status);
278f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(status==U_BUFFER_OVERFLOW_ERROR){
279f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            status=U_ZERO_ERROR;
280f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            temp=(char*)realloc(temp, sizeof(char) * (cap+1));
281f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            uloc_getCountry(testLocale, temp, cap+1, &status);
282f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
283f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(U_FAILURE(status)){
284f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("ERROR: in uloc_getCountry  %s\n", myErrorName(status));
285f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
286f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (0 != strcmp(temp, rawData2[CTRY][i])) {
287f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err(" Country code mismatch:  %s  versus   %s\n", temp, rawData2[CTRY][i]);
288f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
289f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)          }
290f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
291f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        cap=uloc_getVariant(testLocale, temp, cap, &status);
292f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(status==U_BUFFER_OVERFLOW_ERROR){
293f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            status=U_ZERO_ERROR;
294f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            temp=(char*)realloc(temp, sizeof(char) * (cap+1));
295f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            uloc_getVariant(testLocale, temp, cap+1, &status);
296f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
297f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(U_FAILURE(status)){
298f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("ERROR: in uloc_getVariant  %s\n", myErrorName(status));
299f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
300f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (0 != strcmp(temp, rawData2[VAR][i])) {
301f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("Variant code mismatch:  %s  versus   %s\n", temp, rawData2[VAR][i]);
302f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
303f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
304f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        cap=uloc_getName(testLocale, NULL, 0, &status);
305f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(status==U_BUFFER_OVERFLOW_ERROR){
306f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            status=U_ZERO_ERROR;
307f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            name=(char*)malloc(sizeof(char) * (cap+1));
308f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            uloc_getName(testLocale, name, cap+1, &status);
309f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        } else if(status==U_ZERO_ERROR) {
310f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)          log_err("ERROR: in uloc_getName(%s,NULL,0,..), expected U_BUFFER_OVERFLOW_ERROR!\n", testLocale);
311f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
312f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(U_FAILURE(status)){
313f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("ERROR: in uloc_getName   %s\n", myErrorName(status));
314f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
315f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (0 != strcmp(name, rawData2[NAME][i])){
316f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err(" Mismatch in getName:  %s  versus   %s\n", name, rawData2[NAME][i]);
317f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
318f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
319f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        free(temp);
320f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        free(name);
321f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
322f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        free(testLocale);
323f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
324f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
325f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
326f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestNullDefault() {
327f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status = U_ZERO_ERROR;
328f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char original[ULOC_FULLNAME_CAPACITY];
329f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
330f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    uprv_strcpy(original, uloc_getDefault());
331f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    uloc_setDefault("qq_BLA", &status);
332f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (uprv_strcmp(uloc_getDefault(), "qq_BLA") != 0) {
333f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err(" Mismatch in uloc_setDefault:  qq_BLA  versus   %s\n", uloc_getDefault());
334f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
335f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    uloc_setDefault(NULL, &status);
336f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (uprv_strcmp(uloc_getDefault(), original) != 0) {
337f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err(" uloc_setDefault(NULL, &status) didn't get the default locale back!\n");
338f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
339f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
340f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
341f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* Test that set & get of default locale work, and that
342f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     * default locales are cached and reused, and not overwritten.
343f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     */
344f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *n_en_US;
345f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *n_fr_FR;
346f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *n2_en_US;
347f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
348f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status = U_ZERO_ERROR;
349f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        uloc_setDefault("en_US", &status);
350f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        n_en_US = uloc_getDefault();
351f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (strcmp(n_en_US, "en_US") != 0) {
352f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("Wrong result from uloc_getDefault().  Expected \"en_US\", got \"%s\"\n", n_en_US);
353f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
354f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
355f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        uloc_setDefault("fr_FR", &status);
356f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        n_fr_FR = uloc_getDefault();
357f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (strcmp(n_en_US, "en_US") != 0) {
358f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("uloc_setDefault altered previously default string."
359f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                "Expected \"en_US\", got \"%s\"\n",  n_en_US);
360f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
361f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (strcmp(n_fr_FR, "fr_FR") != 0) {
362f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("Wrong result from uloc_getDefault().  Expected \"fr_FR\", got %s\n",  n_fr_FR);
363f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
364f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
365f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        uloc_setDefault("en_US", &status);
366f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        n2_en_US = uloc_getDefault();
367f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (strcmp(n2_en_US, "en_US") != 0) {
368f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("Wrong result from uloc_getDefault().  Expected \"en_US\", got \"%s\"\n", n_en_US);
369f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
370f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (n2_en_US != n_en_US) {
371f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("Default locale cache failed to reuse en_US locale.\n");
372f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
373f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
374f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(status)) {
375f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("Failure returned from uloc_setDefault - \"%s\"\n", u_errorName(status));
376f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
377f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
378f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
379f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
380f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
381f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* Test the i- and x- and @ and . functionality
382f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*/
383f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
384f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define PREFIXBUFSIZ 128
385f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
386f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestPrefixes() {
387f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int row = 0;
388f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int n;
389f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char *loc, *expected;
390f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
391f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const char * const testData[][7] =
392f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
393f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* NULL canonicalize() column means "expect same as getName()" */
394f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"sv", "", "FI", "AL", "sv-fi-al", "sv_FI_AL", NULL},
395f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"en", "", "GB", "", "en-gb", "en_GB", NULL},
396f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"i-hakka", "", "MT", "XEMXIJA", "i-hakka_MT_XEMXIJA", "i-hakka_MT_XEMXIJA", NULL},
397f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"i-hakka", "", "CN", "", "i-hakka_CN", "i-hakka_CN", NULL},
398f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"i-hakka", "", "MX", "", "I-hakka_MX", "i-hakka_MX", NULL},
399f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"x-klingon", "", "US", "SANJOSE", "X-KLINGON_us_SANJOSE", "x-klingon_US_SANJOSE", NULL},
400f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
401f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"zh", "Hans", "", "PINYIN", "zh-Hans-pinyin", "zh_Hans_PINYIN", "zh_Hans@collation=pinyin"},
402f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"hy", "", "", "AREVMDA", "hy_AREVMDA", "hy_AREVMDA", NULL},
403f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
404f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"mr", "", "", "", "mr.utf8", "mr.utf8", "mr"},
405f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"de", "", "TV", "", "de-tv.koi8r", "de_TV.koi8r", "de_TV"},
406f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"x-piglatin", "", "ML", "", "x-piglatin_ML.MBE", "x-piglatin_ML.MBE", "x-piglatin_ML"},  /* Multibyte English */
407f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"i-cherokee", "","US", "", "i-Cherokee_US.utf7", "i-cherokee_US.utf7", "i-cherokee_US"},
408f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"x-filfli", "", "MT", "FILFLA", "x-filfli_MT_FILFLA.gb-18030", "x-filfli_MT_FILFLA.gb-18030", "x-filfli_MT_FILFLA"},
409f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"no", "", "NO", "NY", "no-no-ny.utf32@B", "no_NO_NY.utf32@B", "no_NO_NY_B"},
410f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"no", "", "NO", "",  "no-no.utf32@B", "no_NO.utf32@B", "no_NO_B"},
411f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"no", "", "",   "NY", "no__ny", "no__NY", NULL},
412f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"no", "", "",   "", "no@ny", "no@ny", "no__NY"},
413f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"el", "Latn", "", "", "el-latn", "el_Latn", NULL},
414f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"en", "Cyrl", "RU", "", "en-cyrl-ru", "en_Cyrl_RU", NULL},
415f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"zh", "Hant", "TW", "STROKE", "zh-hant_TW_STROKE", "zh_Hant_TW_STROKE", "zh_Hant_TW@collation=stroke"},
416f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"qq", "Qqqq", "QQ", "QQ", "qq_Qqqq_QQ_QQ", "qq_Qqqq_QQ_QQ", NULL},
417f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"qq", "Qqqq", "", "QQ", "qq_Qqqq__QQ", "qq_Qqqq__QQ", NULL},
418f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {"12", "3456", "78", "90", "12_3456_78_90", "12_3456_78_90", NULL}, /* total garbage */
419f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
420f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {NULL,NULL,NULL,NULL,NULL,NULL,NULL}
421f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    };
422f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
423f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const char * const testTitles[] = {
424f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "uloc_getLanguage()",
425f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "uloc_getScript()",
426f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "uloc_getCountry()",
427f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "uloc_getVariant()",
428f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "name",
429f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "uloc_getName()",
430f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "uloc_canonicalize()"
431f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    };
432f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
433f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char buf[PREFIXBUFSIZ];
434f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t len;
435f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode err;
436f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
437f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
438f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for(row=0;testData[row][0] != NULL;row++) {
439f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        loc = testData[row][NAME];
440f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_verbose("Test #%d: %s\n", row, loc);
441f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
442f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        err = U_ZERO_ERROR;
443f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        len=0;
444f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        buf[0]=0;
445f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        for(n=0;n<=(NAME+2);n++) {
446f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if(n==NAME) continue;
447f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
448f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            for(len=0;len<PREFIXBUFSIZ;len++) {
449f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                buf[len] = '%'; /* Set a tripwire.. */
450f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
451f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            len = 0;
452f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
453f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            switch(n) {
454f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            case LANG:
455f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                len = uloc_getLanguage(loc, buf, PREFIXBUFSIZ, &err);
456f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                break;
457f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
458f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            case SCRIPT:
459f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                len = uloc_getScript(loc, buf, PREFIXBUFSIZ, &err);
460f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                break;
461f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
462f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            case CTRY:
463f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                len = uloc_getCountry(loc, buf, PREFIXBUFSIZ, &err);
464f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                break;
465f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
466f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            case VAR:
467f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                len = uloc_getVariant(loc, buf, PREFIXBUFSIZ, &err);
468f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                break;
469f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
470f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            case NAME+1:
471f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                len = uloc_getName(loc, buf, PREFIXBUFSIZ, &err);
472f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                break;
473f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
474f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            case NAME+2:
475f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                len = uloc_canonicalize(loc, buf, PREFIXBUFSIZ, &err);
476f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                break;
477f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
478f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            default:
479f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                strcpy(buf, "**??");
480f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                len=4;
481f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
482f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
483f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if(U_FAILURE(err)) {
484f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("#%d: %s on %s: err %s\n",
485f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    row, testTitles[n], loc, u_errorName(err));
486f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            } else {
487f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_verbose("#%d: %s on %s: -> [%s] (length %d)\n",
488f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    row, testTitles[n], loc, buf, len);
489f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
490f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                if(len != (int32_t)strlen(buf)) {
491f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    log_err("#%d: %s on %s: -> [%s] (length returned %d, actual %d!)\n",
492f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        row, testTitles[n], loc, buf, len, strlen(buf)+1);
493f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
494f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                }
495f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
496f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                /* see if they smashed something */
497f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                if(buf[len+1] != '%') {
498f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    log_err("#%d: %s on %s: -> [%s] - wrote [%X] out ofbounds!\n",
499f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        row, testTitles[n], loc, buf, buf[len+1]);
500f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                }
501f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
502f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                expected = testData[row][n];
503f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                if (expected == NULL && n == (NAME+2)) {
504f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    /* NULL expected canonicalize() means "expect same as getName()" */
505f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    expected = testData[row][NAME+1];
506f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                }
507f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                if(strcmp(buf, expected)) {
508f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    log_err("#%d: %s on %s: -> [%s] (expected '%s'!)\n",
509f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        row, testTitles[n], loc, buf, expected);
510f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
511f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                }
512f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
513f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
514f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
515f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
516f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
517f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
518f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* testing uloc_getISO3Language(), uloc_getISO3Country(),  */
519f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestSimpleResourceInfo() {
520f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t i;
521f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char* testLocale = 0;
522f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar* expected = 0;
523f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
524f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char* temp;
525f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char            temp2[20];
526f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    testLocale=(char*)malloc(sizeof(char) * 1);
527f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    expected=(UChar*)malloc(sizeof(UChar) * 1);
528f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
529f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    setUpDataTable();
530f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    log_verbose("Testing getISO3Language and getISO3Country\n");
531f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (i = 0; i < LOCALE_SIZE; i++) {
532f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
533f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        testLocale=(char*)realloc(testLocale, sizeof(char) * (u_strlen(dataTable[NAME][i])+1));
534f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        u_austrcpy(testLocale, dataTable[NAME][i]);
535f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
536f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_verbose("Testing   %s ......\n", testLocale);
537f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
538f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        temp=uloc_getISO3Language(testLocale);
539f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        expected=(UChar*)realloc(expected, sizeof(UChar) * (strlen(temp) + 1));
540f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        u_uastrcpy(expected,temp);
541f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (0 != u_strcmp(expected, dataTable[LANG3][i])) {
542f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("  ISO-3 language code mismatch:  %s versus  %s\n",  austrdup(expected),
543f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                austrdup(dataTable[LANG3][i]));
544f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
545f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
546f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        temp=uloc_getISO3Country(testLocale);
547f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        expected=(UChar*)realloc(expected, sizeof(UChar) * (strlen(temp) + 1));
548f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        u_uastrcpy(expected,temp);
549f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (0 != u_strcmp(expected, dataTable[CTRY3][i])) {
550f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("  ISO-3 Country code mismatch:  %s versus  %s\n",  austrdup(expected),
551f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                austrdup(dataTable[CTRY3][i]));
552f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
553f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        sprintf(temp2, "%x", (int)uloc_getLCID(testLocale));
554f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (strcmp(temp2, rawData2[LCID][i]) != 0) {
555f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("LCID mismatch: %s versus %s\n", temp2 , rawData2[LCID][i]);
556f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
557f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
558f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
559f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    free(expected);
560f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    free(testLocale);
561f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    cleanUpDataTable();
562f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
563f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
564f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/*
565f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Jitterbug 2439 -- markus 20030425
566f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
567f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The lookup of display names must not fall back through the default
568f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * locale because that yields useless results.
569f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
570f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestDisplayNames()
571f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
572f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar buffer[100];
573f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode errorCode=U_ZERO_ERROR;
574f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t length;
575f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    log_verbose("Testing getDisplayName for different locales\n");
576f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
577f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    log_verbose("  In locale = en_US...\n");
578f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    doTestDisplayNames("en_US", DLANG_EN);
579f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    log_verbose("  In locale = fr_FR....\n");
580f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    doTestDisplayNames("fr_FR", DLANG_FR);
581f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    log_verbose("  In locale = ca_ES...\n");
582f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    doTestDisplayNames("ca_ES", DLANG_CA);
583f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    log_verbose("  In locale = gr_EL..\n");
584f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    doTestDisplayNames("el_GR", DLANG_EL);
585f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
586f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* test that the default locale has a display name for its own language */
587f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    errorCode=U_ZERO_ERROR;
588f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    length=uloc_getDisplayLanguage(NULL, NULL, buffer, LENGTHOF(buffer), &errorCode);
589f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(U_FAILURE(errorCode) || (length<=3 && buffer[0]<=0x7f)) {
590f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* check <=3 to reject getting the language code as a display name */
591f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_data_err("unable to get a display string for the language of the default locale - %s (Are you missing data?)\n", u_errorName(errorCode));
592f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
593f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
594f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* test that we get the language code itself for an unknown language, and a default warning */
595f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    errorCode=U_ZERO_ERROR;
596f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    length=uloc_getDisplayLanguage("qq", "rr", buffer, LENGTHOF(buffer), &errorCode);
597f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(errorCode!=U_USING_DEFAULT_WARNING || length!=2 || buffer[0]!=0x71 || buffer[1]!=0x71) {
598f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("error getting the display string for an unknown language - %s\n", u_errorName(errorCode));
599f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
600f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
601f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* test that we get a default warning for a display name where one component is unknown (4255) */
602f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    errorCode=U_ZERO_ERROR;
603f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    length=uloc_getDisplayName("qq_US_POSIX", "en_US", buffer, LENGTHOF(buffer), &errorCode);
604f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(errorCode!=U_USING_DEFAULT_WARNING) {
605f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("error getting the display name for a locale with an unknown language - %s\n", u_errorName(errorCode));
606f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
607f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
608f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
609f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        int32_t i;
610f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        static const char *aLocale = "es@collation=traditional;calendar=japanese";
611f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        static const char *testL[] = { "en_US",
612f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            "fr_FR",
613f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            "ca_ES",
614f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            "el_GR" };
615f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        static const char *expect[] = { "Spanish (Calendar=Japanese Calendar, Collation=Traditional Sort Order)", /* note sorted order of keywords */
616f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            "espagnol (Calendrier=Calendrier japonais, Ordonnancement=Ordre traditionnel)",
617f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            "espanyol (calendari=calendari japon\\u00e8s, ordre alfab\\u00e8tic=ordre tradicional)",
618f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            "\\u0399\\u03C3\\u03C0\\u03B1\\u03BD\\u03B9\\u03BA\\u03AC (\\u03B7\\u03BC\\u03B5\\u03C1\\u03BF\\u03BB\\u03CC\\u03B3\\u03B9\\u03BF=\\u0399\\u03B1\\u03C0\\u03C9\\u03BD\\u03B9\\u03BA\\u03CC \\u03B7\\u03BC\\u03B5\\u03C1\\u03BF\\u03BB\\u03CC\\u03B3\\u03B9\\u03BF, \\u03C4\\u03B1\\u03BA\\u03C4\\u03BF\\u03C0\\u03BF\\u03AF\\u03B7\\u03C3\\u03B7=\\u03A0\\u03B1\\u03C1\\u03B1\\u03B4\\u03BF\\u03C3\\u03B9\\u03B1\\u03BA\\u03AE \\u03C3\\u03B5\\u03B9\\u03C1\\u03AC \\u03C4\\u03B1\\u03BE\\u03B9\\u03BD\\u03CC\\u03BC\\u03B7\\u03C3\\u03B7\\u03C2)" };
619f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UChar *expectBuffer;
620f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
621f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        for(i=0;i<LENGTHOF(testL);i++) {
622f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            errorCode = U_ZERO_ERROR;
623f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            uloc_getDisplayName(aLocale, testL[i], buffer, LENGTHOF(buffer), &errorCode);
624f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if(U_FAILURE(errorCode)) {
625f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("FAIL in uloc_getDisplayName(%s,%s,..) -> %s\n", aLocale, testL[i], u_errorName(errorCode));
626f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            } else {
627f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                expectBuffer = CharsToUChars(expect[i]);
628f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                if(u_strcmp(buffer,expectBuffer)) {
629f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    log_data_err("FAIL in uloc_getDisplayName(%s,%s,..) expected '%s' got '%s' (Are you missing data?)\n", aLocale, testL[i], expect[i], austrdup(buffer));
630f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                } else {
631f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    log_verbose("pass in uloc_getDisplayName(%s,%s,..) got '%s'\n", aLocale, testL[i], expect[i]);
632f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                }
633f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                free(expectBuffer);
634f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
635f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
636f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
637f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
638f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
639f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
640f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* test for uloc_getAvialable()  and uloc_countAvilable()*/
641f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestGetAvailableLocales()
642f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
643f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
644f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char *locList;
645f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t locCount,i;
646f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
647f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    log_verbose("Testing the no of avialable locales\n");
648f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    locCount=uloc_countAvailable();
649f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (locCount == 0)
650f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_data_err("countAvailable() returned an empty list!\n");
651f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
652f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* use something sensible w/o hardcoding the count */
653f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    else if(locCount < 0){
654f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_data_err("countAvailable() returned a wrong value!= %d\n", locCount);
655f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
656f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    else{
657f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_info("Number of locales returned = %d\n", locCount);
658f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
659f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for(i=0;i<locCount;i++){
660f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        locList=uloc_getAvailable(i);
661f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
662f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_verbose(" %s\n", locList);
663f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
664f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
665f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
666f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* test for u_getDataDirectory, u_setDataDirectory, uloc_getISO3Language */
667f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestDataDirectory()
668f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
669f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
670f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char            oldDirectory[512];
671f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char     *temp,*testValue1,*testValue2,*testValue3;
672f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char path[40] ="d:\\icu\\source\\test\\intltest" U_FILE_SEP_STRING; /*give the required path */
673f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
674f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    log_verbose("Testing getDataDirectory()\n");
675f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    temp = u_getDataDirectory();
676f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    strcpy(oldDirectory, temp);
677f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
678f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    testValue1=uloc_getISO3Language("en_US");
679f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    log_verbose("first fetch of language retrieved  %s\n", testValue1);
680f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
681f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (0 != strcmp(testValue1,"eng")){
682f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("Initial check of ISO3 language failed: expected \"eng\", got  %s \n", testValue1);
683f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
684f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
685f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /*defining the path for DataDirectory */
686f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    log_verbose("Testing setDataDirectory\n");
687f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    u_setDataDirectory( path );
688f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(strcmp(path, u_getDataDirectory())==0)
689f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_verbose("setDataDirectory working fine\n");
690f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    else
691f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("Error in setDataDirectory. Directory not set correctly - came back as [%s], expected [%s]\n", u_getDataDirectory(), path);
692f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
693f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    testValue2=uloc_getISO3Language("en_US");
694f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    log_verbose("second fetch of language retrieved  %s \n", testValue2);
695f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
696f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    u_setDataDirectory(oldDirectory);
697f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    testValue3=uloc_getISO3Language("en_US");
698f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    log_verbose("third fetch of language retrieved  %s \n", testValue3);
699f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
700f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (0 != strcmp(testValue3,"eng")) {
701f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)       log_err("get/setDataDirectory() failed: expected \"eng\", got \" %s  \" \n", testValue3);
702f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
703f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
704f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
705f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
706f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
707f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/*=========================================================== */
708f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
709f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static UChar _NUL=0;
710f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
711f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void doTestDisplayNames(const char* displayLocale, int32_t compareIndex)
712f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
713f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status = U_ZERO_ERROR;
714f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t i;
715f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t maxresultsize;
716f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
717f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char *testLocale;
718f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
719f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
720f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar  *testLang  = 0;
721f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar  *testScript  = 0;
722f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar  *testCtry = 0;
723f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar  *testVar = 0;
724f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar  *testName = 0;
725f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
726f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
727f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar*  expectedLang = 0;
728f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar*  expectedScript = 0;
729f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar*  expectedCtry = 0;
730f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar*  expectedVar = 0;
731f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar*  expectedName = 0;
732f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
733f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)setUpDataTable();
734f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
735f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for(i=0;i<LOCALE_SIZE; ++i)
736f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
737f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        testLocale=rawData2[NAME][i];
738f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
739f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_verbose("Testing.....  %s\n", testLocale);
740f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
741f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        maxresultsize=0;
742f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        maxresultsize=uloc_getDisplayLanguage(testLocale, displayLocale, NULL, maxresultsize, &status);
743f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(status==U_BUFFER_OVERFLOW_ERROR)
744f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
745f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            status=U_ZERO_ERROR;
746f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            testLang=(UChar*)malloc(sizeof(UChar) * (maxresultsize+1));
747f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            uloc_getDisplayLanguage(testLocale, displayLocale, testLang, maxresultsize + 1, &status);
748f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
749f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else
750f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
751f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            testLang=&_NUL;
752f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
753f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(U_FAILURE(status)){
754f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("Error in getDisplayLanguage()  %s\n", myErrorName(status));
755f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
756f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
757f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        maxresultsize=0;
758f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        maxresultsize=uloc_getDisplayScript(testLocale, displayLocale, NULL, maxresultsize, &status);
759f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(status==U_BUFFER_OVERFLOW_ERROR)
760f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
761f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            status=U_ZERO_ERROR;
762f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            testScript=(UChar*)malloc(sizeof(UChar) * (maxresultsize+1));
763f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            uloc_getDisplayScript(testLocale, displayLocale, testScript, maxresultsize + 1, &status);
764f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
765f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else
766f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
767f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            testScript=&_NUL;
768f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
769f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(U_FAILURE(status)){
770f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("Error in getDisplayScript()  %s\n", myErrorName(status));
771f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
772f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
773f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        maxresultsize=0;
774f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        maxresultsize=uloc_getDisplayCountry(testLocale, displayLocale, NULL, maxresultsize, &status);
775f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(status==U_BUFFER_OVERFLOW_ERROR)
776f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
777f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            status=U_ZERO_ERROR;
778f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            testCtry=(UChar*)malloc(sizeof(UChar) * (maxresultsize+1));
779f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            uloc_getDisplayCountry(testLocale, displayLocale, testCtry, maxresultsize + 1, &status);
780f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
781f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else
782f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
783f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            testCtry=&_NUL;
784f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
785f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(U_FAILURE(status)){
786f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("Error in getDisplayCountry()  %s\n", myErrorName(status));
787f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
788f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
789f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        maxresultsize=0;
790f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        maxresultsize=uloc_getDisplayVariant(testLocale, displayLocale, NULL, maxresultsize, &status);
791f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(status==U_BUFFER_OVERFLOW_ERROR)
792f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
793f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            status=U_ZERO_ERROR;
794f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            testVar=(UChar*)malloc(sizeof(UChar) * (maxresultsize+1));
795f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            uloc_getDisplayVariant(testLocale, displayLocale, testVar, maxresultsize + 1, &status);
796f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
797f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else
798f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
799f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            testVar=&_NUL;
800f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
801f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(U_FAILURE(status)){
802f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("Error in getDisplayVariant()  %s\n", myErrorName(status));
803f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
804f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
805f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        maxresultsize=0;
806f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        maxresultsize=uloc_getDisplayName(testLocale, displayLocale, NULL, maxresultsize, &status);
807f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(status==U_BUFFER_OVERFLOW_ERROR)
808f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
809f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            status=U_ZERO_ERROR;
810f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            testName=(UChar*)malloc(sizeof(UChar) * (maxresultsize+1));
811f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            uloc_getDisplayName(testLocale, displayLocale, testName, maxresultsize + 1, &status);
812f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
813f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else
814f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
815f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            testName=&_NUL;
816f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
817f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(U_FAILURE(status)){
818f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("Error in getDisplayName()  %s\n", myErrorName(status));
819f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
820f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
821f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        expectedLang=dataTable[compareIndex][i];
822f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(u_strlen(expectedLang)== 0)
823f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            expectedLang=dataTable[DLANG_EN][i];
824f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
825f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        expectedScript=dataTable[compareIndex + 1][i];
826f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(u_strlen(expectedScript)== 0)
827f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            expectedScript=dataTable[DSCRIPT_EN][i];
828f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
829f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        expectedCtry=dataTable[compareIndex + 2][i];
830f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(u_strlen(expectedCtry)== 0)
831f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            expectedCtry=dataTable[DCTRY_EN][i];
832f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
833f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        expectedVar=dataTable[compareIndex + 3][i];
834f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(u_strlen(expectedVar)== 0)
835f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            expectedVar=dataTable[DVAR_EN][i];
836f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
837f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        expectedName=dataTable[compareIndex + 4][i];
838f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(u_strlen(expectedName) == 0)
839f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            expectedName=dataTable[DNAME_EN][i];
840f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
841f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (0 !=u_strcmp(testLang,expectedLang))  {
842f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_data_err(" Display Language mismatch: got %s expected %s displayLocale=%s (Are you missing data?)\n", austrdup(testLang), austrdup(expectedLang), displayLocale);
843f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
844f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
845f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (0 != u_strcmp(testScript,expectedScript))   {
846f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_data_err(" Display Script mismatch: got %s expected %s displayLocale=%s (Are you missing data?)\n", austrdup(testScript), austrdup(expectedScript), displayLocale);
847f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
848f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
849f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (0 != u_strcmp(testCtry,expectedCtry))   {
850f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_data_err(" Display Country mismatch: got %s expected %s displayLocale=%s (Are you missing data?)\n", austrdup(testCtry), austrdup(expectedCtry), displayLocale);
851f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
852f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
853f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (0 != u_strcmp(testVar,expectedVar))    {
854f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_data_err(" Display Variant mismatch: got %s expected %s displayLocale=%s (Are you missing data?)\n", austrdup(testVar), austrdup(expectedVar), displayLocale);
855f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
856f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
857f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(0 != u_strcmp(testName, expectedName))    {
858f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_data_err(" Display Name mismatch: got %s expected %s displayLocale=%s (Are you missing data?)\n", austrdup(testName), austrdup(expectedName), displayLocale);
859f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
860f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
861f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(testName!=&_NUL) {
862f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            free(testName);
863f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
864f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(testLang!=&_NUL) {
865f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            free(testLang);
866f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
867f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(testScript!=&_NUL) {
868f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            free(testScript);
869f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
870f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(testCtry!=&_NUL) {
871f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            free(testCtry);
872f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
873f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(testVar!=&_NUL) {
874f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            free(testVar);
875f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
876f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
877f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)cleanUpDataTable();
878f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
879f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
880f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* test for uloc_getISOLanguages, uloc_getISOCountries */
881f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestISOFunctions()
882f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
883f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char* const* str=uloc_getISOLanguages();
884f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char* const* str1=uloc_getISOCountries();
885f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char* test;
886f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char *key = NULL;
887f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t count = 0, skipped = 0;
888f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t expect;
889f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UResourceBundle *res;
890f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UResourceBundle *subRes;
891f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status = U_ZERO_ERROR;
892f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
893f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /*  test getISOLanguages*/
894f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /*str=uloc_getISOLanguages(); */
895f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    log_verbose("Testing ISO Languages: \n");
896f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
897f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* use structLocale - this data is no longer in root */
898f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    res = ures_openDirect(loadTestData(&status), "structLocale", &status);
899f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    subRes = ures_getByKey(res, "Languages", NULL, &status);
900f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (U_FAILURE(status)) {
901f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_data_err("There is an error in structLocale's ures_getByKey(\"Languages\"), status=%s\n", u_errorName(status));
902f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return;
903f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
904f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
905f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    expect = ures_getSize(subRes);
906f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for(count = 0; *(str+count) != 0; count++)
907f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
908f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        key = NULL;
909f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        test = *(str+count);
910f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status = U_ZERO_ERROR;
911f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
912f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        do {
913f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            /* Skip over language tags. This API only returns language codes. */
914f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            skipped += (key != NULL);
915f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            ures_getNextString(subRes, NULL, &key, &status);
916f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
917f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        while (key != NULL && strchr(key, '_'));
918f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
919f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(key == NULL)
920f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            break;
921f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* TODO: Consider removing sh, which is deprecated */
922f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(strcmp(key,"root") == 0 || strcmp(key,"Fallback") == 0 || strcmp(key,"sh") == 0) {
923f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            ures_getNextString(subRes, NULL, &key, &status);
924f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            skipped++;
925f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
926f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if U_CHARSET_FAMILY==U_ASCII_FAMILY
927f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* This code only works on ASCII machines where the keys are stored in ASCII order */
928f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(strcmp(test,key)) {
929f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            /* The first difference usually implies the place where things get out of sync */
930f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("FAIL Language diff at offset %d, \"%s\" != \"%s\"\n", count, test, key);
931f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
932f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
933f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
934f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(!strcmp(test,"in"))
935f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("FAIL getISOLanguages() has obsolete language code %s\n", test);
936f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(!strcmp(test,"iw"))
937f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("FAIL getISOLanguages() has obsolete language code %s\n", test);
938f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(!strcmp(test,"ji"))
939f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("FAIL getISOLanguages() has obsolete language code %s\n", test);
940f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(!strcmp(test,"jw"))
941f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("FAIL getISOLanguages() has obsolete language code %s\n", test);
942f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(!strcmp(test,"sh"))
943f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("FAIL getISOLanguages() has obsolete language code %s\n", test);
944f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
945f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
946f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    expect -= skipped; /* Ignore the skipped resources from structLocale */
947f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
948f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(count!=expect) {
949f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("There is an error in getISOLanguages, got %d, expected %d (as per structLocale)\n", count, expect);
950f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
951f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
952f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    subRes = ures_getByKey(res, "Countries", subRes, &status);
953f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    log_verbose("Testing ISO Countries");
954f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    skipped = 0;
955f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    expect = ures_getSize(subRes) - 1; /* Skip ZZ */
956f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for(count = 0; *(str1+count) != 0; count++)
957f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
958f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        key = NULL;
959f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        test = *(str1+count);
960f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        do {
961f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            /* Skip over numeric UN tags. This API only returns ISO-3166 codes. */
962f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            skipped += (key != NULL);
963f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            ures_getNextString(subRes, NULL, &key, &status);
964f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
965f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        while (key != NULL && strlen(key) != 2);
966f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
967f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(key == NULL)
968f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            break;
969f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* TODO: Consider removing CS, which is deprecated */
970f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        while(strcmp(key,"QO") == 0 || strcmp(key,"QU") == 0 || strcmp(key,"CS") == 0) {
971f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            ures_getNextString(subRes, NULL, &key, &status);
972f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            skipped++;
973f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
974f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if U_CHARSET_FAMILY==U_ASCII_FAMILY
975f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* This code only works on ASCII machines where the keys are stored in ASCII order */
976f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(strcmp(test,key)) {
977f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            /* The first difference usually implies the place where things get out of sync */
978f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("FAIL Country diff at offset %d, \"%s\" != \"%s\"\n", count, test, key);
979f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
980f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
981f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(!strcmp(test,"FX"))
982f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("FAIL getISOCountries() has obsolete country code %s\n", test);
983f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(!strcmp(test,"YU"))
984f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("FAIL getISOCountries() has obsolete country code %s\n", test);
985f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(!strcmp(test,"ZR"))
986f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("FAIL getISOCountries() has obsolete country code %s\n", test);
987f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
988f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
989f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ures_getNextString(subRes, NULL, &key, &status);
990f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (strcmp(key, "ZZ") != 0) {
991f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("ZZ was expected to be the last entry in structLocale, but got %s\n", key);
992f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
993f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY
994f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* On EBCDIC machines, the numbers are sorted last. Account for those in the skipped value too. */
995f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    key = NULL;
996f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    do {
997f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* Skip over numeric UN tags. uloc_getISOCountries only returns ISO-3166 codes. */
998f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        skipped += (key != NULL);
999f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        ures_getNextString(subRes, NULL, &key, &status);
1000f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1001f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    while (U_SUCCESS(status) && key != NULL && strlen(key) != 2);
1002f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
1003f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    expect -= skipped; /* Ignore the skipped resources from structLocale */
1004f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(count!=expect)
1005f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
1006f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("There is an error in getISOCountries, got %d, expected %d \n", count, expect);
1007f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1008f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ures_close(subRes);
1009f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ures_close(res);
1010f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
1011f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1012f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void setUpDataTable()
1013f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
1014f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t i,j;
1015f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    dataTable = (UChar***)(calloc(sizeof(UChar**),LOCALE_INFO_SIZE));
1016f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1017f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (i = 0; i < LOCALE_INFO_SIZE; i++) {
1018f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        dataTable[i] = (UChar**)(calloc(sizeof(UChar*),LOCALE_SIZE));
1019f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        for (j = 0; j < LOCALE_SIZE; j++){
1020f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            dataTable[i][j] = CharsToUChars(rawData2[i][j]);
1021f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1022f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1023f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
1024f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1025f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void cleanUpDataTable()
1026f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
1027f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t i,j;
1028f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(dataTable != NULL) {
1029f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        for (i=0; i<LOCALE_INFO_SIZE; i++) {
1030f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            for(j = 0; j < LOCALE_SIZE; j++) {
1031f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                free(dataTable[i][j]);
1032f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
1033f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            free(dataTable[i]);
1034f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1035f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        free(dataTable);
1036f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1037f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    dataTable = NULL;
1038f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
1039f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1040f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
1041f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @bug 4011756 4011380
1042f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
1043f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestISO3Fallback()
1044f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
1045f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char* test="xx_YY";
1046f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1047f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char * result;
1048f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1049f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    result = uloc_getISO3Language(test);
1050f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1051f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* Conform to C API usage  */
1052f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1053f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (!result || (result[0] != 0))
1054f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)       log_err("getISO3Language() on xx_YY returned %s instead of \"\"");
1055f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1056f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    result = uloc_getISO3Country(test);
1057f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1058f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (!result || (result[0] != 0))
1059f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("getISO3Country() on xx_YY returned %s instead of \"\"");
1060f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
1061f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1062f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
1063f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @bug 4118587
1064f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
1065f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestSimpleDisplayNames()
1066f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
1067f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /*
1068f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     This test is different from TestDisplayNames because TestDisplayNames checks
1069f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     fallback behavior, combination of language and country names to form locale
1070f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     names, and other stuff like that.  This test just checks specific language
1071f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     and country codes to make sure we have the correct names for them.
1072f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  */
1073f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char languageCodes[] [4] = { "he", "id", "iu", "ug", "yi", "za", "419" };
1074f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char* languageNames [] = { "Hebrew", "Indonesian", "Inuktitut", "Uighur", "Yiddish",
1075f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                               "Zhuang", "419" };
1076f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char* inLocale [] = { "en_US", "zh_Hant"};
1077f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status=U_ZERO_ERROR;
1078f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1079f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t i;
1080f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t localeIndex = 0;
1081f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (i = 0; i < 7; i++) {
1082f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UChar *testLang=0;
1083f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UChar *expectedLang=0;
1084f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        int size=0;
1085f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1086f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (i == 6) {
1087f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            localeIndex = 1; /* Use the second locale for the rest of the test. */
1088f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1089f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1090f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        size=uloc_getDisplayLanguage(languageCodes[i], inLocale[localeIndex], NULL, size, &status);
1091f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(status==U_BUFFER_OVERFLOW_ERROR) {
1092f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            status=U_ZERO_ERROR;
1093f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            testLang=(UChar*)malloc(sizeof(UChar) * (size + 1));
1094f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            uloc_getDisplayLanguage(languageCodes[i], inLocale[localeIndex], testLang, size + 1, &status);
1095f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1096f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        expectedLang=(UChar*)malloc(sizeof(UChar) * (strlen(languageNames[i])+1));
1097f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        u_uastrcpy(expectedLang, languageNames[i]);
1098f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (u_strcmp(testLang, expectedLang) != 0)
1099f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_data_err("Got wrong display name for %s : Expected \"%s\", got \"%s\".\n",
1100f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    languageCodes[i], languageNames[i], austrdup(testLang));
1101f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        free(testLang);
1102f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        free(expectedLang);
1103f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1104f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1105f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
1106f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1107f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
1108f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @bug 4118595
1109f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
1110f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestUninstalledISO3Names()
1111f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
1112f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /* This test checks to make sure getISO3Language and getISO3Country work right
1113f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     even for locales that are not installed. */
1114f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const char iso2Languages [][4] = {     "am", "ba", "fy", "mr", "rn",
1115f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                                        "ss", "tw", "zu" };
1116f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const char iso3Languages [][5] = {     "amh", "bak", "fry", "mar", "run",
1117f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                                        "ssw", "twi", "zul" };
1118f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const char iso2Countries [][6] = {     "am_AF", "ba_BW", "fy_KZ", "mr_MO", "rn_MN",
1119f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                                        "ss_SB", "tw_TC", "zu_ZW" };
1120f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const char iso3Countries [][4] = {     "AFG", "BWA", "KAZ", "MAC", "MNG",
1121f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                                        "SLB", "TCA", "ZWE" };
1122f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t i;
1123f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1124f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (i = 0; i < 8; i++) {
1125f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      UErrorCode err = U_ZERO_ERROR;
1126f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      const char *test;
1127f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      test = uloc_getISO3Language(iso2Languages[i]);
1128f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      if(strcmp(test, iso3Languages[i]) !=0 || U_FAILURE(err))
1129f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)         log_err("Got wrong ISO3 code for %s : Expected \"%s\", got \"%s\". %s\n",
1130f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                     iso2Languages[i], iso3Languages[i], test, myErrorName(err));
1131f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1132f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (i = 0; i < 8; i++) {
1133f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      UErrorCode err = U_ZERO_ERROR;
1134f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      const char *test;
1135f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      test = uloc_getISO3Country(iso2Countries[i]);
1136f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      if(strcmp(test, iso3Countries[i]) !=0 || U_FAILURE(err))
1137f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)         log_err("Got wrong ISO3 code for %s : Expected \"%s\", got \"%s\". %s\n",
1138f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                     iso2Countries[i], iso3Countries[i], test, myErrorName(err));
1139f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1140f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
1141f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1142f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1143f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestVariantParsing()
1144f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
1145f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const char* en_US_custom="en_US_De Anza_Cupertino_California_United States_Earth";
1146f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const char* dispName="English (United States, DE ANZA_CUPERTINO_CALIFORNIA_UNITED STATES_EARTH)";
1147f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const char* dispVar="DE ANZA_CUPERTINO_CALIFORNIA_UNITED STATES_EARTH";
1148f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const char* shortVariant="fr_FR_foo";
1149f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const char* bogusVariant="fr_FR__foo";
1150f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const char* bogusVariant2="fr_FR_foo_";
1151f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const char* bogusVariant3="fr_FR__foo_";
1152f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1153f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1154f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar displayVar[100];
1155f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar displayName[100];
1156f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status=U_ZERO_ERROR;
1157f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar* got=0;
1158f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t size=0;
1159f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    size=uloc_getDisplayVariant(en_US_custom, "en_US", NULL, size, &status);
1160f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(status==U_BUFFER_OVERFLOW_ERROR) {
1161f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status=U_ZERO_ERROR;
1162f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        got=(UChar*)realloc(got, sizeof(UChar) * (size+1));
1163f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        uloc_getDisplayVariant(en_US_custom, "en_US", got, size + 1, &status);
1164f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1165f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    else {
1166f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("FAIL: Didn't get U_BUFFER_OVERFLOW_ERROR\n");
1167f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1168f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    u_uastrcpy(displayVar, dispVar);
1169f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(u_strcmp(got,displayVar)!=0) {
1170f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("FAIL: getDisplayVariant() Wanted %s, got %s\n", dispVar, austrdup(got));
1171f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1172f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    size=0;
1173f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    size=uloc_getDisplayName(en_US_custom, "en_US", NULL, size, &status);
1174f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(status==U_BUFFER_OVERFLOW_ERROR) {
1175f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status=U_ZERO_ERROR;
1176f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        got=(UChar*)realloc(got, sizeof(UChar) * (size+1));
1177f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        uloc_getDisplayName(en_US_custom, "en_US", got, size + 1, &status);
1178f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1179f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    else {
1180f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("FAIL: Didn't get U_BUFFER_OVERFLOW_ERROR\n");
1181f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1182f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    u_uastrcpy(displayName, dispName);
1183f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(u_strcmp(got,displayName)!=0) {
1184f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (status == U_USING_DEFAULT_WARNING) {
1185f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_data_err("FAIL: getDisplayName() got %s. Perhaps you are missing data?\n", u_errorName(status));
1186f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        } else {
1187f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("FAIL: getDisplayName() Wanted %s, got %s\n", dispName, austrdup(got));
1188f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1189f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1190f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1191f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    size=0;
1192f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    status=U_ZERO_ERROR;
1193f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    size=uloc_getDisplayVariant(shortVariant, NULL, NULL, size, &status);
1194f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(status==U_BUFFER_OVERFLOW_ERROR) {
1195f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status=U_ZERO_ERROR;
1196f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        got=(UChar*)realloc(got, sizeof(UChar) * (size+1));
1197f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        uloc_getDisplayVariant(shortVariant, NULL, got, size + 1, &status);
1198f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1199f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    else {
1200f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("FAIL: Didn't get U_BUFFER_OVERFLOW_ERROR\n");
1201f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1202f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(strcmp(austrdup(got),"FOO")!=0) {
1203f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("FAIL: getDisplayVariant()  Wanted: foo  Got: %s\n", austrdup(got));
1204f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1205f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    size=0;
1206f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    status=U_ZERO_ERROR;
1207f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    size=uloc_getDisplayVariant(bogusVariant, NULL, NULL, size, &status);
1208f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(status==U_BUFFER_OVERFLOW_ERROR) {
1209f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status=U_ZERO_ERROR;
1210f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        got=(UChar*)realloc(got, sizeof(UChar) * (size+1));
1211f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        uloc_getDisplayVariant(bogusVariant, NULL, got, size + 1, &status);
1212f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1213f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    else {
1214f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("FAIL: Didn't get U_BUFFER_OVERFLOW_ERROR\n");
1215f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1216f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(strcmp(austrdup(got),"_FOO")!=0) {
1217f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("FAIL: getDisplayVariant()  Wanted: _FOO  Got: %s\n", austrdup(got));
1218f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1219f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    size=0;
1220f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    status=U_ZERO_ERROR;
1221f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    size=uloc_getDisplayVariant(bogusVariant2, NULL, NULL, size, &status);
1222f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(status==U_BUFFER_OVERFLOW_ERROR) {
1223f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status=U_ZERO_ERROR;
1224f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        got=(UChar*)realloc(got, sizeof(UChar) * (size+1));
1225f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        uloc_getDisplayVariant(bogusVariant2, NULL, got, size + 1, &status);
1226f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1227f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    else {
1228f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("FAIL: Didn't get U_BUFFER_OVERFLOW_ERROR\n");
1229f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1230f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(strcmp(austrdup(got),"FOO_")!=0) {
1231f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("FAIL: getDisplayVariant()  Wanted: FOO_  Got: %s\n", austrdup(got));
1232f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1233f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    size=0;
1234f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    status=U_ZERO_ERROR;
1235f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    size=uloc_getDisplayVariant(bogusVariant3, NULL, NULL, size, &status);
1236f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(status==U_BUFFER_OVERFLOW_ERROR) {
1237f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status=U_ZERO_ERROR;
1238f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        got=(UChar*)realloc(got, sizeof(UChar) * (size+1));
1239f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        uloc_getDisplayVariant(bogusVariant3, NULL, got, size + 1, &status);
1240f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1241f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    else {
1242f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("FAIL: Didn't get U_BUFFER_OVERFLOW_ERROR\n");
1243f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1244f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(strcmp(austrdup(got),"_FOO_")!=0) {
1245f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("FAIL: getDisplayVariant()  Wanted: _FOO_  Got: %s\n", austrdup(got));
1246f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1247f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    free(got);
1248f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
1249f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1250f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1251f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestObsoleteNames(void)
1252f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
1253f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t i;
1254f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status = U_ZERO_ERROR;
1255f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char buff[256];
1256f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1257f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const struct
1258f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
1259f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        char locale[9];
1260f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        char lang3[4];
1261f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        char lang[4];
1262f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        char ctry3[4];
1263f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        char ctry[4];
1264f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    } tests[] =
1265f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
1266f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "eng_USA", "eng", "en", "USA", "US" },
1267f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "kok",  "kok", "kok", "", "" },
1268f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "in",  "ind", "in", "", "" },
1269f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "id",  "ind", "id", "", "" }, /* NO aliasing */
1270f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "sh",  "srp", "sh", "", "" },
1271f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "zz_CS",  "", "zz", "SCG", "CS" },
1272f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "zz_FX",  "", "zz", "FXX", "FX" },
1273f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "zz_RO",  "", "zz", "ROU", "RO" },
1274f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "zz_TP",  "", "zz", "TMP", "TP" },
1275f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "zz_TL",  "", "zz", "TLS", "TL" },
1276f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "zz_ZR",  "", "zz", "ZAR", "ZR" },
1277f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "zz_FXX",  "", "zz", "FXX", "FX" }, /* no aliasing. Doesn't go to PS(PSE). */
1278f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "zz_ROM",  "", "zz", "ROU", "RO" },
1279f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "zz_ROU",  "", "zz", "ROU", "RO" },
1280f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "zz_ZAR",  "", "zz", "ZAR", "ZR" },
1281f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "zz_TMP",  "", "zz", "TMP", "TP" },
1282f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "zz_TLS",  "", "zz", "TLS", "TL" },
1283f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "zz_YUG",  "", "zz", "YUG", "YU" },
1284f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "mlt_PSE", "mlt", "mt", "PSE", "PS" },
1285f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "iw", "heb", "iw", "", "" },
1286f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "ji", "yid", "ji", "", "" },
1287f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "jw", "jaw", "jw", "", "" },
1288f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "sh", "srp", "sh", "", "" },
1289f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "", "", "", "", "" }
1290f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    };
1291f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1292f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for(i=0;tests[i].locale[0];i++)
1293f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
1294f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *locale;
1295f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1296f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        locale = tests[i].locale;
1297f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_verbose("** %s:\n", locale);
1298f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1299f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status = U_ZERO_ERROR;
1300f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(strcmp(tests[i].lang3,uloc_getISO3Language(locale)))
1301f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
1302f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("FAIL: uloc_getISO3Language(%s)==\t\"%s\",\t expected \"%s\"\n",
1303f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                locale,  uloc_getISO3Language(locale), tests[i].lang3);
1304f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1305f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else
1306f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
1307f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_verbose("   uloc_getISO3Language()==\t\"%s\"\n",
1308f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                uloc_getISO3Language(locale) );
1309f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1310f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1311f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status = U_ZERO_ERROR;
1312f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        uloc_getLanguage(locale, buff, 256, &status);
1313f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(U_FAILURE(status))
1314f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
1315f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("FAIL: error getting language from %s\n", locale);
1316f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1317f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else
1318f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
1319f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if(strcmp(buff,tests[i].lang))
1320f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            {
1321f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("FAIL: uloc_getLanguage(%s)==\t\"%s\"\t expected \"%s\"\n",
1322f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    locale, buff, tests[i].lang);
1323f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
1324f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            else
1325f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            {
1326f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_verbose("  uloc_getLanguage(%s)==\t%s\n", locale, buff);
1327f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
1328f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1329f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(strcmp(tests[i].lang3,uloc_getISO3Language(locale)))
1330f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
1331f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("FAIL: uloc_getISO3Language(%s)==\t\"%s\",\t expected \"%s\"\n",
1332f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                locale,  uloc_getISO3Language(locale), tests[i].lang3);
1333f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1334f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else
1335f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
1336f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_verbose("   uloc_getISO3Language()==\t\"%s\"\n",
1337f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                uloc_getISO3Language(locale) );
1338f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1339f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1340f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(strcmp(tests[i].ctry3,uloc_getISO3Country(locale)))
1341f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
1342f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("FAIL: uloc_getISO3Country(%s)==\t\"%s\",\t expected \"%s\"\n",
1343f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                locale,  uloc_getISO3Country(locale), tests[i].ctry3);
1344f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1345f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else
1346f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
1347f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_verbose("   uloc_getISO3Country()==\t\"%s\"\n",
1348f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                uloc_getISO3Country(locale) );
1349f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1350f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1351f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status = U_ZERO_ERROR;
1352f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        uloc_getCountry(locale, buff, 256, &status);
1353f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(U_FAILURE(status))
1354f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
1355f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("FAIL: error getting country from %s\n", locale);
1356f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1357f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else
1358f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
1359f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if(strcmp(buff,tests[i].ctry))
1360f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            {
1361f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("FAIL: uloc_getCountry(%s)==\t\"%s\"\t expected \"%s\"\n",
1362f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    locale, buff, tests[i].ctry);
1363f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
1364f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            else
1365f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            {
1366f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_verbose("  uloc_getCountry(%s)==\t%s\n", locale, buff);
1367f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
1368f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1369f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1370f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1371f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (uloc_getLCID("iw_IL") != uloc_getLCID("he_IL")) {
1372f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("he,iw LCID mismatch: %X versus %X\n", uloc_getLCID("iw_IL"), uloc_getLCID("he_IL"));
1373f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1374f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1375f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (uloc_getLCID("iw") != uloc_getLCID("he")) {
1376f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("he,iw LCID mismatch: %X versus %X\n", uloc_getLCID("iw"), uloc_getLCID("he"));
1377f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1378f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1379f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if 0
1380f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1381f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    i = uloc_getLanguage("kok",NULL,0,&icu_err);
1382f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(U_FAILURE(icu_err))
1383f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
1384f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("FAIL: Got %s trying to do uloc_getLanguage(kok)\n", u_errorName(icu_err));
1385f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1386f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1387f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    icu_err = U_ZERO_ERROR;
1388f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    uloc_getLanguage("kok",r1_buff,12,&icu_err);
1389f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(U_FAILURE(icu_err))
1390f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
1391f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("FAIL: Got %s trying to do uloc_getLanguage(kok, buff)\n", u_errorName(icu_err));
1392f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1393f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1394f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    r1_addr = (char *)uloc_getISO3Language("kok");
1395f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1396f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    icu_err = U_ZERO_ERROR;
1397f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (strcmp(r1_buff,"kok") != 0)
1398f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
1399f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("FAIL: uloc_getLanguage(kok)==%s not kok\n",r1_buff);
1400f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        line--;
1401f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1402f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    r1_addr = (char *)uloc_getISO3Language("in");
1403f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    i = uloc_getLanguage(r1_addr,r1_buff,12,&icu_err);
1404f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (strcmp(r1_buff,"id") != 0)
1405f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
1406f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        printf("uloc_getLanguage error (%s)\n",r1_buff);
1407f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        line--;
1408f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1409f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    r1_addr = (char *)uloc_getISO3Language("sh");
1410f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    i = uloc_getLanguage(r1_addr,r1_buff,12,&icu_err);
1411f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (strcmp(r1_buff,"sr") != 0)
1412f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
1413f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        printf("uloc_getLanguage error (%s)\n",r1_buff);
1414f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        line--;
1415f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1416f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1417f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    r1_addr = (char *)uloc_getISO3Country("zz_ZR");
1418f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    strcpy(p1_buff,"zz_");
1419f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    strcat(p1_buff,r1_addr);
1420f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    i = uloc_getCountry(p1_buff,r1_buff,12,&icu_err);
1421f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (strcmp(r1_buff,"ZR") != 0)
1422f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
1423f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        printf("uloc_getCountry error (%s)\n",r1_buff);
1424f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        line--;
1425f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1426f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    r1_addr = (char *)uloc_getISO3Country("zz_FX");
1427f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    strcpy(p1_buff,"zz_");
1428f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    strcat(p1_buff,r1_addr);
1429f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    i = uloc_getCountry(p1_buff,r1_buff,12,&icu_err);
1430f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (strcmp(r1_buff,"FX") != 0)
1431f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
1432f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        printf("uloc_getCountry error (%s)\n",r1_buff);
1433f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        line--;
1434f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1435f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1436f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
1437f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1438f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
1439f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1440f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestKeywordVariants(void)
1441f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
1442f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const struct {
1443f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *localeID;
1444f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *expectedLocaleID;
1445f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *expectedLocaleIDNoKeywords;
1446f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *expectedCanonicalID;
1447f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *expectedKeywords[10];
1448f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        int32_t numKeywords;
1449f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UErrorCode expectedStatus; /* from uloc_openKeywords */
1450f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    } testCases[] = {
1451f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
1452f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            "de_DE@  currency = euro; C o ll A t i o n   = Phonebook   ; C alen dar = buddhist   ",
1453f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            "de_DE@calendar=buddhist;collation=Phonebook;currency=euro",
1454f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            "de_DE",
1455f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            "de_DE@calendar=buddhist;collation=Phonebook;currency=euro",
1456f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            {"calendar", "collation", "currency"},
1457f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            3,
1458f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            U_ZERO_ERROR
1459f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        },
1460f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
1461f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            "de_DE@euro",
1462f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            "de_DE@euro",
1463f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            "de_DE",
1464f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            "de_DE@currency=EUR",
1465f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            {"","","","","","",""},
1466f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            0,
1467f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            U_INVALID_FORMAT_ERROR /* must have '=' after '@' */
1468f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        },
1469f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {
1470f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            "de_DE@euro;collation=phonebook",
1471f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            "de_DE", /* error result; bad format */
1472f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            "de_DE", /* error result; bad format */
1473f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            "de_DE", /* error result; bad format */
1474f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            {"","","","","","",""},
1475f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            0,
1476f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            U_INVALID_FORMAT_ERROR
1477f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1478f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    };
1479f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status = U_ZERO_ERROR;
1480f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1481f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t i = 0, j = 0;
1482f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t resultLen = 0;
1483f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char buffer[256];
1484f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UEnumeration *keywords;
1485f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t keyCount = 0;
1486f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char *keyword = NULL;
1487f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t keywordLen = 0;
1488f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1489f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for(i = 0; i < sizeof(testCases)/sizeof(testCases[0]); i++) {
1490f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status = U_ZERO_ERROR;
1491f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        *buffer = 0;
1492f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        keywords = uloc_openKeywords(testCases[i].localeID, &status);
1493f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1494f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(status != testCases[i].expectedStatus) {
1495f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("Expected to uloc_openKeywords(\"%s\") => status %s. Got %s instead\n",
1496f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    testCases[i].localeID,
1497f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    u_errorName(testCases[i].expectedStatus), u_errorName(status));
1498f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1499f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status = U_ZERO_ERROR;
1500f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(keywords) {
1501f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if((keyCount = uenum_count(keywords, &status)) != testCases[i].numKeywords) {
1502f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("Expected to get %i keywords, got %i\n", testCases[i].numKeywords, keyCount);
1503f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
1504f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if(keyCount) {
1505f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                j = 0;
1506f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                while((keyword = uenum_next(keywords, &keywordLen, &status))) {
1507f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    if(strcmp(keyword, testCases[i].expectedKeywords[j]) != 0) {
1508f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        log_err("Expected to get keyword value %s, got %s\n", testCases[i].expectedKeywords[j], keyword);
1509f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    }
1510f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    j++;
1511f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                }
1512f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                j = 0;
1513f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                uenum_reset(keywords, &status);
1514f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                while((keyword = uenum_next(keywords, &keywordLen, &status))) {
1515f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    if(strcmp(keyword, testCases[i].expectedKeywords[j]) != 0) {
1516f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        log_err("Expected to get keyword value %s, got %s\n", testCases[i].expectedKeywords[j], keyword);
1517f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    }
1518f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    j++;
1519f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                }
1520f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
1521f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            uenum_close(keywords);
1522f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1523f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        resultLen = uloc_getName(testCases[i].localeID, buffer, 256, &status);
1524f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (uprv_strcmp(testCases[i].expectedLocaleID, buffer) != 0) {
1525f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("Expected uloc_getName(\"%s\") => \"%s\"; got \"%s\"\n",
1526f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    testCases[i].localeID, testCases[i].expectedLocaleID, buffer);
1527f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1528f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        resultLen = uloc_canonicalize(testCases[i].localeID, buffer, 256, &status);
1529f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (uprv_strcmp(testCases[i].expectedCanonicalID, buffer) != 0) {
1530f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("Expected uloc_canonicalize(\"%s\") => \"%s\"; got \"%s\"\n",
1531f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    testCases[i].localeID, testCases[i].expectedCanonicalID, buffer);
1532f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1533f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1534f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1535f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
1536f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1537f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestKeywordVariantParsing(void)
1538f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
1539f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const struct {
1540f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *localeID;
1541f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *keyword;
1542f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *expectedValue;
1543f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    } testCases[] = {
1544f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "de_DE@  C o ll A t i o n   = Phonebook   ", "c o ll a t i o n", "Phonebook" },
1545f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "de_DE", "collation", ""},
1546f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "de_DE@collation=PHONEBOOK", "collation", "PHONEBOOK" },
1547f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "de_DE@currency = euro; CoLLaTion   = PHONEBOOk", "collatiON", "PHONEBOOk" },
1548f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    };
1549f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1550f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status = U_ZERO_ERROR;
1551f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1552f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t i = 0;
1553f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t resultLen = 0;
1554f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char buffer[256];
1555f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1556f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for(i = 0; i < sizeof(testCases)/sizeof(testCases[0]); i++) {
1557f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        *buffer = 0;
1558f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        resultLen = uloc_getKeywordValue(testCases[i].localeID, testCases[i].keyword, buffer, 256, &status);
1559f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(uprv_strcmp(testCases[i].expectedValue, buffer) != 0) {
1560f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("Expected to extract \"%s\" from \"%s\" for keyword \"%s\". Got \"%s\" instead\n",
1561f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                testCases[i].expectedValue, testCases[i].localeID, testCases[i].keyword, buffer);
1562f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1563f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1564f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
1565f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1566f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static const struct {
1567f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  const char *l; /* locale */
1568f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  const char *k; /* kw */
1569f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  const char *v; /* value */
1570f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  const char *x; /* expected */
1571f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} kwSetTestCases[] = {
1572f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if 1
1573f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "en_US", "calendar", "japanese", "en_US@calendar=japanese" },
1574f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "en_US@", "calendar", "japanese", "en_US@calendar=japanese" },
1575f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "en_US@calendar=islamic", "calendar", "japanese", "en_US@calendar=japanese" },
1576f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "en_US@calendar=slovakian", "calendar", "gregorian", "en_US@calendar=gregorian" }, /* don't know what this means, but it has the same # of chars as gregorian */
1577f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "en_US@calendar=gregorian", "calendar", "japanese", "en_US@calendar=japanese" },
1578f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "de", "Currency", "CHF", "de@currency=CHF" },
1579f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "de", "Currency", "CHF", "de@currency=CHF" },
1580f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1581f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "en_US@collation=phonebook", "calendar", "japanese", "en_US@calendar=japanese;collation=phonebook" },
1582f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "en_US@calendar=japanese", "collation", "phonebook", "en_US@calendar=japanese;collation=phonebook" },
1583f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "de@collation=phonebook", "Currency", "CHF", "de@collation=phonebook;currency=CHF" },
1584f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "en_US@calendar=gregorian;collation=phonebook", "calendar", "japanese", "en_US@calendar=japanese;collation=phonebook" },
1585f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "en_US@calendar=slovakian;collation=phonebook", "calendar", "gregorian", "en_US@calendar=gregorian;collation=phonebook" }, /* don't know what this means, but it has the same # of chars as gregorian */
1586f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "en_US@calendar=slovakian;collation=videobook", "collation", "phonebook", "en_US@calendar=slovakian;collation=phonebook" }, /* don't know what this means, but it has the same # of chars as gregorian */
1587f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "en_US@calendar=islamic;collation=phonebook", "calendar", "japanese", "en_US@calendar=japanese;collation=phonebook" },
1588f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "de@collation=phonebook", "Currency", "CHF", "de@collation=phonebook;currency=CHF" },
1589f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
1590f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if 1
1591f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "mt@a=0;b=1;c=2;d=3", "c","j", "mt@a=0;b=1;c=j;d=3" },
1592f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "mt@a=0;b=1;c=2;d=3", "x","j", "mt@a=0;b=1;c=2;d=3;x=j" },
1593f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "mt@a=0;b=1;c=2;d=3", "a","f", "mt@a=f;b=1;c=2;d=3" },
1594f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "mt@a=0;aa=1;aaa=3", "a","x", "mt@a=x;aa=1;aaa=3" },
1595f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "mt@a=0;aa=1;aaa=3", "aa","x", "mt@a=0;aa=x;aaa=3" },
1596f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "mt@a=0;aa=1;aaa=3", "aaa","x", "mt@a=0;aa=1;aaa=x" },
1597f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "mt@a=0;aa=1;aaa=3", "a","yy", "mt@a=yy;aa=1;aaa=3" },
1598f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "mt@a=0;aa=1;aaa=3", "aa","yy", "mt@a=0;aa=yy;aaa=3" },
1599f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "mt@a=0;aa=1;aaa=3", "aaa","yy", "mt@a=0;aa=1;aaa=yy" },
1600f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
1601f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if 1
1602f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /* removal tests */
1603f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /* 1. removal of item at end */
1604f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "de@collation=phonebook;currency=CHF", "currency",   "", "de@collation=phonebook" },
1605f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "de@collation=phonebook;currency=CHF", "currency", NULL, "de@collation=phonebook" },
1606f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /* 2. removal of item at beginning */
1607f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "de@collation=phonebook;currency=CHF", "collation", "", "de@currency=CHF" },
1608f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "de@collation=phonebook;currency=CHF", "collation", NULL, "de@currency=CHF" },
1609f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /* 3. removal of an item not there */
1610f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "de@collation=phonebook;currency=CHF", "calendar", NULL, "de@collation=phonebook;currency=CHF" },
1611f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  /* 4. removal of only item */
1612f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "de@collation=phonebook", "collation", NULL, "de" },
1613f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
1614f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  { "de@collation=phonebook", "Currency", "CHF", "de@collation=phonebook;currency=CHF" }
1615f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)};
1616f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1617f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1618f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestKeywordSet(void)
1619f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
1620f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t i = 0;
1621f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t resultLen = 0;
1622f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char buffer[1024];
1623f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1624f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char cbuffer[1024];
1625f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1626f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for(i = 0; i < sizeof(kwSetTestCases)/sizeof(kwSetTestCases[0]); i++) {
1627f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UErrorCode status = U_ZERO_ERROR;
1628f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        memset(buffer,'%',1023);
1629f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        strcpy(buffer, kwSetTestCases[i].l);
1630f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1631f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        uloc_canonicalize(kwSetTestCases[i].l, cbuffer, 1023, &status);
1632f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(strcmp(buffer,cbuffer)) {
1633f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)          log_verbose("note: [%d] wasn't canonical, should be: '%s' not '%s'. Won't check for canonicity in output.\n", i, cbuffer, buffer);
1634f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1635f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)          /* sanity check test case results for canonicity */
1636f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        uloc_canonicalize(kwSetTestCases[i].x, cbuffer, 1023, &status);
1637f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(strcmp(kwSetTestCases[i].x,cbuffer)) {
1638f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)          log_err("%s:%d: ERROR: kwSetTestCases[%d].x = '%s', should be %s (must be canonical)\n", __FILE__, __LINE__, i, kwSetTestCases[i].x, cbuffer);
1639f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1640f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1641f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        resultLen = uloc_setKeywordValue(kwSetTestCases[i].k, kwSetTestCases[i].v, buffer, 1023, &status);
1642f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(U_FAILURE(status)) {
1643f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)          log_err("Err on test case %d: got error %s\n", i, u_errorName(status));
1644f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)          continue;
1645f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1646f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(strcmp(buffer,kwSetTestCases[i].x) || ((int32_t)strlen(buffer)!=resultLen)) {
1647f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)          log_err("FAIL: #%d: %s + [%s=%s] -> %s (%d) expected %s (%d)\n", i, kwSetTestCases[i].l, kwSetTestCases[i].k,
1648f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  kwSetTestCases[i].v, buffer, resultLen, kwSetTestCases[i].x, strlen(buffer));
1649f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        } else {
1650f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)          log_verbose("pass: #%d: %s + [%s=%s] -> %s\n", i, kwSetTestCases[i].l, kwSetTestCases[i].k, kwSetTestCases[i].v,buffer);
1651f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1652f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1653f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
1654f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1655f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestKeywordSetError(void)
1656f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
1657f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char buffer[1024];
1658f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status;
1659f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t res;
1660f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t i;
1661f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t blen;
1662f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1663f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* 0-test whether an error condition modifies the buffer at all */
1664f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    blen=0;
1665f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    i=0;
1666f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    memset(buffer,'%',1023);
1667f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    status = U_ZERO_ERROR;
1668f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    res = uloc_setKeywordValue(kwSetTestCases[i].k, kwSetTestCases[i].v, buffer, blen, &status);
1669f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(status != U_ILLEGAL_ARGUMENT_ERROR) {
1670f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("expected illegal err got %s\n", u_errorName(status));
1671f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return;
1672f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1673f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /*  if(res!=strlen(kwSetTestCases[i].x)) {
1674f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    log_err("expected result %d got %d\n", strlen(kwSetTestCases[i].x), res);
1675f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    return;
1676f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    } */
1677f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(buffer[blen]!='%') {
1678f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("Buffer byte %d was modified: now %c\n", blen, buffer[blen]);
1679f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return;
1680f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1681f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    log_verbose("0-buffer modify OK\n");
1682f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1683f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for(i=0;i<=2;i++) {
1684f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* 1- test a short buffer with growing text */
1685f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        blen=(int32_t)strlen(kwSetTestCases[i].l)+1;
1686f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        memset(buffer,'%',1023);
1687f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        strcpy(buffer,kwSetTestCases[i].l);
1688f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status = U_ZERO_ERROR;
1689f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        res = uloc_setKeywordValue(kwSetTestCases[i].k, kwSetTestCases[i].v, buffer, blen, &status);
1690f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(status != U_BUFFER_OVERFLOW_ERROR) {
1691f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("expected buffer overflow on buffer %d got %s, len %d (%s + [%s=%s])\n", blen, u_errorName(status), res, kwSetTestCases[i].l, kwSetTestCases[i].k, kwSetTestCases[i].v);
1692f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            return;
1693f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1694f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(res!=(int32_t)strlen(kwSetTestCases[i].x)) {
1695f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("expected result %d got %d\n", strlen(kwSetTestCases[i].x), res);
1696f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            return;
1697f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1698f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(buffer[blen]!='%') {
1699f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("Buffer byte %d was modified: now %c\n", blen, buffer[blen]);
1700f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            return;
1701f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1702f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_verbose("1/%d-buffer modify OK\n",i);
1703f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1704f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1705f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for(i=3;i<=4;i++) {
1706f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* 2- test a short buffer - text the same size or shrinking   */
1707f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        blen=(int32_t)strlen(kwSetTestCases[i].l)+1;
1708f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        memset(buffer,'%',1023);
1709f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        strcpy(buffer,kwSetTestCases[i].l);
1710f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status = U_ZERO_ERROR;
1711f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        res = uloc_setKeywordValue(kwSetTestCases[i].k, kwSetTestCases[i].v, buffer, blen, &status);
1712f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(status != U_ZERO_ERROR) {
1713f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("expected zero error got %s\n", u_errorName(status));
1714f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            return;
1715f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1716f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(buffer[blen+1]!='%') {
1717f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("Buffer byte %d was modified: now %c\n", blen+1, buffer[blen+1]);
1718f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            return;
1719f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1720f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(res!=(int32_t)strlen(kwSetTestCases[i].x)) {
1721f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("expected result %d got %d\n", strlen(kwSetTestCases[i].x), res);
1722f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            return;
1723f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1724f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(strcmp(buffer,kwSetTestCases[i].x) || ((int32_t)strlen(buffer)!=res)) {
1725f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("FAIL: #%d: %s + [%s=%s] -> %s (%d) expected %s (%d)\n", i, kwSetTestCases[i].l, kwSetTestCases[i].k,
1726f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                kwSetTestCases[i].v, buffer, res, kwSetTestCases[i].x, strlen(buffer));
1727f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        } else {
1728f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_verbose("pass: #%d: %s + [%s=%s] -> %s\n", i, kwSetTestCases[i].l, kwSetTestCases[i].k, kwSetTestCases[i].v,
1729f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                buffer);
1730f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1731f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_verbose("2/%d-buffer modify OK\n",i);
1732f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1733f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
1734f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1735f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static int32_t _canonicalize(int32_t selector, /* 0==getName, 1==canonicalize */
1736f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                             const char* localeID,
1737f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                             char* result,
1738f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                             int32_t resultCapacity,
1739f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                             UErrorCode* ec) {
1740f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* YOU can change this to use function pointers if you like */
1741f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    switch (selector) {
1742f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    case 0:
1743f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return uloc_getName(localeID, result, resultCapacity, ec);
1744f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    case 1:
1745f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return uloc_canonicalize(localeID, result, resultCapacity, ec);
1746f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    default:
1747f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return -1;
1748f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1749f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
1750f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1751f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestCanonicalization(void)
1752f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
1753f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const struct {
1754f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *localeID;    /* input */
1755f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *getNameID;   /* expected getName() result */
1756f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *canonicalID; /* expected canonicalize() result */
1757f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    } testCases[] = {
1758f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "ca_ES_PREEURO-with-extra-stuff-that really doesn't make any sense-unless-you're trying to increase code coverage",
1759f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)          "ca_ES_PREEURO_WITH_EXTRA_STUFF_THAT REALLY DOESN'T MAKE ANY SENSE_UNLESS_YOU'RE TRYING TO INCREASE CODE COVERAGE",
1760f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)          "ca_ES_PREEURO_WITH_EXTRA_STUFF_THAT REALLY DOESN'T MAKE ANY SENSE_UNLESS_YOU'RE TRYING TO INCREASE CODE COVERAGE"},
1761f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "ca_ES_PREEURO", "ca_ES_PREEURO", "ca_ES@currency=ESP" },
1762f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "de_AT_PREEURO", "de_AT_PREEURO", "de_AT@currency=ATS" },
1763f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "de_DE_PREEURO", "de_DE_PREEURO", "de_DE@currency=DEM" },
1764f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "de_LU_PREEURO", "de_LU_PREEURO", "de_LU@currency=LUF" },
1765f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "el_GR_PREEURO", "el_GR_PREEURO", "el_GR@currency=GRD" },
1766f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "en_BE_PREEURO", "en_BE_PREEURO", "en_BE@currency=BEF" },
1767f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "en_IE_PREEURO", "en_IE_PREEURO", "en_IE@currency=IEP" },
1768f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "es_ES_PREEURO", "es_ES_PREEURO", "es_ES@currency=ESP" },
1769f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "eu_ES_PREEURO", "eu_ES_PREEURO", "eu_ES@currency=ESP" },
1770f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "fi_FI_PREEURO", "fi_FI_PREEURO", "fi_FI@currency=FIM" },
1771f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "fr_BE_PREEURO", "fr_BE_PREEURO", "fr_BE@currency=BEF" },
1772f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "fr_FR_PREEURO", "fr_FR_PREEURO", "fr_FR@currency=FRF" },
1773f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "fr_LU_PREEURO", "fr_LU_PREEURO", "fr_LU@currency=LUF" },
1774f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "ga_IE_PREEURO", "ga_IE_PREEURO", "ga_IE@currency=IEP" },
1775f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "gl_ES_PREEURO", "gl_ES_PREEURO", "gl_ES@currency=ESP" },
1776f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "it_IT_PREEURO", "it_IT_PREEURO", "it_IT@currency=ITL" },
1777f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "nl_BE_PREEURO", "nl_BE_PREEURO", "nl_BE@currency=BEF" },
1778f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "nl_NL_PREEURO", "nl_NL_PREEURO", "nl_NL@currency=NLG" },
1779f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "pt_PT_PREEURO", "pt_PT_PREEURO", "pt_PT@currency=PTE" },
1780f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "de__PHONEBOOK", "de__PHONEBOOK", "de@collation=phonebook" },
1781f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "en_GB_EURO", "en_GB_EURO", "en_GB@currency=EUR" },
1782f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "en_GB@EURO", "en_GB@EURO", "en_GB@currency=EUR" }, /* POSIX ID */
1783f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "es__TRADITIONAL", "es__TRADITIONAL", "es@collation=traditional" },
1784f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "hi__DIRECT", "hi__DIRECT", "hi@collation=direct" },
1785f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "ja_JP_TRADITIONAL", "ja_JP_TRADITIONAL", "ja_JP@calendar=japanese" },
1786f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "th_TH_TRADITIONAL", "th_TH_TRADITIONAL", "th_TH@calendar=buddhist" },
1787f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "zh_TW_STROKE", "zh_TW_STROKE", "zh_TW@collation=stroke" },
1788f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "zh__PINYIN", "zh__PINYIN", "zh@collation=pinyin" },
1789f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "zh@collation=pinyin", "zh@collation=pinyin", "zh@collation=pinyin" },
1790f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "zh_CN@collation=pinyin", "zh_CN@collation=pinyin", "zh_CN@collation=pinyin" },
1791f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "zh_CN_STROKE", "zh_CN_STROKE", "zh_CN@collation=stroke" },
1792f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "zh_CN_CA@collation=pinyin", "zh_CN_CA@collation=pinyin", "zh_CN_CA@collation=pinyin" },
1793f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "en_US_POSIX", "en_US_POSIX", "en_US_POSIX" },
1794f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "hy_AM_REVISED", "hy_AM_REVISED", "hy_AM_REVISED" },
1795f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "no_NO_NY", "no_NO_NY", "no_NO_NY" /* not: "nn_NO" [alan ICU3.0] */ },
1796f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "no@ny", "no@ny", "no__NY" /* not: "nn" [alan ICU3.0] */ }, /* POSIX ID */
1797f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "no-no.utf32@B", "no_NO.utf32@B", "no_NO_B" /* not: "nb_NO_B" [alan ICU3.0] */ }, /* POSIX ID */
1798f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "qz-qz@Euro", "qz_QZ@Euro", "qz_QZ@currency=EUR" }, /* qz-qz uses private use iso codes */
1799f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "en-BOONT", "en_BOONT", "en__BOONT" }, /* registered name */
1800f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "de-1901", "de_1901", "de__1901" }, /* registered name */
1801f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "de-1906", "de_1906", "de__1906" }, /* registered name */
1802f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "sr-SP-Cyrl", "sr_SP_CYRL", "sr_Cyrl_RS" }, /* .NET name */
1803f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "sr-SP-Latn", "sr_SP_LATN", "sr_Latn_RS" }, /* .NET name */
1804f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "sr_YU_CYRILLIC", "sr_YU_CYRILLIC", "sr_Cyrl_RS" }, /* Linux name */
1805f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "uz-UZ-Cyrl", "uz_UZ_CYRL", "uz_Cyrl_UZ" }, /* .NET name */
1806f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "uz-UZ-Latn", "uz_UZ_LATN", "uz_Latn_UZ" }, /* .NET name */
1807f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "zh-CHS", "zh_CHS", "zh_Hans" }, /* .NET name */
1808f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "zh-CHT", "zh_CHT", "zh_Hant" }, /* .NET name This may change back to zh_Hant */
1809f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1810f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* posix behavior that used to be performed by getName */
1811f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "mr.utf8", "mr.utf8", "mr" },
1812f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "de-tv.koi8r", "de_TV.koi8r", "de_TV" },
1813f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "x-piglatin_ML.MBE", "x-piglatin_ML.MBE", "x-piglatin_ML" },
1814f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "i-cherokee_US.utf7", "i-cherokee_US.utf7", "i-cherokee_US" },
1815f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "x-filfli_MT_FILFLA.gb-18030", "x-filfli_MT_FILFLA.gb-18030", "x-filfli_MT_FILFLA" },
1816f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "no-no-ny.utf8@B", "no_NO_NY.utf8@B", "no_NO_NY_B" /* not: "nn_NO" [alan ICU3.0] */ }, /* @ ignored unless variant is empty */
1817f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1818f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* fleshing out canonicalization */
1819f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* trim space and sort keywords, ';' is separator so not present at end in canonical form */
1820f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "en_Hant_IL_VALLEY_GIRL@ currency = EUR; calendar = Japanese ;", "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR", "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR" },
1821f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* already-canonical ids are not changed */
1822f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR", "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR", "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR" },
1823f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* PRE_EURO and EURO conversions don't affect other keywords */
1824f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "es_ES_PREEURO@CALendar=Japanese", "es_ES_PREEURO@calendar=Japanese", "es_ES@calendar=Japanese;currency=ESP" },
1825f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "es_ES_EURO@SHOUT=zipeedeedoodah", "es_ES_EURO@shout=zipeedeedoodah", "es_ES@currency=EUR;shout=zipeedeedoodah" },
1826f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* currency keyword overrides PRE_EURO and EURO currency */
1827f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "es_ES_PREEURO@currency=EUR", "es_ES_PREEURO@currency=EUR", "es_ES@currency=EUR" },
1828f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "es_ES_EURO@currency=ESP", "es_ES_EURO@currency=ESP", "es_ES@currency=ESP" },
1829f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* norwegian is just too weird, if we handle things in their full generality */
1830f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "no-Hant-GB_NY@currency=$$$", "no_Hant_GB_NY@currency=$$$", "no_Hant_GB_NY@currency=$$$" /* not: "nn_Hant_GB@currency=$$$" [alan ICU3.0] */ },
1831f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1832f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* test cases reflecting internal resource bundle usage */
1833f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "root@kw=foo", "root@kw=foo", "root@kw=foo" },
1834f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "@calendar=gregorian", "@calendar=gregorian", "@calendar=gregorian" },
1835f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "ja_JP@calendar=Japanese", "ja_JP@calendar=Japanese", "ja_JP@calendar=Japanese" },
1836f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "ja_JP", "ja_JP", "ja_JP" },
1837f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1838f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* test case for "i-default" */
1839f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "i-default", NULL, NULL }
1840f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    };
1841f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1842f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const char* label[] = { "getName", "canonicalize" };
1843f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1844f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status = U_ZERO_ERROR;
1845f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t i, j, resultLen = 0, origResultLen;
1846f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char buffer[256];
1847f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1848f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (i=0; i < sizeof(testCases)/sizeof(testCases[0]); i++) {
1849f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        for (j=0; j<2; ++j) {
1850f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            const char* expected = (j==0) ? testCases[i].getNameID : testCases[i].canonicalID;
1851f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            *buffer = 0;
1852f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            status = U_ZERO_ERROR;
1853f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1854f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if (expected == NULL) {
1855f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                expected = uloc_getDefault();
1856f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
1857f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1858f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            /* log_verbose("testing %s -> %s\n", testCases[i], testCases[i].canonicalID); */
1859f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            origResultLen = _canonicalize(j, testCases[i].localeID, NULL, 0, &status);
1860f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if (status != U_BUFFER_OVERFLOW_ERROR) {
1861f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("FAIL: uloc_%s(%s) => %s, expected U_BUFFER_OVERFLOW_ERROR\n",
1862f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        label[j], testCases[i].localeID, u_errorName(status));
1863f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                continue;
1864f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
1865f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            status = U_ZERO_ERROR;
1866f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            resultLen = _canonicalize(j, testCases[i].localeID, buffer, sizeof(buffer), &status);
1867f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if (U_FAILURE(status)) {
1868f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("FAIL: uloc_%s(%s) => %s, expected U_ZERO_ERROR\n",
1869f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        label[j], testCases[i].localeID, u_errorName(status));
1870f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                continue;
1871f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
1872f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if(uprv_strcmp(expected, buffer) != 0) {
1873f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("FAIL: uloc_%s(%s) => \"%s\", expected \"%s\"\n",
1874f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        label[j], testCases[i].localeID, buffer, expected);
1875f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            } else {
1876f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_verbose("Ok: uloc_%s(%s) => \"%s\"\n",
1877f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                            label[j], testCases[i].localeID, buffer);
1878f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
1879f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if (resultLen != (int32_t)strlen(buffer)) {
1880f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("FAIL: uloc_%s(%s) => len %d, expected len %d\n",
1881f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        label[j], testCases[i].localeID, resultLen, strlen(buffer));
1882f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
1883f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if (origResultLen != resultLen) {
1884f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("FAIL: uloc_%s(%s) => preflight len %d != actual len %d\n",
1885f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        label[j], testCases[i].localeID, origResultLen, resultLen);
1886f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
1887f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1888f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1889f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
1890f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1891f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestDisplayKeywords(void)
1892f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
1893f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t i;
1894f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1895f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const struct {
1896f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *localeID;
1897f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *displayLocale;
1898f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UChar displayKeyword[200];
1899f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    } testCases[] = {
1900f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {   "ca_ES@currency=ESP",         "de_AT",
1901f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            {0x0057, 0x00e4, 0x0068, 0x0072, 0x0075, 0x006e, 0x0067, 0x0000},
1902f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        },
1903f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {   "ja_JP@calendar=japanese",         "de",
1904f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            { 0x004b, 0x0061, 0x006c, 0x0065, 0x006e, 0x0064, 0x0065, 0x0072, 0x0000}
1905f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        },
1906f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {   "de_DE@collation=traditional",       "de_DE",
1907f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            {0x0053, 0x006f, 0x0072, 0x0074, 0x0069, 0x0065, 0x0072, 0x0075, 0x006e, 0x0067, 0x0000}
1908f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        },
1909f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    };
1910f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for(i = 0; i < sizeof(testCases)/sizeof(testCases[0]); i++) {
1911f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UErrorCode status = U_ZERO_ERROR;
1912f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* keyword =NULL;
1913f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        int32_t keywordLen = 0;
1914f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        int32_t keywordCount = 0;
1915f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UChar *displayKeyword=NULL;
1916f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        int32_t displayKeywordLen = 0;
1917f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UEnumeration* keywordEnum = uloc_openKeywords(testCases[i].localeID, &status);
1918f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        for(keywordCount = uenum_count(keywordEnum, &status); keywordCount > 0 ; keywordCount--){
1919f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              if(U_FAILURE(status)){
1920f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  log_err("uloc_getKeywords failed for locale id: %s with error : %s \n", testCases[i].localeID, u_errorName(status));
1921f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  break;
1922f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              }
1923f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              /* the uenum_next returns NUL terminated string */
1924f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              keyword = uenum_next(keywordEnum, &keywordLen, &status);
1925f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              /* fetch the displayKeyword */
1926f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              displayKeywordLen = uloc_getDisplayKeyword(keyword, testCases[i].displayLocale, displayKeyword, displayKeywordLen, &status);
1927f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              if(status==U_BUFFER_OVERFLOW_ERROR){
1928f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  status = U_ZERO_ERROR;
1929f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  displayKeywordLen++; /* for null termination */
1930f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  displayKeyword = (UChar*) malloc(displayKeywordLen * U_SIZEOF_UCHAR);
1931f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  displayKeywordLen = uloc_getDisplayKeyword(keyword, testCases[i].displayLocale, displayKeyword, displayKeywordLen, &status);
1932f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  if(U_FAILURE(status)){
1933f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                      log_err("uloc_getDisplayKeyword filed for keyword : %s in locale id: %s for display locale: %s \n", testCases[i].localeID, keyword, testCases[i].displayLocale, u_errorName(status));
1934f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                      break;
1935f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  }
1936f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  if(u_strncmp(displayKeyword, testCases[i].displayKeyword, displayKeywordLen)!=0){
1937f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                      if (status == U_USING_DEFAULT_WARNING) {
1938f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                          log_data_err("uloc_getDisplayKeyword did not get the expected value for keyword : %s in locale id: %s for display locale: %s . Got error: %s. Perhaps you are missing data?\n", testCases[i].localeID, keyword, testCases[i].displayLocale, u_errorName(status));
1939f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                      } else {
1940f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                          log_err("uloc_getDisplayKeyword did not get the expected value for keyword : %s in locale id: %s for display locale: %s \n", testCases[i].localeID, keyword, testCases[i].displayLocale);
1941f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                      }
1942f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                      break;
1943f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  }
1944f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              }else{
1945f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  log_err("uloc_getDisplayKeyword did not return the expected error. Error: %s\n", u_errorName(status));
1946f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              }
1947f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1948f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              free(displayKeyword);
1949f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1950f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
1951f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        uenum_close(keywordEnum);
1952f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
1953f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
1954f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1955f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestDisplayKeywordValues(void){
1956f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t i;
1957f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1958f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const struct {
1959f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *localeID;
1960f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *displayLocale;
1961f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UChar displayKeywordValue[500];
1962f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    } testCases[] = {
1963f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {   "ca_ES@currency=ESP",         "de_AT",
1964f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            {0x0053, 0x0070, 0x0061, 0x006e, 0x0069, 0x0073, 0x0063, 0x0068, 0x0065, 0x0020, 0x0050, 0x0065, 0x0073, 0x0065, 0x0074, 0x0061, 0x0000}
1965f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        },
1966f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {   "de_AT@currency=ATS",         "fr_FR",
1967f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            {0x0073, 0x0063, 0x0068, 0x0069, 0x006c, 0x006c, 0x0069, 0x006e, 0x0067, 0x0020, 0x0061, 0x0075, 0x0074, 0x0072, 0x0069, 0x0063, 0x0068, 0x0069, 0x0065, 0x006e, 0x0000}
1968f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        },
1969f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "de_DE@currency=DEM",         "it",
1970f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            {0x004d, 0x0061, 0x0072, 0x0063, 0x006f, 0x0020, 0x0054, 0x0065, 0x0064, 0x0065, 0x0073, 0x0063, 0x006f, 0x0000}
1971f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        },
1972f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {   "el_GR@currency=GRD",         "en",
1973f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            {0x0047, 0x0072, 0x0065, 0x0065, 0x006b, 0x0020, 0x0044, 0x0072, 0x0061, 0x0063, 0x0068, 0x006d, 0x0061, 0x0000}
1974f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        },
1975f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {   "eu_ES@currency=ESP",         "it_IT",
1976f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            {0x0050, 0x0065, 0x0073, 0x0065, 0x0074, 0x0061, 0x0020, 0x0053, 0x0070, 0x0061, 0x0067, 0x006e, 0x006f, 0x006c, 0x0061, 0x0000}
1977f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        },
1978f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        {   "de@collation=phonebook",     "es",
1979f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            {0x006F, 0x0072, 0x0064, 0x0065, 0x006E, 0x0020, 0x0064, 0x0065, 0x0020, 0x006C, 0x0069, 0x0073, 0x0074, 0x00ED, 0x006E, 0x0020, 0x0074, 0x0065, 0x006C, 0x0065, 0x0066, 0x00F3, 0x006E, 0x0069, 0x0063, 0x006F, 0x0000}
1980f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        },
1981f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
1982f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "de_DE@collation=phonebook",  "es",
1983f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)          {0x006F, 0x0072, 0x0064, 0x0065, 0x006E, 0x0020, 0x0064, 0x0065, 0x0020, 0x006C, 0x0069, 0x0073, 0x0074, 0x00ED, 0x006E, 0x0020, 0x0074, 0x0065, 0x006C, 0x0065, 0x0066, 0x00F3, 0x006E, 0x0069, 0x0063, 0x006F, 0x0000}
1984f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        },
1985f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "es_ES@collation=traditional","de",
1986f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)          {0x0054, 0x0072, 0x0061, 0x0064, 0x0069, 0x0074, 0x0069, 0x006f, 0x006e, 0x0065, 0x006c, 0x006c, 0x0065, 0x0020, 0x0053, 0x006f, 0x0072, 0x0074, 0x0069, 0x0065, 0x0072, 0x0072, 0x0065, 0x0067, 0x0065, 0x006c, 0x006e, 0x0000}
1987f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        },
1988f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "ja_JP@calendar=japanese",    "de",
1989f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)           {0x004a, 0x0061, 0x0070, 0x0061, 0x006e, 0x0069, 0x0073, 0x0063, 0x0068, 0x0065, 0x0072, 0x0020, 0x004b, 0x0061, 0x006c, 0x0065, 0x006e, 0x0064, 0x0065, 0x0072, 0x0000}
1990f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        },
1991f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    };
1992f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for(i = 0; i < sizeof(testCases)/sizeof(testCases[0]); i++) {
1993f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UErrorCode status = U_ZERO_ERROR;
1994f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* keyword =NULL;
1995f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        int32_t keywordLen = 0;
1996f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        int32_t keywordCount = 0;
1997f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UChar *displayKeywordValue = NULL;
1998f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        int32_t displayKeywordValueLen = 0;
1999f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UEnumeration* keywordEnum = uloc_openKeywords(testCases[i].localeID, &status);
2000f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        for(keywordCount = uenum_count(keywordEnum, &status); keywordCount > 0 ; keywordCount--){
2001f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              if(U_FAILURE(status)){
2002f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  log_err("uloc_getKeywords failed for locale id: %s in display locale: % with error : %s \n", testCases[i].localeID, testCases[i].displayLocale, u_errorName(status));
2003f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  break;
2004f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              }
2005f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              /* the uenum_next returns NUL terminated string */
2006f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              keyword = uenum_next(keywordEnum, &keywordLen, &status);
2007f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2008f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              /* fetch the displayKeywordValue */
2009f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              displayKeywordValueLen = uloc_getDisplayKeywordValue(testCases[i].localeID, keyword, testCases[i].displayLocale, displayKeywordValue, displayKeywordValueLen, &status);
2010f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              if(status==U_BUFFER_OVERFLOW_ERROR){
2011f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  status = U_ZERO_ERROR;
2012f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  displayKeywordValueLen++; /* for null termination */
2013f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  displayKeywordValue = (UChar*)malloc(displayKeywordValueLen * U_SIZEOF_UCHAR);
2014f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  displayKeywordValueLen = uloc_getDisplayKeywordValue(testCases[i].localeID, keyword, testCases[i].displayLocale, displayKeywordValue, displayKeywordValueLen, &status);
2015f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  if(U_FAILURE(status)){
2016f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                      log_err("uloc_getDisplayKeywordValue failed for keyword : %s in locale id: %s for display locale: %s with error : %s \n", testCases[i].localeID, keyword, testCases[i].displayLocale, u_errorName(status));
2017f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                      break;
2018f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  }
2019f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  if(u_strncmp(displayKeywordValue, testCases[i].displayKeywordValue, displayKeywordValueLen)!=0){
2020f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                      if (status == U_USING_DEFAULT_WARNING) {
2021f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                          log_data_err("uloc_getDisplayKeywordValue did not return the expected value keyword : %s in locale id: %s for display locale: %s with error : %s Perhaps you are missing data\n", testCases[i].localeID, keyword, testCases[i].displayLocale, u_errorName(status));
2022f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                      } else {
2023f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                          log_err("uloc_getDisplayKeywordValue did not return the expected value keyword : %s in locale id: %s for display locale: %s with error : %s \n", testCases[i].localeID, keyword, testCases[i].displayLocale, u_errorName(status));
2024f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                      }
2025f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                      break;
2026f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  }
2027f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              }else{
2028f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  log_err("uloc_getDisplayKeywordValue did not return the expected error. Error: %s\n", u_errorName(status));
2029f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              }
2030f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              free(displayKeywordValue);
2031f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2032f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        uenum_close(keywordEnum);
2033f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2034f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
2035f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* test a multiple keywords */
2036f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UErrorCode status = U_ZERO_ERROR;
2037f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* keyword =NULL;
2038f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        int32_t keywordLen = 0;
2039f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        int32_t keywordCount = 0;
2040f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* localeID = "es@collation=phonebook;calendar=buddhist;currency=DEM";
2041f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* displayLocale = "de";
2042f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        static const UChar expected[][50] = {
2043f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            {0x0042, 0x0075, 0x0064, 0x0064, 0x0068, 0x0069, 0x0073, 0x0074, 0x0069, 0x0073, 0x0063, 0x0068, 0x0065, 0x0072, 0x0020, 0x004b, 0x0061, 0x006c, 0x0065, 0x006e, 0x0064, 0x0065, 0x0072, 0x0000},
2044f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2045f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            {0x0054, 0x0065, 0x006c, 0x0065, 0x0066, 0x006f, 0x006e, 0x0062, 0x0075, 0x0063, 0x0068, 0x002d, 0x0053, 0x006f, 0x0072, 0x0074, 0x0069, 0x0065, 0x0072, 0x0072, 0x0065, 0x0067, 0x0065, 0x006c, 0x006e, 0x0000},
2046f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            {0x0044, 0x0065, 0x0075, 0x0074, 0x0073, 0x0063, 0x0068, 0x0065, 0x0020, 0x004d, 0x0061, 0x0072, 0x006b, 0x0000},
2047f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        };
2048f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2049f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UEnumeration* keywordEnum = uloc_openKeywords(localeID, &status);
2050f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2051f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        for(keywordCount = 0; keywordCount < uenum_count(keywordEnum, &status) ; keywordCount++){
2052f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              UChar *displayKeywordValue = NULL;
2053f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              int32_t displayKeywordValueLen = 0;
2054f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              if(U_FAILURE(status)){
2055f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  log_err("uloc_getKeywords failed for locale id: %s in display locale: % with error : %s \n", localeID, displayLocale, u_errorName(status));
2056f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  break;
2057f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              }
2058f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              /* the uenum_next returns NUL terminated string */
2059f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              keyword = uenum_next(keywordEnum, &keywordLen, &status);
2060f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2061f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              /* fetch the displayKeywordValue */
2062f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              displayKeywordValueLen = uloc_getDisplayKeywordValue(localeID, keyword, displayLocale, displayKeywordValue, displayKeywordValueLen, &status);
2063f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              if(status==U_BUFFER_OVERFLOW_ERROR){
2064f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  status = U_ZERO_ERROR;
2065f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  displayKeywordValueLen++; /* for null termination */
2066f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  displayKeywordValue = (UChar*)malloc(displayKeywordValueLen * U_SIZEOF_UCHAR);
2067f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  displayKeywordValueLen = uloc_getDisplayKeywordValue(localeID, keyword, displayLocale, displayKeywordValue, displayKeywordValueLen, &status);
2068f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  if(U_FAILURE(status)){
2069f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                      log_err("uloc_getDisplayKeywordValue failed for keyword : %s in locale id: %s for display locale: %s with error : %s \n", localeID, keyword, displayLocale, u_errorName(status));
2070f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                      break;
2071f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  }
2072f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  if(u_strncmp(displayKeywordValue, expected[keywordCount], displayKeywordValueLen)!=0){
2073f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                      if (status == U_USING_DEFAULT_WARNING) {
2074f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                          log_data_err("uloc_getDisplayKeywordValue did not return the expected value keyword : %s in locale id: %s for display locale: %s  got error: %s. Perhaps you are missing data?\n", localeID, keyword, displayLocale, u_errorName(status));
2075f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                      } else {
2076f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                          log_err("uloc_getDisplayKeywordValue did not return the expected value keyword : %s in locale id: %s for display locale: %s \n", localeID, keyword, displayLocale);
2077f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                      }
2078f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                      break;
2079f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  }
2080f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              }else{
2081f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                  log_err("uloc_getDisplayKeywordValue did not return the expected error. Error: %s\n", u_errorName(status));
2082f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              }
2083f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              free(displayKeywordValue);
2084f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2085f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        uenum_close(keywordEnum);
2086f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2087f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2088f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
2089f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* Test non existent keywords */
2090f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UErrorCode status = U_ZERO_ERROR;
2091f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* localeID = "es";
2092f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* displayLocale = "de";
2093f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UChar *displayKeywordValue = NULL;
2094f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        int32_t displayKeywordValueLen = 0;
2095f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2096f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* fetch the displayKeywordValue */
2097f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        displayKeywordValueLen = uloc_getDisplayKeywordValue(localeID, "calendar", displayLocale, displayKeywordValue, displayKeywordValueLen, &status);
2098f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(U_FAILURE(status)) {
2099f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)          log_err("uloc_getDisplaykeywordValue returned error status %s\n", u_errorName(status));
2100f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        } else if(displayKeywordValueLen != 0) {
2101f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)          log_err("uloc_getDisplaykeywordValue returned %d should be 0 \n", displayKeywordValueLen);
2102f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2103f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2104f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2105f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2106f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2107f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestGetBaseName(void) {
2108f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const struct {
2109f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *localeID;
2110f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *baseName;
2111f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    } testCases[] = {
2112f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "de_DE@  C o ll A t i o n   = Phonebook   ", "de_DE" },
2113f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "de@currency = euro; CoLLaTion   = PHONEBOOk", "de" },
2114f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "ja@calendar = buddhist", "ja" }
2115f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    };
2116f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2117f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t i = 0, baseNameLen = 0;
2118f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char baseName[256];
2119f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status = U_ZERO_ERROR;
2120f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2121f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for(i = 0; i < sizeof(testCases)/sizeof(testCases[0]); i++) {
2122f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        baseNameLen = uloc_getBaseName(testCases[i].localeID, baseName, 256, &status);
2123f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(strcmp(testCases[i].baseName, baseName)) {
2124f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("For locale \"%s\" expected baseName \"%s\", but got \"%s\"\n",
2125f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                testCases[i].localeID, testCases[i].baseName, baseName);
2126f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            return;
2127f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2128f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2129f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2130f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2131f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestTrailingNull(void) {
2132f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  const char* localeId = "zh_Hans";
2133f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  UChar buffer[128]; /* sufficient for this test */
2134f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  int32_t len;
2135f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  UErrorCode status = U_ZERO_ERROR;
2136f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  int i;
2137f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2138f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  len = uloc_getDisplayName(localeId, localeId, buffer, 128, &status);
2139f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  if (len > 128) {
2140f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    log_err("buffer too small");
2141f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    return;
2142f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }
2143f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2144f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  for (i = 0; i < len; ++i) {
2145f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (buffer[i] == 0) {
2146f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      log_err("name contained null");
2147f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      return;
2148f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2149f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }
2150f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2151f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2152f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* Jitterbug 4115 */
2153f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestDisplayNameWarning(void) {
2154f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar name[256];
2155f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t size;
2156f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status = U_ZERO_ERROR;
2157f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2158f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    size = uloc_getDisplayLanguage("qqq", "kl", name, sizeof(name)/sizeof(name[0]), &status);
2159f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (status != U_USING_DEFAULT_WARNING) {
2160f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("For language \"qqq\" in locale \"kl\", expecting U_USING_DEFAULT_WARNING, but got %s\n",
2161f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            u_errorName(status));
2162f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2163f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2164f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2165f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2166f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
2167f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Compare two locale IDs.  If they are equal, return 0.  If `string'
2168f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * starts with `prefix' plus an additional element, that is, string ==
2169f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * prefix + '_' + x, then return 1.  Otherwise return a value < 0.
2170f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
2171f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static UBool _loccmp(const char* string, const char* prefix) {
2172f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t slen = (int32_t)uprv_strlen(string),
2173f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            plen = (int32_t)uprv_strlen(prefix);
2174f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t c = uprv_strncmp(string, prefix, plen);
2175f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* 'root' is less than everything */
2176f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (uprv_strcmp(prefix, "root") == 0) {
2177f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return (uprv_strcmp(string, "root") == 0) ? 0 : 1;
2178f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2179f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (c) return -1; /* mismatch */
2180f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (slen == plen) return 0;
2181f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (string[plen] == '_') return 1;
2182f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    return -2; /* false match, e.g. "en_USX" cmp "en_US" */
2183f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2184f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2185f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void _checklocs(const char* label,
2186f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                       const char* req,
2187f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                       const char* valid,
2188f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                       const char* actual) {
2189f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* We want the valid to be strictly > the bogus requested locale,
2190f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)       and the valid to be >= the actual. */
2191f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (_loccmp(req, valid) > 0 &&
2192f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        _loccmp(valid, actual) >= 0) {
2193f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_verbose("%s; req=%s, valid=%s, actual=%s\n",
2194f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    label, req, valid, actual);
2195f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    } else {
2196f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("FAIL: %s; req=%s, valid=%s, actual=%s\n",
2197f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                label, req, valid, actual);
2198f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2199f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2200f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2201f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestGetLocale(void) {
2202f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode ec = U_ZERO_ERROR;
2203f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UParseError pe;
2204f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar EMPTY[1] = {0};
2205f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2206f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* === udat === */
2207f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if !UCONFIG_NO_FORMATTING
2208f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
2209f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UDateFormat *obj;
2210f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *req = "en_US_REDWOODSHORES", *valid, *actual;
2211f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        obj = udat_open(UDAT_DEFAULT, UDAT_DEFAULT,
2212f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        req,
2213f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        NULL, 0,
2214f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        NULL, 0, &ec);
2215f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(ec)) {
2216f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_data_err("udat_open failed.Error %s\n", u_errorName(ec));
2217f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            return;
2218f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2219f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        valid = udat_getLocaleByType(obj, ULOC_VALID_LOCALE, &ec);
2220f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        actual = udat_getLocaleByType(obj, ULOC_ACTUAL_LOCALE, &ec);
2221f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(ec)) {
2222f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("udat_getLocaleByType() failed\n");
2223f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            return;
2224f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2225f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        _checklocs("udat", req, valid, actual);
2226f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        udat_close(obj);
2227f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2228f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
2229f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2230f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* === ucal === */
2231f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if !UCONFIG_NO_FORMATTING
2232f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
2233f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UCalendar *obj;
2234f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *req = "fr_FR_PROVENCAL", *valid, *actual;
2235f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        obj = ucal_open(NULL, 0,
2236f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        req,
2237f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        UCAL_GREGORIAN,
2238f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        &ec);
2239f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(ec)) {
2240f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("ucal_open failed with error: %s\n", u_errorName(ec));
2241f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            return;
2242f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2243f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        valid = ucal_getLocaleByType(obj, ULOC_VALID_LOCALE, &ec);
2244f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        actual = ucal_getLocaleByType(obj, ULOC_ACTUAL_LOCALE, &ec);
2245f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(ec)) {
2246f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("ucal_getLocaleByType() failed\n");
2247f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            return;
2248f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2249f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        _checklocs("ucal", req, valid, actual);
2250f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        ucal_close(obj);
2251f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2252f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
2253f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2254f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* === unum === */
2255f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if !UCONFIG_NO_FORMATTING
2256f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
2257f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UNumberFormat *obj;
2258f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *req = "zh_Hant_TW_TAINAN", *valid, *actual;
2259f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        obj = unum_open(UNUM_DECIMAL,
2260f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        NULL, 0,
2261f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        req,
2262f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        &pe, &ec);
2263f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(ec)) {
2264f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("unum_open failed\n");
2265f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            return;
2266f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2267f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        valid = unum_getLocaleByType(obj, ULOC_VALID_LOCALE, &ec);
2268f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        actual = unum_getLocaleByType(obj, ULOC_ACTUAL_LOCALE, &ec);
2269f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(ec)) {
2270f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("unum_getLocaleByType() failed\n");
2271f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            return;
2272f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2273f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        _checklocs("unum", req, valid, actual);
2274f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        unum_close(obj);
2275f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2276f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
2277f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2278f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* === umsg === */
2279f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if 0
2280f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* commented out by weiv 01/12/2005. umsg_getLocaleByType is to be removed */
2281f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if !UCONFIG_NO_FORMATTING
2282f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
2283f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UMessageFormat *obj;
2284f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *req = "ja_JP_TAKAYAMA", *valid, *actual;
2285f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UBool test;
2286f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        obj = umsg_open(EMPTY, 0,
2287f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        req,
2288f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        &pe, &ec);
2289f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(ec)) {
2290f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("umsg_open failed\n");
2291f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            return;
2292f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2293f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        valid = umsg_getLocaleByType(obj, ULOC_VALID_LOCALE, &ec);
2294f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        actual = umsg_getLocaleByType(obj, ULOC_ACTUAL_LOCALE, &ec);
2295f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(ec)) {
2296f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("umsg_getLocaleByType() failed\n");
2297f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            return;
2298f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2299f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* We want the valid to be strictly > the bogus requested locale,
2300f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)           and the valid to be >= the actual. */
2301f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* TODO MessageFormat is currently just storing the locale it is given.
2302f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)           As a result, it will return whatever it was given, even if the
2303f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)           locale is invalid. */
2304f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        test = (_cmpversion("3.2") <= 0) ?
2305f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            /* Here is the weakened test for 3.0: */
2306f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            (_loccmp(req, valid) >= 0) :
2307f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            /* Here is what the test line SHOULD be: */
2308f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            (_loccmp(req, valid) > 0);
2309f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2310f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (test &&
2311f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            _loccmp(valid, actual) >= 0) {
2312f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_verbose("umsg; req=%s, valid=%s, actual=%s\n", req, valid, actual);
2313f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        } else {
2314f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("FAIL: umsg; req=%s, valid=%s, actual=%s\n", req, valid, actual);
2315f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2316f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        umsg_close(obj);
2317f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2318f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
2319f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
2320f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2321f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* === ubrk === */
2322f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if !UCONFIG_NO_BREAK_ITERATION
2323f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
2324f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UBreakIterator *obj;
2325f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *req = "ar_KW_ABDALI", *valid, *actual;
2326f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        obj = ubrk_open(UBRK_WORD,
2327f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        req,
2328f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        EMPTY,
2329f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        0,
2330f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                        &ec);
2331f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(ec)) {
2332f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("ubrk_open failed. Error: %s \n", u_errorName(ec));
2333f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            return;
2334f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2335f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        valid = ubrk_getLocaleByType(obj, ULOC_VALID_LOCALE, &ec);
2336f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        actual = ubrk_getLocaleByType(obj, ULOC_ACTUAL_LOCALE, &ec);
2337f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(ec)) {
2338f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("ubrk_getLocaleByType() failed\n");
2339f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            return;
2340f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2341f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        _checklocs("ubrk", req, valid, actual);
2342f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        ubrk_close(obj);
2343f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2344f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
2345f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2346f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* === ucol === */
2347f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if !UCONFIG_NO_COLLATION
2348f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
2349f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UCollator *obj;
2350f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *req = "es_AR_BUENOSAIRES", *valid, *actual;
2351f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        obj = ucol_open(req, &ec);
2352f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(ec)) {
2353f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("ucol_open failed - %s\n", u_errorName(ec));
2354f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            return;
2355f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2356f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        valid = ucol_getLocaleByType(obj, ULOC_VALID_LOCALE, &ec);
2357f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        actual = ucol_getLocaleByType(obj, ULOC_ACTUAL_LOCALE, &ec);
2358f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(ec)) {
2359f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("ucol_getLocaleByType() failed\n");
2360f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            return;
2361f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2362f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        _checklocs("ucol", req, valid, actual);
2363f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        ucol_close(obj);
2364f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2365f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
2366f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2367f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2368f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestNonexistentLanguageExemplars(void) {
2369f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* JB 4068 - Nonexistent language */
2370f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode ec = U_ZERO_ERROR;
2371f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ULocaleData *uld = ulocdata_open("qqq",&ec);
2372f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (ec != U_USING_DEFAULT_WARNING) {
2373f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err_status(ec, "Exemplar set for \"qqq\", expecting U_USING_DEFAULT_WARNING, but got %s\n",
2374f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            u_errorName(ec));
2375f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2376f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    uset_close(ulocdata_getExemplarSet(uld, NULL, 0, ULOCDATA_ES_STANDARD, &ec));
2377f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ulocdata_close(uld);
2378f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2379f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2380f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestLocDataErrorCodeChaining(void) {
2381f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode ec = U_USELESS_COLLATOR_ERROR;
2382f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ulocdata_open(NULL, &ec);
2383f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ulocdata_getExemplarSet(NULL, NULL, 0, ULOCDATA_ES_STANDARD, &ec);
2384f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ulocdata_getDelimiter(NULL, ULOCDATA_DELIMITER_COUNT, NULL, -1, &ec);
2385f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ulocdata_getMeasurementSystem(NULL, &ec);
2386f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ulocdata_getPaperSize(NULL, NULL, NULL, &ec);
2387f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (ec != U_USELESS_COLLATOR_ERROR) {
2388f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("ulocdata API changed the error code to %s\n", u_errorName(ec));
2389f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2390f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2391f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2392f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestLanguageExemplarsFallbacks(void) {
2393f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* Test that en_US fallsback, but en doesn't fallback. */
2394f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode ec = U_ZERO_ERROR;
2395f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ULocaleData *uld = ulocdata_open("en_US",&ec);
2396f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    uset_close(ulocdata_getExemplarSet(uld, NULL, 0, ULOCDATA_ES_STANDARD, &ec));
2397f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (ec != U_USING_FALLBACK_WARNING) {
2398f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err_status(ec, "Exemplar set for \"en_US\", expecting U_USING_FALLBACK_WARNING, but got %s\n",
2399f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            u_errorName(ec));
2400f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2401f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ulocdata_close(uld);
2402f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ec = U_ZERO_ERROR;
2403f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    uld = ulocdata_open("en",&ec);
2404f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    uset_close(ulocdata_getExemplarSet(uld, NULL, 0, ULOCDATA_ES_STANDARD, &ec));
2405f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (ec != U_ZERO_ERROR) {
2406f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err_status(ec, "Exemplar set for \"en\", expecting U_ZERO_ERROR, but got %s\n",
2407f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            u_errorName(ec));
2408f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2409f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ulocdata_close(uld);
2410f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2411f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2412f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static const char *acceptResult(UAcceptResult uar) {
2413f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    return  udbg_enumName(UDBG_UAcceptResult, uar);
2414f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2415f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2416f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestAcceptLanguage(void) {
2417f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status = U_ZERO_ERROR;
2418f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UAcceptResult outResult;
2419f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UEnumeration *available;
2420f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char tmp[200];
2421f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int i;
2422f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t rc = 0;
2423f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2424f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    struct {
2425f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        int32_t httpSet;       /**< Which of http[] should be used? */
2426f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *icuSet;    /**< ? */
2427f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char *expect;    /**< The expected locale result */
2428f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UAcceptResult res;     /**< The expected error code */
2429f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    } tests[] = {
2430f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /*0*/{ 0, NULL, "mt_MT", ULOC_ACCEPT_VALID },
2431f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /*1*/{ 1, NULL, "en", ULOC_ACCEPT_VALID },
2432f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /*2*/{ 2, NULL, "en", ULOC_ACCEPT_FALLBACK },
2433f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /*3*/{ 3, NULL, "", ULOC_ACCEPT_FAILED },
2434f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /*4*/{ 4, NULL, "es", ULOC_ACCEPT_VALID },
2435f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2436f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /*5*/{ 5, NULL, "en", ULOC_ACCEPT_VALID },  /* XF */
2437f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /*6*/{ 6, NULL, "ja", ULOC_ACCEPT_FALLBACK },  /* XF */
2438f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /*7*/{ 7, NULL, "zh", ULOC_ACCEPT_FALLBACK },  /* XF */
2439f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    };
2440f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const int32_t numTests = sizeof(tests)/sizeof(tests[0]);
2441f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const char *http[] = {
2442f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /*0*/ "mt-mt, ja;q=0.76, en-us;q=0.95, en;q=0.92, en-gb;q=0.89, fr;q=0.87, iu-ca;q=0.84, iu;q=0.82, ja-jp;q=0.79, mt;q=0.97, de-de;q=0.74, de;q=0.71, es;q=0.68, it-it;q=0.66, it;q=0.63, vi-vn;q=0.61, vi;q=0.58, nl-nl;q=0.55, nl;q=0.53, th-th-traditional;q=.01",
2443f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /*1*/ "ja;q=0.5, en;q=0.8, tlh",
2444f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /*2*/ "en-wf, de-lx;q=0.8",
2445f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /*3*/ "mga-ie;q=0.9, tlh",
2446f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /*4*/ "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "
2447f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "
2448f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "
2449f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "
2450f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "
2451f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "
2452f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xx-yy;q=.1, "
2453f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)              "es",
2454f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2455f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /*5*/ "zh-xx;q=0.9, en;q=0.6",
2456f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /*6*/ "ja-JA",
2457f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /*7*/ "zh-xx;q=0.9",
2458f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    };
2459f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2460f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for(i=0;i<numTests;i++) {
2461f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        outResult = -3;
2462f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status=U_ZERO_ERROR;
2463f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_verbose("test #%d: http[%s], ICU[%s], expect %s, %s\n",
2464f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            i, http[tests[i].httpSet], tests[i].icuSet, tests[i].expect, acceptResult(tests[i].res));
2465f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2466f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        available = ures_openAvailableLocales(tests[i].icuSet, &status);
2467f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        tmp[0]=0;
2468f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        rc = uloc_acceptLanguageFromHTTP(tmp, 199, &outResult, http[tests[i].httpSet], available, &status);
2469f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        uenum_close(available);
2470f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_verbose(" got %s, %s [%s]\n", tmp[0]?tmp:"(EMPTY)", acceptResult(outResult), u_errorName(status));
2471f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(outResult != tests[i].res) {
2472f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err_status(status, "FAIL: #%d: expected outResult of %s but got %s\n", i,
2473f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                acceptResult( tests[i].res),
2474f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                acceptResult( outResult));
2475f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_info("test #%d: http[%s], ICU[%s], expect %s, %s\n",
2476f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                i, http[tests[i].httpSet], tests[i].icuSet, tests[i].expect,acceptResult(tests[i].res));
2477f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2478f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if((outResult>0)&&uprv_strcmp(tmp, tests[i].expect)) {
2479f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err_status(status, "FAIL: #%d: expected %s but got %s\n", i, tests[i].expect, tmp);
2480f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_info("test #%d: http[%s], ICU[%s], expect %s, %s\n",
2481f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                i, http[tests[i].httpSet], tests[i].icuSet, tests[i].expect, acceptResult(tests[i].res));
2482f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2483f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2484f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2485f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2486f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static const char* LOCALE_ALIAS[][2] = {
2487f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"in", "id"},
2488f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"in_ID", "id_ID"},
2489f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"iw", "he"},
2490f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"iw_IL", "he_IL"},
2491f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"ji", "yi"},
2492f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en_BU", "en_MM"},
2493f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en_DY", "en_BJ"},
2494f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en_HV", "en_BF"},
2495f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en_NH", "en_VU"},
2496f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en_RH", "en_ZW"},
2497f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en_TP", "en_TL"},
2498f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en_ZR", "en_CD"}
2499f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)};
2500f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static UBool isLocaleAvailable(UResourceBundle* resIndex, const char* loc){
2501f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status = U_ZERO_ERROR;
2502f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t len = 0;
2503f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ures_getStringByKey(resIndex, loc,&len, &status);
2504f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(U_FAILURE(status)){
2505f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return FALSE;
2506f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2507f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    return TRUE;
2508f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2509f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2510f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestCalendar() {
2511f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if !UCONFIG_NO_FORMATTING
2512f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int i;
2513f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status = U_ZERO_ERROR;
2514f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UResourceBundle *resIndex = ures_open(NULL,"res_index", &status);
2515f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(U_FAILURE(status)){
2516f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err_status(status, "Could not open res_index.res. Exiting. Error: %s\n", u_errorName(status));
2517f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return;
2518f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2519f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (i=0; i<LENGTHOF(LOCALE_ALIAS); i++) {
2520f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* oldLoc = LOCALE_ALIAS[i][0];
2521f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* newLoc = LOCALE_ALIAS[i][1];
2522f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UCalendar* c1 = NULL;
2523f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UCalendar* c2 = NULL;
2524f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2525f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /*Test function "getLocale(ULocale.VALID_LOCALE)"*/
2526f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* l1 = ucal_getLocaleByType(c1, ULOC_VALID_LOCALE, &status);
2527f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* l2 = ucal_getLocaleByType(c2, ULOC_VALID_LOCALE, &status);
2528f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2529f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(!isLocaleAvailable(resIndex, newLoc)){
2530f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            continue;
2531f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2532f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        c1 = ucal_open(NULL, -1, oldLoc, UCAL_GREGORIAN, &status);
2533f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        c2 = ucal_open(NULL, -1, newLoc, UCAL_GREGORIAN, &status);
2534f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2535f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (strcmp(newLoc,l1)!=0 || strcmp(l1,l2)!=0 || status!=U_ZERO_ERROR) {
2536f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("The locales are not equal!.Old: %s, New: %s \n", oldLoc, newLoc);
2537f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2538f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_verbose("ucal_getLocaleByType old:%s   new:%s\n", l1, l2);
2539f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        ucal_close(c1);
2540f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        ucal_close(c2);
2541f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2542f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ures_close(resIndex);
2543f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
2544f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2545f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2546f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestDateFormat() {
2547f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if !UCONFIG_NO_FORMATTING
2548f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int i;
2549f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status = U_ZERO_ERROR;
2550f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UResourceBundle *resIndex = ures_open(NULL,"res_index", &status);
2551f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(U_FAILURE(status)){
2552f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err_status(status, "Could not open res_index.res. Exiting. Error: %s\n", u_errorName(status));
2553f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return;
2554f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2555f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (i=0; i<LENGTHOF(LOCALE_ALIAS); i++) {
2556f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* oldLoc = LOCALE_ALIAS[i][0];
2557f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* newLoc = LOCALE_ALIAS[i][1];
2558f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UDateFormat* df1 = NULL;
2559f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UDateFormat* df2 = NULL;
2560f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* l1 = NULL;
2561f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* l2 = NULL;
2562f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2563f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(!isLocaleAvailable(resIndex, newLoc)){
2564f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            continue;
2565f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2566f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        df1 = udat_open(UDAT_FULL, UDAT_FULL,oldLoc, NULL, 0, NULL, -1, &status);
2567f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        df2 = udat_open(UDAT_FULL, UDAT_FULL,newLoc, NULL, 0, NULL, -1, &status);
2568f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(U_FAILURE(status)){
2569f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("Creation of date format failed  %s\n", u_errorName(status));
2570f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            return;
2571f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2572f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /*Test function "getLocale"*/
2573f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        l1 = udat_getLocaleByType(df1, ULOC_VALID_LOCALE, &status);
2574f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        l2 = udat_getLocaleByType(df2, ULOC_VALID_LOCALE, &status);
2575f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(U_FAILURE(status)){
2576f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("Fetching the locale by type failed.  %s\n", u_errorName(status));
2577f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2578f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (strcmp(newLoc,l1)!=0 || strcmp(l1,l2)!=0) {
2579f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("The locales are not equal!.Old: %s, New: %s \n", oldLoc, newLoc);
2580f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2581f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_verbose("udat_getLocaleByType old:%s   new:%s\n", l1, l2);
2582f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        udat_close(df1);
2583f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        udat_close(df2);
2584f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2585f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ures_close(resIndex);
2586f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
2587f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2588f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2589f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestCollation() {
2590f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if !UCONFIG_NO_COLLATION
2591f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int i;
2592f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status = U_ZERO_ERROR;
2593f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UResourceBundle *resIndex = ures_open(NULL,"res_index", &status);
2594f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(U_FAILURE(status)){
2595f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err_status(status, "Could not open res_index.res. Exiting. Error: %s\n", u_errorName(status));
2596f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return;
2597f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2598f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (i=0; i<LENGTHOF(LOCALE_ALIAS); i++) {
2599f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* oldLoc = LOCALE_ALIAS[i][0];
2600f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* newLoc = LOCALE_ALIAS[i][1];
2601f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UCollator* c1 = NULL;
2602f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UCollator* c2 = NULL;
2603f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* l1 = NULL;
2604f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* l2 = NULL;
2605f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2606f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status = U_ZERO_ERROR;
2607f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(!isLocaleAvailable(resIndex, newLoc)){
2608f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            continue;
2609f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2610f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(U_FAILURE(status)){
2611f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("Creation of collators failed  %s\n", u_errorName(status));
2612f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            return;
2613f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2614f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        c1 = ucol_open(oldLoc, &status);
2615f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        c2 = ucol_open(newLoc, &status);
2616f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        l1 = ucol_getLocaleByType(c1, ULOC_VALID_LOCALE, &status);
2617f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        l2 = ucol_getLocaleByType(c2, ULOC_VALID_LOCALE, &status);
2618f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(U_FAILURE(status)){
2619f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("Fetching the locale names failed failed  %s\n", u_errorName(status));
2620f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2621f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (strcmp(newLoc,l1)!=0 || strcmp(l1,l2)!=0) {
2622f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("The locales are not equal!.Old: %s, New: %s \n", oldLoc, newLoc);
2623f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2624f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_verbose("ucol_getLocaleByType old:%s   new:%s\n", l1, l2);
2625f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        ucol_close(c1);
2626f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        ucol_close(c2);
2627f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2628f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ures_close(resIndex);
2629f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
2630f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2631f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2632f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)typedef struct OrientationStructTag {
2633f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char* localeId;
2634f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ULayoutType character;
2635f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ULayoutType line;
2636f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} OrientationStruct;
2637f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2638f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static const char* ULayoutTypeToString(ULayoutType type)
2639f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
2640f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    switch(type)
2641f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
2642f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    case ULOC_LAYOUT_LTR:
2643f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return "ULOC_LAYOUT_LTR";
2644f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        break;
2645f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    case ULOC_LAYOUT_RTL:
2646f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return "ULOC_LAYOUT_RTL";
2647f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        break;
2648f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    case ULOC_LAYOUT_TTB:
2649f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return "ULOC_LAYOUT_TTB";
2650f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        break;
2651f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    case ULOC_LAYOUT_BTT:
2652f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return "ULOC_LAYOUT_BTT";
2653f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        break;
2654f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    case ULOC_LAYOUT_UNKNOWN:
2655f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        break;
2656f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2657f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2658f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    return "Unknown enum value for ULayoutType!";
2659f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2660f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2661f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void  TestOrientation()
2662f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
2663f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    static const OrientationStruct toTest [] = {
2664f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "ar", ULOC_LAYOUT_RTL, ULOC_LAYOUT_TTB },
2665f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "aR", ULOC_LAYOUT_RTL, ULOC_LAYOUT_TTB },
2666f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "ar_Arab", ULOC_LAYOUT_RTL, ULOC_LAYOUT_TTB },
2667f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "fa", ULOC_LAYOUT_RTL, ULOC_LAYOUT_TTB },
2668f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "Fa", ULOC_LAYOUT_RTL, ULOC_LAYOUT_TTB },
2669f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "he", ULOC_LAYOUT_RTL, ULOC_LAYOUT_TTB },
2670f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "ps", ULOC_LAYOUT_RTL, ULOC_LAYOUT_TTB },
2671f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "ur", ULOC_LAYOUT_RTL, ULOC_LAYOUT_TTB },
2672f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "UR", ULOC_LAYOUT_RTL, ULOC_LAYOUT_TTB },
2673f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        { "en", ULOC_LAYOUT_LTR, ULOC_LAYOUT_TTB }
2674f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    };
2675f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2676f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    size_t i = 0;
2677f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (; i < sizeof(toTest) / sizeof(toTest[0]); ++i) {
2678f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UErrorCode statusCO = U_ZERO_ERROR;
2679f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UErrorCode statusLO = U_ZERO_ERROR;
2680f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* const localeId = toTest[i].localeId;
2681f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const ULayoutType co = uloc_getCharacterOrientation(localeId, &statusCO);
2682f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const ULayoutType expectedCO = toTest[i].character;
2683f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const ULayoutType lo = uloc_getLineOrientation(localeId, &statusLO);
2684f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const ULayoutType expectedLO = toTest[i].line;
2685f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(statusCO)) {
2686f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err_status(statusCO,
2687f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                "  unexpected failure for uloc_getCharacterOrientation(), with localId \"%s\" and status %s\n",
2688f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                localeId,
2689f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                u_errorName(statusCO));
2690f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2691f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else if (co != expectedCO) {
2692f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err(
2693f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                "  unexpected result for uloc_getCharacterOrientation(), with localeId \"%s\". Expected %s but got result %s\n",
2694f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                localeId,
2695f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                ULayoutTypeToString(expectedCO),
2696f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                ULayoutTypeToString(co));
2697f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2698f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(statusLO)) {
2699f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err_status(statusLO,
2700f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                "  unexpected failure for uloc_getLineOrientation(), with localId \"%s\" and status %s\n",
2701f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                localeId,
2702f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                u_errorName(statusLO));
2703f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2704f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else if (lo != expectedLO) {
2705f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err(
2706f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                "  unexpected result for uloc_getLineOrientation(), with localeId \"%s\". Expected %s but got result %s\n",
2707f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                localeId,
2708f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                ULayoutTypeToString(expectedLO),
2709f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                ULayoutTypeToString(lo));
2710f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2711f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2712f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2713f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2714f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void  TestULocale() {
2715f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int i;
2716f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status = U_ZERO_ERROR;
2717f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UResourceBundle *resIndex = ures_open(NULL,"res_index", &status);
2718f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(U_FAILURE(status)){
2719f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err_status(status, "Could not open res_index.res. Exiting. Error: %s\n", u_errorName(status));
2720f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return;
2721f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2722f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (i=0; i<LENGTHOF(LOCALE_ALIAS); i++) {
2723f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* oldLoc = LOCALE_ALIAS[i][0];
2724f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* newLoc = LOCALE_ALIAS[i][1];
2725f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UChar name1[256], name2[256];
2726f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        char names1[256], names2[256];
2727f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        int32_t capacity = 256;
2728f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2729f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status = U_ZERO_ERROR;
2730f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(!isLocaleAvailable(resIndex, newLoc)){
2731f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            continue;
2732f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2733f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        uloc_getDisplayName(oldLoc, ULOC_US, name1, capacity, &status);
2734f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(U_FAILURE(status)){
2735f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("uloc_getDisplayName(%s) failed %s\n", oldLoc, u_errorName(status));
2736f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2737f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2738f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        uloc_getDisplayName(newLoc, ULOC_US, name2, capacity, &status);
2739f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(U_FAILURE(status)){
2740f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("uloc_getDisplayName(%s) failed %s\n", newLoc, u_errorName(status));
2741f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2742f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2743f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (u_strcmp(name1, name2)!=0) {
2744f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("The locales are not equal!.Old: %s, New: %s \n", oldLoc, newLoc);
2745f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2746f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        u_austrcpy(names1, name1);
2747f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        u_austrcpy(names2, name2);
2748f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_verbose("uloc_getDisplayName old:%s   new:%s\n", names1, names2);
2749f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2750f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ures_close(resIndex);
2751f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2752f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2753f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2754f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestUResourceBundle() {
2755f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char* us1;
2756f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char* us2;
2757f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2758f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UResourceBundle* rb1 = NULL;
2759f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UResourceBundle* rb2 = NULL;
2760f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status = U_ZERO_ERROR;
2761f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int i;
2762f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UResourceBundle *resIndex = NULL;
2763f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if(U_FAILURE(status)){
2764f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("Could not open res_index.res. Exiting. Error: %s\n", u_errorName(status));
2765f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return;
2766f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2767f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    resIndex = ures_open(NULL,"res_index", &status);
2768f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (i=0; i<LENGTHOF(LOCALE_ALIAS); i++) {
2769f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2770f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* oldLoc = LOCALE_ALIAS[i][0];
2771f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* newLoc = LOCALE_ALIAS[i][1];
2772f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if(!isLocaleAvailable(resIndex, newLoc)){
2773f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            continue;
2774f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2775f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        rb1 = ures_open(NULL, oldLoc, &status);
2776f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(status)) {
2777f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("ures_open(%s) failed %s\n", oldLoc, u_errorName(status));
2778f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2779f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2780f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        us1 = ures_getLocaleByType(rb1, ULOC_ACTUAL_LOCALE, &status);
2781f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2782f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status = U_ZERO_ERROR;
2783f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        rb2 = ures_open(NULL, newLoc, &status);
2784f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(status)) {
2785f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("ures_open(%s) failed %s\n", oldLoc, u_errorName(status));
2786f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2787f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        us2 = ures_getLocaleByType(rb2, ULOC_ACTUAL_LOCALE, &status);
2788f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2789f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (strcmp(us1,newLoc)!=0 || strcmp(us1,us2)!=0 ) {
2790f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("The locales are not equal!.Old: %s, New: %s \n", oldLoc, newLoc);
2791f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2792f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2793f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_verbose("ures_getStringByKey old:%s   new:%s\n", us1, us2);
2794f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        ures_close(rb1);
2795f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        rb1 = NULL;
2796f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        ures_close(rb2);
2797f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        rb2 = NULL;
2798f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2799f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ures_close(resIndex);
2800f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2801f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2802f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestDisplayName() {
2803f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2804f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar oldCountry[256] = {'\0'};
2805f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar newCountry[256] = {'\0'};
2806f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar oldLang[256] = {'\0'};
2807f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UChar newLang[256] = {'\0'};
2808f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char country[256] ={'\0'};
2809f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char language[256] ={'\0'};
2810f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t capacity = 256;
2811f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int i =0;
2812f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int j=0;
2813f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (i=0; i<LENGTHOF(LOCALE_ALIAS); i++) {
2814f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* oldLoc = LOCALE_ALIAS[i][0];
2815f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* newLoc = LOCALE_ALIAS[i][1];
2816f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UErrorCode status = U_ZERO_ERROR;
2817f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        int32_t available = uloc_countAvailable();
2818f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2819f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        for(j=0; j<available; j++){
2820f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2821f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            const char* dispLoc = uloc_getAvailable(j);
2822f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            int32_t oldCountryLen = uloc_getDisplayCountry(oldLoc,dispLoc, oldCountry, capacity, &status);
2823f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            int32_t newCountryLen = uloc_getDisplayCountry(newLoc, dispLoc, newCountry, capacity, &status);
2824f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            int32_t oldLangLen = uloc_getDisplayLanguage(oldLoc, dispLoc, oldLang, capacity, &status);
2825f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            int32_t newLangLen = uloc_getDisplayLanguage(newLoc, dispLoc, newLang, capacity, &status );
2826f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2827f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            int32_t countryLen = uloc_getCountry(newLoc, country, capacity, &status);
2828f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            int32_t langLen  = uloc_getLanguage(newLoc, language, capacity, &status);
2829f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            /* there is a display name for the current country ID */
2830f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if(countryLen != newCountryLen ){
2831f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                if(u_strncmp(oldCountry,newCountry,oldCountryLen)!=0){
2832f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    log_err("uloc_getDisplayCountry() failed for %s in display locale %s \n", oldLoc, dispLoc);
2833f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                }
2834f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
2835f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            /* there is a display name for the current lang ID */
2836f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if(langLen!=newLangLen){
2837f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                if(u_strncmp(oldLang,newLang,oldLangLen)){
2838f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    log_err("uloc_getDisplayLanguage() failed for %s in display locale %s \n", oldLoc, dispLoc);                }
2839f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
2840f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2841f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2842f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2843f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2844f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestGetLocaleForLCID() {
2845f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t i, length, lengthPre;
2846f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char* testLocale = 0;
2847f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status = U_ZERO_ERROR;
2848f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char            temp2[40], temp3[40];
2849f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    uint32_t lcid;
2850f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2851f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    lcid = uloc_getLCID("en_US");
2852f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (lcid != 0x0409) {
2853f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("  uloc_getLCID(\"en_US\") = %d, expected 0x0409\n", lcid);
2854f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2855f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2856f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    lengthPre = uloc_getLocaleForLCID(lcid, temp2, 4, &status);
2857f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (status != U_BUFFER_OVERFLOW_ERROR) {
2858f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("  unexpected result from uloc_getLocaleForLCID with small buffer: %s\n", u_errorName(status));
2859f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2860f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    else {
2861f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status = U_ZERO_ERROR;
2862f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2863f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2864f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    length = uloc_getLocaleForLCID(lcid, temp2, sizeof(temp2)/sizeof(char), &status);
2865f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (U_FAILURE(status)) {
2866f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("  unexpected result from uloc_getLocaleForLCID(0x0409): %s\n", u_errorName(status));
2867f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status = U_ZERO_ERROR;
2868f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2869f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2870f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (length != lengthPre) {
2871f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("  uloc_getLocaleForLCID(0x0409): returned length %d does not match preflight length %d\n", length, lengthPre);
2872f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2873f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2874f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    length = uloc_getLocaleForLCID(0x12345, temp2, sizeof(temp2)/sizeof(char), &status);
2875f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (U_SUCCESS(status)) {
2876f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_err("  unexpected result from uloc_getLocaleForLCID(0x12345): %s, status %s\n", temp2, u_errorName(status));
2877f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2878f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    status = U_ZERO_ERROR;
2879f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2880f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    log_verbose("Testing getLocaleForLCID vs. locale data\n");
2881f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (i = 0; i < LOCALE_SIZE; i++) {
2882f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2883f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        testLocale=rawData2[NAME][i];
2884f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2885f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        log_verbose("Testing   %s ......\n", testLocale);
2886f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2887f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        sscanf(rawData2[LCID][i], "%x", &lcid);
2888f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        length = uloc_getLocaleForLCID(lcid, temp2, sizeof(temp2)/sizeof(char), &status);
2889f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(status)) {
2890f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("  unexpected failure of uloc_getLocaleForLCID(%#04x), status %s\n", lcid, u_errorName(status));
2891f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            status = U_ZERO_ERROR;
2892f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            continue;
2893f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2894f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2895f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (length != uprv_strlen(temp2)) {
2896f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("  returned length %d not correct for uloc_getLocaleForLCID(%#04x), expected %d\n", length, lcid, uprv_strlen(temp2));
2897f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2898f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2899f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* Compare language, country, script */
2900f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        length = uloc_getLanguage(temp2, temp3, sizeof(temp3)/sizeof(char), &status);
2901f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(status)) {
2902f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("  couldn't get language in uloc_getLocaleForLCID(%#04x) = %s, status %s\n", lcid, temp2, u_errorName(status));
2903f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            status = U_ZERO_ERROR;
2904f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2905f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else if (uprv_strcmp(temp3, rawData2[LANG][i]) && !(uprv_strcmp(temp3, "nn") == 0 && uprv_strcmp(rawData2[VAR][i], "NY") == 0)) {
2906f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("  language doesn't match expected %s in in uloc_getLocaleForLCID(%#04x) = %s\n", rawData2[LANG][i], lcid, temp2);
2907f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2908f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2909f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        length = uloc_getScript(temp2, temp3, sizeof(temp3)/sizeof(char), &status);
2910f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(status)) {
2911f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("  couldn't get script in uloc_getLocaleForLCID(%#04x) = %s, status %s\n", lcid, temp2, u_errorName(status));
2912f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            status = U_ZERO_ERROR;
2913f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2914f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else if (uprv_strcmp(temp3, rawData2[SCRIPT][i])) {
2915f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("  script doesn't match expected %s in in uloc_getLocaleForLCID(%#04x) = %s\n", rawData2[SCRIPT][i], lcid, temp2);
2916f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2917f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2918f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        length = uloc_getCountry(temp2, temp3, sizeof(temp3)/sizeof(char), &status);
2919f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(status)) {
2920f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("  couldn't get country in uloc_getLocaleForLCID(%#04x) = %s, status %s\n", lcid, temp2, u_errorName(status));
2921f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            status = U_ZERO_ERROR;
2922f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2923f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else if (uprv_strlen(rawData2[CTRY][i]) && uprv_strcmp(temp3, rawData2[CTRY][i])) {
2924f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("  country doesn't match expected %s in in uloc_getLocaleForLCID(%#04x) = %s\n", rawData2[CTRY][i], lcid, temp2);
2925f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
2926f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
2927f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2928f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
2929f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
2930f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)const char* const basic_maximize_data[][2] = {
2931f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  {
2932f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zu_Zzzz_Zz",
2933f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zu_Latn_ZA",
2934f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2935f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ZU_Zz",
2936f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zu_Latn_ZA"
2937f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2938f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zu_LATN",
2939f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zu_Latn_ZA"
2940f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2941f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Zz",
2942f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_US"
2943f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2944f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_us",
2945f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_US"
2946f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2947f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Kore",
2948f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Kore_US"
2949f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2950f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Kore_Zz",
2951f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Kore_US"
2952f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2953f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Kore_ZA",
2954f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Kore_ZA"
2955f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2956f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Kore_ZA_POSIX",
2957f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Kore_ZA_POSIX"
2958f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2959f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Gujr",
2960f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Gujr_US"
2961f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2962f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_ZA",
2963f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_ZA"
2964f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2965f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Gujr_Zz",
2966f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Gujr_US"
2967f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2968f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Gujr_ZA",
2969f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Gujr_ZA"
2970f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2971f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Gujr_ZA_POSIX",
2972f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Gujr_ZA_POSIX"
2973f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2974f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_US_POSIX_1901",
2975f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_US_POSIX_1901"
2976f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2977f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn__POSIX_1901",
2978f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_US_POSIX_1901"
2979f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2980f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en__POSIX_1901",
2981f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_US_POSIX_1901"
2982f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2983f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "de__POSIX_1901",
2984f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "de_Latn_DE_POSIX_1901"
2985f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2986f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_US_BOSTON",
2987f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_US_BOSTON"
2988f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2989f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "th@calendar=buddhist",
2990f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "th_Thai_TH@calendar=buddhist"
2991f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2992f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_ZZ",
2993f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_EG"
2994f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2995f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh",
2996f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_CN"
2997f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
2998f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_TW",
2999f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_TW"
3000f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3001f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_HK",
3002f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_HK"
3003f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3004f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant",
3005f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_TW"
3006f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3007f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Zzzz_CN",
3008f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_CN"
3009f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3010f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_US",
3011f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_US"
3012f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3013f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_HK",
3014f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_HK"
3015f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3016f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zzz",
3017f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
3018f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }
3019f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)};
3020f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
3021f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)const char* const basic_minimize_data[][2] = {
3022f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  {
3023f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_US",
3024f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en"
3025f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3026f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_US_POSIX_1901",
3027f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en__POSIX_1901"
3028f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3029f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "EN_Latn_US_POSIX_1901",
3030f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en__POSIX_1901"
3031f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3032f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Zzzz_US_POSIX_1901",
3033f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en__POSIX_1901"
3034f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3035f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "de_Latn_DE_POSIX_1901",
3036f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "de__POSIX_1901"
3037f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3038f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und",
3039f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
3040f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }
3041f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)};
3042f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
3043f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)const char* const full_data[][3] = {
3044f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  {
3045f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /*   "FROM", */
3046f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /*   "ADD-LIKELY", */
3047f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /*   "REMOVE-LIKELY" */
3048f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* }, { */
3049f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "aa",
3050f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "aa_Latn_ET",
3051f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "aa"
3052f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3053f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "af",
3054f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "af_Latn_ZA",
3055f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "af"
3056f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3057f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ak",
3058f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ak_Latn_GH",
3059f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ak"
3060f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3061f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "am",
3062f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "am_Ethi_ET",
3063f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "am"
3064f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3065f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar",
3066f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_EG",
3067f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar"
3068f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3069f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "as",
3070f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "as_Beng_IN",
3071f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "as"
3072f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3073f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "az",
3074f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "az_Latn_AZ",
3075f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "az"
3076f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3077f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "be",
3078f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "be_Cyrl_BY",
3079f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "be"
3080f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3081f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bg",
3082f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bg_Cyrl_BG",
3083f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bg"
3084f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3085f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bn",
3086f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bn_Beng_BD",
3087f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bn"
3088f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3089f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bo",
3090f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bo_Tibt_CN",
3091f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bo"
3092f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3093f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bs",
3094f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bs_Latn_BA",
3095f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bs"
3096f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3097f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ca",
3098f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ca_Latn_ES",
3099f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ca"
3100f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3101f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ch",
3102f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ch_Latn_GU",
3103f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ch"
3104f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3105f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "chk",
3106f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "chk_Latn_FM",
3107f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "chk"
3108f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3109f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "cs",
3110f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "cs_Latn_CZ",
3111f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "cs"
3112f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3113f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "cy",
3114f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "cy_Latn_GB",
3115f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "cy"
3116f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3117f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "da",
3118f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "da_Latn_DK",
3119f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "da"
3120f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3121f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "de",
3122f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "de_Latn_DE",
3123f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "de"
3124f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3125f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "dv",
3126f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "dv_Thaa_MV",
3127f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "dv"
3128f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3129f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "dz",
3130f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "dz_Tibt_BT",
3131f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "dz"
3132f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3133f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ee",
3134f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ee_Latn_GH",
3135f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ee"
3136f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3137f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "el",
3138f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "el_Grek_GR",
3139f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "el"
3140f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3141f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en",
3142f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_US",
3143f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en"
3144f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3145f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es",
3146f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_ES",
3147f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es"
3148f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3149f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "et",
3150f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "et_Latn_EE",
3151f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "et"
3152f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3153f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "eu",
3154f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "eu_Latn_ES",
3155f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "eu"
3156f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3157f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fa",
3158f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fa_Arab_IR",
3159f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fa"
3160f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3161f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fi",
3162f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fi_Latn_FI",
3163f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fi"
3164f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3165f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fil",
3166f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fil_Latn_PH",
3167f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fil"
3168f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3169f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fo",
3170f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fo_Latn_FO",
3171f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fo"
3172f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3173f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr",
3174f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_FR",
3175f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr"
3176f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3177f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fur",
3178f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fur_Latn_IT",
3179f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fur"
3180f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3181f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ga",
3182f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ga_Latn_IE",
3183f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ga"
3184f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3185f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "gaa",
3186f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "gaa_Latn_GH",
3187f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "gaa"
3188f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3189f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "gl",
3190f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "gl_Latn_ES",
3191f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "gl"
3192f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3193f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "gn",
3194f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "gn_Latn_PY",
3195f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "gn"
3196f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3197f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "gu",
3198f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "gu_Gujr_IN",
3199f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "gu"
3200f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3201f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ha",
3202f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ha_Latn_NG",
3203f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ha"
3204f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3205f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "haw",
3206f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "haw_Latn_US",
3207f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "haw"
3208f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3209f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "he",
3210f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "he_Hebr_IL",
3211f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "he"
3212f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3213f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hi",
3214f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hi_Deva_IN",
3215f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hi"
3216f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3217f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hr",
3218f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hr_Latn_HR",
3219f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hr"
3220f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3221f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ht",
3222f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ht_Latn_HT",
3223f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ht"
3224f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3225f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hu",
3226f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hu_Latn_HU",
3227f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hu"
3228f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3229f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hy",
3230f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hy_Armn_AM",
3231f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hy"
3232f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3233f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "id",
3234f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "id_Latn_ID",
3235f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "id"
3236f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3237f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ig",
3238f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ig_Latn_NG",
3239f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ig"
3240f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3241f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ii",
3242f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ii_Yiii_CN",
3243f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ii"
3244f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3245f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "is",
3246f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "is_Latn_IS",
3247f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "is"
3248f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3249f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "it",
3250f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "it_Latn_IT",
3251f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "it"
3252f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3253f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ja",
3254f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ja_Jpan_JP",
3255f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ja"
3256f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3257f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ka",
3258f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ka_Geor_GE",
3259f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ka"
3260f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3261f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kaj",
3262f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kaj_Latn_NG",
3263f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kaj"
3264f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3265f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kam",
3266f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kam_Latn_KE",
3267f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kam"
3268f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3269f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kk",
3270f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kk_Cyrl_KZ",
3271f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kk"
3272f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3273f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kl",
3274f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kl_Latn_GL",
3275f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kl"
3276f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3277f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "km",
3278f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "km_Khmr_KH",
3279f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "km"
3280f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3281f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kn",
3282f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kn_Knda_IN",
3283f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kn"
3284f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3285f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ko",
3286f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ko_Kore_KR",
3287f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ko"
3288f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3289f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kok",
3290f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kok_Deva_IN",
3291f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kok"
3292f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3293f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kpe",
3294f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kpe_Latn_LR",
3295f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kpe"
3296f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3297f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ku",
3298f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ku_Arab_IQ",
3299f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ku"
3300f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3301f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ky",
3302f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ky_Cyrl_KG",
3303f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ky"
3304f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3305f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "la",
3306f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "la_Latn_VA",
3307f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "la"
3308f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3309f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ln",
3310f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ln_Latn_CD",
3311f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ln"
3312f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3313f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "lo",
3314f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "lo_Laoo_LA",
3315f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "lo"
3316f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3317f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "lt",
3318f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "lt_Latn_LT",
3319f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "lt"
3320f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3321f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "lv",
3322f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "lv_Latn_LV",
3323f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "lv"
3324f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3325f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mg",
3326f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mg_Latn_MG",
3327f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mg"
3328f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3329f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mh",
3330f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mh_Latn_MH",
3331f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mh"
3332f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3333f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mk",
3334f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mk_Cyrl_MK",
3335f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mk"
3336f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3337f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ml",
3338f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ml_Mlym_IN",
3339f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ml"
3340f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3341f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mn",
3342f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mn_Cyrl_MN",
3343f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mn"
3344f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3345f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mr",
3346f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mr_Deva_IN",
3347f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mr"
3348f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3349f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ms",
3350f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ms_Latn_MY",
3351f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ms"
3352f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3353f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mt",
3354f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mt_Latn_MT",
3355f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mt"
3356f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3357f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "my",
3358f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "my_Mymr_MM",
3359f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "my"
3360f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3361f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "na",
3362f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "na_Latn_NR",
3363f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "na"
3364f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3365f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ne",
3366f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ne_Deva_NP",
3367f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ne"
3368f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3369f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "niu",
3370f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "niu_Latn_NU",
3371f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "niu"
3372f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3373f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nl",
3374f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nl_Latn_NL",
3375f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nl"
3376f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3377f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nn",
3378f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nn_Latn_NO",
3379f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nn"
3380f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3381f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nr",
3382f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nr_Latn_ZA",
3383f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nr"
3384f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3385f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nso",
3386f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nso_Latn_ZA",
3387f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nso"
3388f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3389f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ny",
3390f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ny_Latn_MW",
3391f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ny"
3392f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3393f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "om",
3394f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "om_Latn_ET",
3395f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "om"
3396f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3397f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "or",
3398f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "or_Orya_IN",
3399f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "or"
3400f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3401f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pa",
3402f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pa_Guru_IN",
3403f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pa"
3404f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3405f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pa_Arab",
3406f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pa_Arab_PK",
3407f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pa_PK"
3408f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3409f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pa_PK",
3410f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pa_Arab_PK",
3411f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pa_PK"
3412f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3413f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pap",
3414f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pap_Latn_AN",
3415f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pap"
3416f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3417f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pau",
3418f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pau_Latn_PW",
3419f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pau"
3420f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3421f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pl",
3422f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pl_Latn_PL",
3423f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pl"
3424f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3425f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ps",
3426f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ps_Arab_AF",
3427f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ps"
3428f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3429f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pt",
3430f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pt_Latn_BR",
3431f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pt"
3432f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3433f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "rn",
3434f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "rn_Latn_BI",
3435f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "rn"
3436f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3437f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ro",
3438f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ro_Latn_RO",
3439f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ro"
3440f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3441f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ru",
3442f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ru_Cyrl_RU",
3443f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ru"
3444f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3445f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "rw",
3446f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "rw_Latn_RW",
3447f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "rw"
3448f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3449f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sa",
3450f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sa_Deva_IN",
3451f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sa"
3452f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3453f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "se",
3454f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "se_Latn_NO",
3455f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "se"
3456f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3457f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sg",
3458f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sg_Latn_CF",
3459f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sg"
3460f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3461f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "si",
3462f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "si_Sinh_LK",
3463f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "si"
3464f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3465f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sid",
3466f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sid_Latn_ET",
3467f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sid"
3468f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3469f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sk",
3470f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sk_Latn_SK",
3471f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sk"
3472f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3473f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sl",
3474f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sl_Latn_SI",
3475f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sl"
3476f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3477f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sm",
3478f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sm_Latn_WS",
3479f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sm"
3480f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3481f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "so",
3482f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "so_Latn_SO",
3483f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "so"
3484f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3485f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sq",
3486f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sq_Latn_AL",
3487f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sq"
3488f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3489f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sr",
3490f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sr_Cyrl_RS",
3491f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sr"
3492f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3493f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ss",
3494f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ss_Latn_ZA",
3495f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ss"
3496f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3497f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "st",
3498f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "st_Latn_ZA",
3499f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "st"
3500f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3501f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sv",
3502f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sv_Latn_SE",
3503f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sv"
3504f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3505f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sw",
3506f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sw_Latn_TZ",
3507f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sw"
3508f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3509f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ta",
3510f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ta_Taml_IN",
3511f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ta"
3512f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3513f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "te",
3514f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "te_Telu_IN",
3515f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "te"
3516f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3517f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tet",
3518f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tet_Latn_TL",
3519f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tet"
3520f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3521f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tg",
3522f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tg_Cyrl_TJ",
3523f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tg"
3524f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3525f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "th",
3526f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "th_Thai_TH",
3527f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "th"
3528f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3529f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ti",
3530f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ti_Ethi_ET",
3531f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ti"
3532f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3533f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tig",
3534f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tig_Ethi_ER",
3535f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tig"
3536f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3537f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tk",
3538f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tk_Latn_TM",
3539f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tk"
3540f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3541f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tkl",
3542f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tkl_Latn_TK",
3543f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tkl"
3544f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3545f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tn",
3546f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tn_Latn_ZA",
3547f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tn"
3548f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3549f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "to",
3550f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "to_Latn_TO",
3551f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "to"
3552f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3553f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tpi",
3554f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tpi_Latn_PG",
3555f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tpi"
3556f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3557f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tr",
3558f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tr_Latn_TR",
3559f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tr"
3560f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3561f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ts",
3562f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ts_Latn_ZA",
3563f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ts"
3564f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3565f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tt",
3566f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tt_Cyrl_RU",
3567f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tt"
3568f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3569f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tvl",
3570f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tvl_Latn_TV",
3571f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tvl"
3572f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3573f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ty",
3574f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ty_Latn_PF",
3575f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ty"
3576f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3577f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "uk",
3578f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "uk_Cyrl_UA",
3579f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "uk"
3580f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3581f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und",
3582f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_US",
3583f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en"
3584f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3585f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_AD",
3586f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ca_Latn_AD",
3587f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ca_AD"
3588f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3589f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_AE",
3590f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_AE",
3591f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_AE"
3592f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3593f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_AF",
3594f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fa_Arab_AF",
3595f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fa_AF"
3596f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3597f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_AL",
3598f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sq_Latn_AL",
3599f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sq"
3600f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3601f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_AM",
3602f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hy_Armn_AM",
3603f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hy"
3604f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3605f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_AN",
3606f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pap_Latn_AN",
3607f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pap"
3608f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3609f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_AO",
3610f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pt_Latn_AO",
3611f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pt_AO"
3612f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3613f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_AR",
3614f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_AR",
3615f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_AR"
3616f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3617f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_AS",
3618f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sm_Latn_AS",
3619f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sm_AS"
3620f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3621f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_AT",
3622f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "de_Latn_AT",
3623f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "de_AT"
3624f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3625f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_AW",
3626f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nl_Latn_AW",
3627f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nl_AW"
3628f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3629f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_AX",
3630f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sv_Latn_AX",
3631f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sv_AX"
3632f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3633f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_AZ",
3634f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "az_Latn_AZ",
3635f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "az"
3636f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3637f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Arab",
3638f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_EG",
3639f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar"
3640f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3641f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Arab_IN",
3642f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ur_Arab_IN",
3643f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ur_IN"
3644f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3645f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Arab_PK",
3646f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ur_Arab_PK",
3647f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ur"
3648f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3649f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Arab_SN",
3650f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_SN",
3651f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_SN"
3652f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3653f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Armn",
3654f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hy_Armn_AM",
3655f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hy"
3656f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3657f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_BA",
3658f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bs_Latn_BA",
3659f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bs"
3660f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3661f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_BD",
3662f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bn_Beng_BD",
3663f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bn"
3664f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3665f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_BE",
3666f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nl_Latn_BE",
3667f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nl_BE"
3668f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3669f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_BF",
3670f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_BF",
3671f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_BF"
3672f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3673f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_BG",
3674f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bg_Cyrl_BG",
3675f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bg"
3676f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3677f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_BH",
3678f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_BH",
3679f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_BH"
3680f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3681f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_BI",
3682f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "rn_Latn_BI",
3683f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "rn"
3684f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3685f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_BJ",
3686f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_BJ",
3687f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_BJ"
3688f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3689f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_BN",
3690f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ms_Latn_BN",
3691f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ms_BN"
3692f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3693f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_BO",
3694f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_BO",
3695f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_BO"
3696f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3697f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_BR",
3698f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pt_Latn_BR",
3699f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pt"
3700f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3701f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_BT",
3702f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "dz_Tibt_BT",
3703f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "dz"
3704f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3705f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_BY",
3706f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "be_Cyrl_BY",
3707f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "be"
3708f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3709f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Beng",
3710f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bn_Beng_BD",
3711f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bn"
3712f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3713f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Beng_IN",
3714f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bn_Beng_IN",
3715f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bn_IN"
3716f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3717f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_CD",
3718f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sw_Latn_CD",
3719f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sw_CD"
3720f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3721f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_CF",
3722f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_CF",
3723f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_CF"
3724f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3725f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_CG",
3726f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_CG",
3727f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_CG"
3728f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3729f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_CH",
3730f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "de_Latn_CH",
3731f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "de_CH"
3732f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3733f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_CI",
3734f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_CI",
3735f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_CI"
3736f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3737f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_CL",
3738f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_CL",
3739f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_CL"
3740f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3741f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_CM",
3742f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_CM",
3743f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_CM"
3744f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3745f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_CN",
3746f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_CN",
3747f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh"
3748f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3749f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_CO",
3750f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_CO",
3751f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_CO"
3752f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3753f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_CR",
3754f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_CR",
3755f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_CR"
3756f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3757f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_CU",
3758f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_CU",
3759f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_CU"
3760f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3761f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_CV",
3762f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pt_Latn_CV",
3763f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pt_CV"
3764f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3765f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_CY",
3766f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "el_Grek_CY",
3767f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "el_CY"
3768f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3769f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_CZ",
3770f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "cs_Latn_CZ",
3771f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "cs"
3772f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3773f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Cher",
3774f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "chr_Cher_US",
3775f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "chr"
3776f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3777f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Cyrl",
3778f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ru_Cyrl_RU",
3779f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ru"
3780f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3781f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Cyrl_KZ",
3782f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ru_Cyrl_KZ",
3783f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ru_KZ"
3784f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3785f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_DE",
3786f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "de_Latn_DE",
3787f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "de"
3788f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3789f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_DJ",
3790f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "aa_Latn_DJ",
3791f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "aa_DJ"
3792f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3793f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_DK",
3794f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "da_Latn_DK",
3795f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "da"
3796f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3797f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_DO",
3798f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_DO",
3799f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_DO"
3800f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3801f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_DZ",
3802f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_DZ",
3803f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_DZ"
3804f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3805f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Deva",
3806f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hi_Deva_IN",
3807f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hi"
3808f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3809f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_EC",
3810f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_EC",
3811f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_EC"
3812f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3813f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_EE",
3814f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "et_Latn_EE",
3815f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "et"
3816f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3817f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_EG",
3818f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_EG",
3819f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar"
3820f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3821f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_EH",
3822f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_EH",
3823f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_EH"
3824f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3825f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_ER",
3826f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ti_Ethi_ER",
3827f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ti_ER"
3828f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3829f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_ES",
3830f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_ES",
3831f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es"
3832f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3833f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_ET",
3834f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_ET",
3835f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_ET"
3836f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3837f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Ethi",
3838f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "am_Ethi_ET",
3839f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "am"
3840f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3841f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Ethi_ER",
3842f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "am_Ethi_ER",
3843f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "am_ER"
3844f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3845f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_FI",
3846f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fi_Latn_FI",
3847f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fi"
3848f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3849f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_FM",
3850f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "chk_Latn_FM",
3851f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "chk"
3852f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3853f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_FO",
3854f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fo_Latn_FO",
3855f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fo"
3856f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3857f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_FR",
3858f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_FR",
3859f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr"
3860f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3861f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_GA",
3862f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_GA",
3863f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_GA"
3864f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3865f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_GE",
3866f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ka_Geor_GE",
3867f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ka"
3868f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3869f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_GF",
3870f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_GF",
3871f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_GF"
3872f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3873f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_GL",
3874f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kl_Latn_GL",
3875f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kl"
3876f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3877f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_GN",
3878f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_GN",
3879f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_GN"
3880f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3881f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_GP",
3882f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_GP",
3883f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_GP"
3884f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3885f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_GQ",
3886f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_GQ",
3887f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_GQ"
3888f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3889f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_GR",
3890f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "el_Grek_GR",
3891f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "el"
3892f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3893f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_GT",
3894f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_GT",
3895f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_GT"
3896f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3897f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_GU",
3898f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_GU",
3899f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_GU"
3900f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3901f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_GW",
3902f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pt_Latn_GW",
3903f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pt_GW"
3904f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3905f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Geor",
3906f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ka_Geor_GE",
3907f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ka"
3908f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3909f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Grek",
3910f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "el_Grek_GR",
3911f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "el"
3912f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3913f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Gujr",
3914f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "gu_Gujr_IN",
3915f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "gu"
3916f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3917f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Guru",
3918f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pa_Guru_IN",
3919f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pa"
3920f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3921f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_HK",
3922f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_HK",
3923f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_HK"
3924f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3925f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_HN",
3926f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_HN",
3927f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_HN"
3928f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3929f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_HR",
3930f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hr_Latn_HR",
3931f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hr"
3932f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3933f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_HT",
3934f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ht_Latn_HT",
3935f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ht"
3936f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3937f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_HU",
3938f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hu_Latn_HU",
3939f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hu"
3940f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3941f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Hani",
3942f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_CN",
3943f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh"
3944f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3945f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Hans",
3946f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_CN",
3947f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh"
3948f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3949f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Hant",
3950f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_TW",
3951f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_TW"
3952f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3953f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Hebr",
3954f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "he_Hebr_IL",
3955f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "he"
3956f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3957f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_IL",
3958f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "he_Hebr_IL",
3959f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "he"
3960f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3961f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_IN",
3962f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hi_Deva_IN",
3963f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "hi"
3964f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3965f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_IQ",
3966f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_IQ",
3967f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_IQ"
3968f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3969f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_IR",
3970f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fa_Arab_IR",
3971f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fa"
3972f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3973f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_IS",
3974f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "is_Latn_IS",
3975f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "is"
3976f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3977f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_IT",
3978f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "it_Latn_IT",
3979f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "it"
3980f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3981f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_JO",
3982f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_JO",
3983f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_JO"
3984f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3985f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_JP",
3986f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ja_Jpan_JP",
3987f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ja"
3988f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3989f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Jpan",
3990f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ja_Jpan_JP",
3991f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ja"
3992f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3993f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_KG",
3994f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ky_Cyrl_KG",
3995f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ky"
3996f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
3997f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_KH",
3998f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "km_Khmr_KH",
3999f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "km"
4000f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4001f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_KM",
4002f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_KM",
4003f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_KM"
4004f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4005f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_KP",
4006f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ko_Kore_KP",
4007f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ko_KP"
4008f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4009f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_KR",
4010f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ko_Kore_KR",
4011f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ko"
4012f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4013f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_KW",
4014f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_KW",
4015f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_KW"
4016f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4017f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_KZ",
4018f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ru_Cyrl_KZ",
4019f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ru_KZ"
4020f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4021f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Khmr",
4022f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "km_Khmr_KH",
4023f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "km"
4024f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4025f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Knda",
4026f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kn_Knda_IN",
4027f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "kn"
4028f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4029f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Kore",
4030f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ko_Kore_KR",
4031f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ko"
4032f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4033f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_LA",
4034f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "lo_Laoo_LA",
4035f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "lo"
4036f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4037f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_LB",
4038f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_LB",
4039f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_LB"
4040f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4041f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_LI",
4042f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "de_Latn_LI",
4043f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "de_LI"
4044f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4045f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_LK",
4046f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "si_Sinh_LK",
4047f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "si"
4048f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4049f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_LS",
4050f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "st_Latn_LS",
4051f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "st_LS"
4052f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4053f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_LT",
4054f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "lt_Latn_LT",
4055f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "lt"
4056f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4057f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_LU",
4058f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_LU",
4059f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_LU"
4060f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4061f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_LV",
4062f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "lv_Latn_LV",
4063f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "lv"
4064f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4065f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_LY",
4066f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_LY",
4067f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_LY"
4068f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4069f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Laoo",
4070f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "lo_Laoo_LA",
4071f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "lo"
4072f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4073f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Latn_ES",
4074f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_ES",
4075f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es"
4076f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4077f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Latn_ET",
4078f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_ET",
4079f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_ET"
4080f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4081f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Latn_GB",
4082f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_GB",
4083f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_GB"
4084f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4085f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Latn_GH",
4086f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ak_Latn_GH",
4087f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ak"
4088f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4089f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Latn_ID",
4090f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "id_Latn_ID",
4091f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "id"
4092f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4093f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Latn_IT",
4094f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "it_Latn_IT",
4095f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "it"
4096f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4097f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Latn_NG",
4098f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_NG",
4099f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_NG"
4100f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4101f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Latn_TR",
4102f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tr_Latn_TR",
4103f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tr"
4104f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4105f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Latn_ZA",
4106f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_ZA",
4107f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_ZA"
4108f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4109f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_MA",
4110f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_MA",
4111f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_MA"
4112f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4113f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_MC",
4114f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_MC",
4115f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_MC"
4116f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4117f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_MD",
4118f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ro_Latn_MD",
4119f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ro_MD"
4120f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4121f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_ME",
4122f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sr_Latn_ME",
4123f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sr_ME"
4124f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4125f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_MG",
4126f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mg_Latn_MG",
4127f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mg"
4128f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4129f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_MH",
4130f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_MH",
4131f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_MH"
4132f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4133f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_MK",
4134f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mk_Cyrl_MK",
4135f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mk"
4136f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4137f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_ML",
4138f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bm_Latn_ML",
4139f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bm"
4140f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4141f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_MM",
4142f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "my_Mymr_MM",
4143f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "my"
4144f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4145f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_MN",
4146f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mn_Cyrl_MN",
4147f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mn"
4148f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4149f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_MO",
4150f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_MO",
4151f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_MO"
4152f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4153f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_MQ",
4154f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_MQ",
4155f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_MQ"
4156f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4157f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_MR",
4158f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_MR",
4159f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_MR"
4160f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4161f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_MT",
4162f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mt_Latn_MT",
4163f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "mt"
4164f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4165f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_MV",
4166f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "dv_Thaa_MV",
4167f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "dv"
4168f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4169f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_MW",
4170f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_MW",
4171f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_MW"
4172f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4173f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_MX",
4174f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_MX",
4175f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_MX"
4176f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4177f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_MY",
4178f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ms_Latn_MY",
4179f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ms"
4180f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4181f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_MZ",
4182f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pt_Latn_MZ",
4183f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pt_MZ"
4184f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4185f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Mlym",
4186f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ml_Mlym_IN",
4187f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ml"
4188f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4189f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Mymr",
4190f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "my_Mymr_MM",
4191f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "my"
4192f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4193f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_NC",
4194f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_NC",
4195f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_NC"
4196f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4197f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_NE",
4198f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ha_Latn_NE",
4199f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ha_NE"
4200f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4201f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_NG",
4202f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_NG",
4203f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_NG"
4204f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4205f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_NI",
4206f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_NI",
4207f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_NI"
4208f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4209f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_NL",
4210f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nl_Latn_NL",
4211f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nl"
4212f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4213f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_NO",
4214f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nb_Latn_NO",
4215f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nb"
4216f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4217f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_NP",
4218f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ne_Deva_NP",
4219f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ne"
4220f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4221f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_NR",
4222f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_NR",
4223f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_NR"
4224f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4225f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_NU",
4226f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_NU",
4227f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_NU"
4228f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4229f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_OM",
4230f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_OM",
4231f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_OM"
4232f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4233f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Orya",
4234f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "or_Orya_IN",
4235f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "or"
4236f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4237f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_PA",
4238f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_PA",
4239f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_PA"
4240f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4241f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_PE",
4242f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_PE",
4243f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_PE"
4244f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4245f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_PF",
4246f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_PF",
4247f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_PF"
4248f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4249f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_PG",
4250f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tpi_Latn_PG",
4251f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tpi"
4252f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4253f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_PH",
4254f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fil_Latn_PH",
4255f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fil"
4256f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4257f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_PL",
4258f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pl_Latn_PL",
4259f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pl"
4260f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4261f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_PM",
4262f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_PM",
4263f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_PM"
4264f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4265f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_PR",
4266f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_PR",
4267f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_PR"
4268f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4269f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_PS",
4270f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_PS",
4271f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_PS"
4272f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4273f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_PT",
4274f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pt_Latn_PT",
4275f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pt_PT"
4276f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4277f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_PW",
4278f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pau_Latn_PW",
4279f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pau"
4280f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4281f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_PY",
4282f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "gn_Latn_PY",
4283f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "gn"
4284f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4285f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_QA",
4286f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_QA",
4287f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_QA"
4288f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4289f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_RE",
4290f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_RE",
4291f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_RE"
4292f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4293f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_RO",
4294f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ro_Latn_RO",
4295f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ro"
4296f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4297f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_RS",
4298f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sr_Cyrl_RS",
4299f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sr"
4300f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4301f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_RU",
4302f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ru_Cyrl_RU",
4303f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ru"
4304f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4305f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_RW",
4306f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "rw_Latn_RW",
4307f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "rw"
4308f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4309f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_SA",
4310f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_SA",
4311f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_SA"
4312f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4313f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_SD",
4314f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_SD",
4315f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_SD"
4316f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4317f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_SE",
4318f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sv_Latn_SE",
4319f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sv"
4320f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4321f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_SG",
4322f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_SG",
4323f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_SG"
4324f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4325f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_SI",
4326f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sl_Latn_SI",
4327f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sl"
4328f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4329f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_SJ",
4330f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nb_Latn_SJ",
4331f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nb_SJ"
4332f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4333f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_SK",
4334f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sk_Latn_SK",
4335f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sk"
4336f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4337f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_SM",
4338f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "it_Latn_SM",
4339f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "it_SM"
4340f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4341f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_SN",
4342f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_SN",
4343f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_SN"
4344f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4345f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_SO",
4346f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "so_Latn_SO",
4347f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "so"
4348f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4349f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_SR",
4350f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nl_Latn_SR",
4351f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "nl_SR"
4352f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4353f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_ST",
4354f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pt_Latn_ST",
4355f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pt_ST"
4356f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4357f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_SV",
4358f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_SV",
4359f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_SV"
4360f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4361f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_SY",
4362f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_SY",
4363f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_SY"
4364f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4365f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Sinh",
4366f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "si_Sinh_LK",
4367f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "si"
4368f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4369f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_TD",
4370f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_TD",
4371f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_TD"
4372f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4373f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_TG",
4374f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_TG",
4375f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_TG"
4376f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4377f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_TH",
4378f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "th_Thai_TH",
4379f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "th"
4380f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4381f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_TJ",
4382f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tg_Cyrl_TJ",
4383f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tg"
4384f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4385f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_TK",
4386f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tkl_Latn_TK",
4387f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tkl"
4388f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4389f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_TL",
4390f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pt_Latn_TL",
4391f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "pt_TL"
4392f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4393f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_TM",
4394f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tk_Latn_TM",
4395f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tk"
4396f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4397f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_TN",
4398f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_TN",
4399f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_TN"
4400f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4401f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_TO",
4402f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "to_Latn_TO",
4403f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "to"
4404f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4405f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_TR",
4406f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tr_Latn_TR",
4407f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tr"
4408f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4409f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_TV",
4410f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tvl_Latn_TV",
4411f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "tvl"
4412f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4413f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_TW",
4414f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_TW",
4415f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_TW"
4416f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4417f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Taml",
4418f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ta_Taml_IN",
4419f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ta"
4420f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4421f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Telu",
4422f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "te_Telu_IN",
4423f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "te"
4424f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4425f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Thaa",
4426f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "dv_Thaa_MV",
4427f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "dv"
4428f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4429f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Thai",
4430f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "th_Thai_TH",
4431f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "th"
4432f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4433f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Tibt",
4434f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bo_Tibt_CN",
4435f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "bo"
4436f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4437f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_UA",
4438f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "uk_Cyrl_UA",
4439f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "uk"
4440f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4441f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_UY",
4442f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_UY",
4443f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_UY"
4444f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4445f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_UZ",
4446f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "uz_Cyrl_UZ",
4447f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "uz"
4448f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4449f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_VA",
4450f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "la_Latn_VA",
4451f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "la"
4452f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4453f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_VE",
4454f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_VE",
4455f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_VE"
4456f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4457f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_VN",
4458f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "vi_Latn_VN",
4459f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "vi"
4460f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4461f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_VU",
4462f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_VU",
4463f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_VU"
4464f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4465f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_WF",
4466f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_WF",
4467f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_WF"
4468f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4469f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_WS",
4470f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sm_Latn_WS",
4471f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "sm"
4472f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4473f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_YE",
4474f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_Arab_YE",
4475f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ar_YE"
4476f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4477f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_YT",
4478f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_Latn_YT",
4479f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "fr_YT"
4480f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4481f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Yiii",
4482f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ii_Yiii_CN",
4483f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ii"
4484f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4485f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ur",
4486f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ur_Arab_PK",
4487f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ur"
4488f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4489f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "uz",
4490f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "uz_Cyrl_UZ",
4491f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "uz"
4492f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4493f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "uz_AF",
4494f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "uz_Arab_AF",
4495f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "uz_AF"
4496f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4497f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "uz_Arab",
4498f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "uz_Arab_AF",
4499f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "uz_AF"
4500f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4501f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ve",
4502f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ve_Latn_ZA",
4503f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "ve"
4504f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4505f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "vi",
4506f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "vi_Latn_VN",
4507f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "vi"
4508f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4509f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "wal",
4510f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "wal_Ethi_ET",
4511f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "wal"
4512f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4513f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "wo",
4514f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "wo_Latn_SN",
4515f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "wo"
4516f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4517f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "xh",
4518f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "xh_Latn_ZA",
4519f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "xh"
4520f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4521f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "yo",
4522f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "yo_Latn_NG",
4523f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "yo"
4524f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4525f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh",
4526f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_CN",
4527f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh"
4528f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4529f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_HK",
4530f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_HK",
4531f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_HK"
4532f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4533f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hani",
4534f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_CN",
4535f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh"
4536f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4537f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant",
4538f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_TW",
4539f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_TW"
4540f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4541f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_MO",
4542f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_MO",
4543f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_MO"
4544f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4545f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_TW",
4546f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_TW",
4547f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_TW"
4548f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4549f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zu",
4550f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zu_Latn_ZA",
4551f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zu"
4552f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4553f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und",
4554f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_US",
4555f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en"
4556f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4557f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_ZZ",
4558f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_US",
4559f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en"
4560f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4561f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_CN",
4562f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_CN",
4563f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh"
4564f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4565f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_TW",
4566f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_TW",
4567f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_TW"
4568f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4569f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_HK",
4570f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_HK",
4571f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_HK"
4572f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4573f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_AQ",
4574f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_AQ",
4575f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_AQ"
4576f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4577f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Zzzz",
4578f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_US",
4579f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en"
4580f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4581f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Zzzz_ZZ",
4582f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_US",
4583f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en"
4584f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4585f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Zzzz_CN",
4586f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_CN",
4587f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh"
4588f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4589f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Zzzz_TW",
4590f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_TW",
4591f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_TW"
4592f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4593f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Zzzz_HK",
4594f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_HK",
4595f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_HK"
4596f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4597f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Zzzz_AQ",
4598f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_AQ",
4599f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_AQ"
4600f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4601f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Latn",
4602f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_US",
4603f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en"
4604f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4605f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Latn_ZZ",
4606f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_US",
4607f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en"
4608f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4609f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Latn_CN",
4610f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "za_Latn_CN",
4611f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "za"
4612f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4613f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Latn_TW",
4614f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn_TW",
4615f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn_TW"
4616f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4617f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Latn_HK",
4618f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn_HK",
4619f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn_HK"
4620f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4621f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Latn_AQ",
4622f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Latn_AQ",
4623f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_AQ"
4624f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4625f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Hans",
4626f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_CN",
4627f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh"
4628f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4629f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Hans_ZZ",
4630f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_CN",
4631f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh"
4632f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4633f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Hans_CN",
4634f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_CN",
4635f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh"
4636f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4637f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Hans_TW",
4638f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_TW",
4639f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_TW"
4640f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4641f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Hans_HK",
4642f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_HK",
4643f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_HK"
4644f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4645f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Hans_AQ",
4646f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_AQ",
4647f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_AQ"
4648f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4649f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Hant",
4650f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_TW",
4651f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_TW"
4652f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4653f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Hant_ZZ",
4654f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_TW",
4655f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_TW"
4656f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4657f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Hant_CN",
4658f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_CN",
4659f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_CN"
4660f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4661f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Hant_TW",
4662f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_TW",
4663f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_TW"
4664f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4665f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Hant_HK",
4666f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_HK",
4667f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_HK"
4668f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4669f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Hant_AQ",
4670f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_AQ",
4671f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_AQ"
4672f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4673f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Moon",
4674f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Moon_US",
4675f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Moon"
4676f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4677f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Moon_ZZ",
4678f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Moon_US",
4679f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Moon"
4680f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4681f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Moon_CN",
4682f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon_CN",
4683f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon"
4684f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4685f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Moon_TW",
4686f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon_TW",
4687f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon_TW"
4688f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4689f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Moon_HK",
4690f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon_HK",
4691f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon_HK"
4692f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4693f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "und_Moon_AQ",
4694f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Moon_AQ",
4695f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "en_Moon_AQ"
4696f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4697f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es",
4698f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_ES",
4699f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es"
4700f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4701f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_ZZ",
4702f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_ES",
4703f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es"
4704f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4705f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_CN",
4706f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_CN",
4707f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_CN"
4708f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4709f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_TW",
4710f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_TW",
4711f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_TW"
4712f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4713f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_HK",
4714f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_HK",
4715f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_HK"
4716f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4717f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_AQ",
4718f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_AQ",
4719f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_AQ"
4720f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4721f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Zzzz",
4722f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_ES",
4723f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es"
4724f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4725f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Zzzz_ZZ",
4726f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_ES",
4727f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es"
4728f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4729f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Zzzz_CN",
4730f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_CN",
4731f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_CN"
4732f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4733f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Zzzz_TW",
4734f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_TW",
4735f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_TW"
4736f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4737f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Zzzz_HK",
4738f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_HK",
4739f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_HK"
4740f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4741f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Zzzz_AQ",
4742f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_AQ",
4743f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_AQ"
4744f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4745f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn",
4746f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_ES",
4747f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es"
4748f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4749f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_ZZ",
4750f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_ES",
4751f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es"
4752f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4753f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_CN",
4754f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_CN",
4755f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_CN"
4756f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4757f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_TW",
4758f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_TW",
4759f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_TW"
4760f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4761f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_HK",
4762f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_HK",
4763f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_HK"
4764f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4765f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_AQ",
4766f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Latn_AQ",
4767f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_AQ"
4768f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4769f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hans",
4770f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hans_ES",
4771f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hans"
4772f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4773f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hans_ZZ",
4774f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hans_ES",
4775f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hans"
4776f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4777f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hans_CN",
4778f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hans_CN",
4779f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hans_CN"
4780f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4781f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hans_TW",
4782f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hans_TW",
4783f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hans_TW"
4784f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4785f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hans_HK",
4786f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hans_HK",
4787f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hans_HK"
4788f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4789f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hans_AQ",
4790f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hans_AQ",
4791f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hans_AQ"
4792f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4793f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hant",
4794f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hant_ES",
4795f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hant"
4796f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4797f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hant_ZZ",
4798f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hant_ES",
4799f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hant"
4800f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4801f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hant_CN",
4802f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hant_CN",
4803f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hant_CN"
4804f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4805f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hant_TW",
4806f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hant_TW",
4807f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hant_TW"
4808f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4809f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hant_HK",
4810f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hant_HK",
4811f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hant_HK"
4812f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4813f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hant_AQ",
4814f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hant_AQ",
4815f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Hant_AQ"
4816f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4817f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Moon",
4818f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Moon_ES",
4819f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Moon"
4820f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4821f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Moon_ZZ",
4822f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Moon_ES",
4823f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Moon"
4824f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4825f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Moon_CN",
4826f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Moon_CN",
4827f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Moon_CN"
4828f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4829f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Moon_TW",
4830f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Moon_TW",
4831f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Moon_TW"
4832f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4833f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Moon_HK",
4834f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Moon_HK",
4835f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Moon_HK"
4836f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4837f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Moon_AQ",
4838f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Moon_AQ",
4839f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "es_Moon_AQ"
4840f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4841f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh",
4842f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_CN",
4843f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh"
4844f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4845f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_ZZ",
4846f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_CN",
4847f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh"
4848f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4849f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_CN",
4850f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_CN",
4851f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh"
4852f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4853f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_TW",
4854f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_TW",
4855f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_TW"
4856f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4857f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_HK",
4858f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_HK",
4859f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_HK"
4860f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4861f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_AQ",
4862f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_AQ",
4863f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_AQ"
4864f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4865f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Zzzz",
4866f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_CN",
4867f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh"
4868f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4869f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Zzzz_ZZ",
4870f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_CN",
4871f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh"
4872f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4873f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Zzzz_CN",
4874f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_CN",
4875f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh"
4876f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4877f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Zzzz_TW",
4878f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_TW",
4879f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_TW"
4880f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4881f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Zzzz_HK",
4882f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_HK",
4883f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_HK"
4884f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4885f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Zzzz_AQ",
4886f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_AQ",
4887f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_AQ"
4888f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4889f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn",
4890f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn_CN",
4891f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn"
4892f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4893f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn_ZZ",
4894f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn_CN",
4895f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn"
4896f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4897f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn_CN",
4898f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn_CN",
4899f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn"
4900f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4901f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn_TW",
4902f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn_TW",
4903f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn_TW"
4904f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4905f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn_HK",
4906f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn_HK",
4907f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn_HK"
4908f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4909f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn_AQ",
4910f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn_AQ",
4911f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Latn_AQ"
4912f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4913f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans",
4914f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_CN",
4915f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh"
4916f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4917f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_ZZ",
4918f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_CN",
4919f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh"
4920f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4921f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_TW",
4922f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_TW",
4923f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_TW"
4924f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4925f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_HK",
4926f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_HK",
4927f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_HK"
4928f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4929f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_AQ",
4930f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hans_AQ",
4931f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_AQ"
4932f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4933f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant",
4934f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_TW",
4935f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_TW"
4936f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4937f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_ZZ",
4938f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_TW",
4939f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_TW"
4940f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4941f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_CN",
4942f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_CN",
4943f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_CN"
4944f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4945f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_AQ",
4946f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_AQ",
4947f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Hant_AQ"
4948f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4949f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon",
4950f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon_CN",
4951f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon"
4952f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4953f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon_ZZ",
4954f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon_CN",
4955f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon"
4956f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4957f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon_CN",
4958f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon_CN",
4959f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon"
4960f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4961f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon_TW",
4962f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon_TW",
4963f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon_TW"
4964f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4965f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon_HK",
4966f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon_HK",
4967f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon_HK"
4968f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4969f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon_AQ",
4970f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon_AQ",
4971f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "zh_Moon_AQ"
4972f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4973f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art",
4974f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
4975f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
4976f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4977f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_ZZ",
4978f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
4979f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
4980f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4981f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_CN",
4982f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
4983f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
4984f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4985f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_TW",
4986f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
4987f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
4988f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4989f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_HK",
4990f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
4991f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
4992f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4993f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_AQ",
4994f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
4995f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
4996f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
4997f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Zzzz",
4998f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
4999f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5000f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5001f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Zzzz_ZZ",
5002f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5003f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5004f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5005f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Zzzz_CN",
5006f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5007f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5008f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5009f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Zzzz_TW",
5010f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5011f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5012f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5013f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Zzzz_HK",
5014f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5015f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5016f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5017f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Zzzz_AQ",
5018f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5019f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5020f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5021f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Latn",
5022f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5023f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5024f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5025f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Latn_ZZ",
5026f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5027f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5028f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5029f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Latn_CN",
5030f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5031f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5032f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5033f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Latn_TW",
5034f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5035f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5036f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5037f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Latn_HK",
5038f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5039f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5040f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5041f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Latn_AQ",
5042f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5043f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5044f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5045f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Hans",
5046f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5047f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5048f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5049f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Hans_ZZ",
5050f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5051f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5052f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5053f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Hans_CN",
5054f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5055f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5056f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5057f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Hans_TW",
5058f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5059f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5060f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5061f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Hans_HK",
5062f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5063f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5064f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5065f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Hans_AQ",
5066f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5067f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5068f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5069f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Hant",
5070f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5071f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5072f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5073f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Hant_ZZ",
5074f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5075f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5076f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5077f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Hant_CN",
5078f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5079f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5080f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5081f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Hant_TW",
5082f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5083f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5084f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5085f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Hant_HK",
5086f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5087f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5088f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5089f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Hant_AQ",
5090f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5091f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5092f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5093f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Moon",
5094f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5095f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5096f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5097f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Moon_ZZ",
5098f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5099f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5100f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5101f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Moon_CN",
5102f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5103f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5104f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5105f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Moon_TW",
5106f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5107f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5108f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5109f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Moon_HK",
5110f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5111f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5112f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }, {
5113f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "art_Moon_AQ",
5114f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    "",
5115f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ""
5116f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }
5117f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)};
5118f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5119f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)typedef struct errorDataTag {
5120f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char* tag;
5121f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char* expected;
5122f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode uerror;
5123f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t  bufferSize;
5124f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} errorData;
5125f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5126f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)const errorData maximizeErrors[] = {
5127f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
5128f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "enfueiujhytdf",
5129f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        NULL,
5130f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        U_ILLEGAL_ARGUMENT_ERROR,
5131f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        -1
5132f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    },
5133f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
5134f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "en_THUJIOGIURJHGJFURYHFJGURYYYHHGJURHG",
5135f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        NULL,
5136f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        U_ILLEGAL_ARGUMENT_ERROR,
5137f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        -1
5138f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    },
5139f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
5140f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "en_THUJIOGIURJHGJFURYHFJGURYYYHHGJURHG",
5141f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        NULL,
5142f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        U_ILLEGAL_ARGUMENT_ERROR,
5143f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        -1
5144f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    },
5145f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
5146f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "en_Latn_US_POSIX@currency=EURO",
5147f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "en_Latn_US_POSIX@currency=EURO",
5148f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        U_BUFFER_OVERFLOW_ERROR,
5149f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        29
5150f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    },
5151f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
5152f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "en_Latn_US_POSIX@currency=EURO",
5153f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "en_Latn_US_POSIX@currency=EURO",
5154f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        U_STRING_NOT_TERMINATED_WARNING,
5155f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        30
5156f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
5157f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)};
5158f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5159f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)const errorData minimizeErrors[] = {
5160f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
5161f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "enfueiujhytdf",
5162f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        NULL,
5163f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        U_ILLEGAL_ARGUMENT_ERROR,
5164f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        -1
5165f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    },
5166f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
5167f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "en_THUJIOGIURJHGJFURYHFJGURYYYHHGJURHG",
5168f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        NULL,
5169f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        U_ILLEGAL_ARGUMENT_ERROR,
5170f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        -1
5171f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    },
5172f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
5173f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "en_Latn_US_POSIX@currency=EURO",
5174f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "en__POSIX@currency=EURO",
5175f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        U_BUFFER_OVERFLOW_ERROR,
5176f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        22
5177f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    },
5178f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
5179f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "en_Latn_US_POSIX@currency=EURO",
5180f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        "en__POSIX@currency=EURO",
5181f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        U_STRING_NOT_TERMINATED_WARNING,
5182f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        23
5183f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
5184f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)};
5185f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5186f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static int32_t getExpectedReturnValue(const errorData* data)
5187f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
5188f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (data->uerror == U_BUFFER_OVERFLOW_ERROR ||
5189f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        data->uerror == U_STRING_NOT_TERMINATED_WARNING)
5190f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
5191f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return strlen(data->expected);
5192f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
5193f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    else
5194f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
5195f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return -1;
5196f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
5197f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
5198f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5199f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static int32_t getBufferSize(const errorData* data, int32_t actualSize)
5200f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
5201f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    if (data->expected == NULL)
5202f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
5203f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return actualSize;
5204f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
5205f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    else if (data->bufferSize < 0)
5206f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
5207f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return strlen(data->expected) + 1;
5208f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
5209f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    else
5210f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
5211f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        return data->bufferSize;
5212f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
5213f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
5214f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5215f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestLikelySubtags()
5216f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
5217f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char buffer[ULOC_FULLNAME_CAPACITY + ULOC_KEYWORD_AND_VALUES_CAPACITY + 1];
5218f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t i = 0;
5219f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5220f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (; i < sizeof(basic_maximize_data) / sizeof(basic_maximize_data[0]); ++i)
5221f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {
5222f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UErrorCode status = U_ZERO_ERROR;
5223f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* const minimal = basic_maximize_data[i][0];
5224f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* const maximal = basic_maximize_data[i][1];
5225f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5226f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* const int32_t length = */
5227f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            uloc_addLikelySubtags(
5228f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                minimal,
5229f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                buffer,
5230f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                sizeof(buffer),
5231f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                &status);
5232f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(status)) {
5233f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err_status(status, "  unexpected failure of uloc_addLikelySubtags(), minimal \"%s\" status %s\n", minimal, u_errorName(status));
5234f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            status = U_ZERO_ERROR;
5235f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
5236f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else if (uprv_strlen(maximal) == 0) {
5237f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if (uprv_stricmp(minimal, buffer) != 0) {
5238f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("  unexpected maximal value \"%s\" in uloc_addLikelySubtags(), minimal \"%s\" = \"%s\"\n", maximal, minimal, buffer);
5239f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
5240f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
5241f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else if (uprv_stricmp(maximal, buffer) != 0) {
5242f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("  maximal doesn't match expected %s in uloc_addLikelySubtags(), minimal \"%s\" = %s\n", maximal, minimal, buffer);
5243f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
5244f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
5245f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5246f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (i = 0; i < sizeof(basic_minimize_data) / sizeof(basic_minimize_data[0]); ++i) {
5247f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5248f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UErrorCode status = U_ZERO_ERROR;
5249f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* const maximal = basic_minimize_data[i][0];
5250f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* const minimal = basic_minimize_data[i][1];
5251f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5252f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* const int32_t length = */
5253f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            uloc_minimizeSubtags(
5254f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                maximal,
5255f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                buffer,
5256f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                sizeof(buffer),
5257f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                &status);
5258f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5259f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(status)) {
5260f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err_status(status, "  unexpected failure of uloc_MinimizeSubtags(), maximal \"%s\" status %s\n", maximal, u_errorName(status));
5261f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            status = U_ZERO_ERROR;
5262f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
5263f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else if (uprv_strlen(minimal) == 0) {
5264f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if (uprv_stricmp(maximal, buffer) != 0) {
5265f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("  unexpected minimal value \"%s\" in uloc_minimizeSubtags(), maximal \"%s\" = \"%s\"\n", minimal, maximal, buffer);
5266f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
5267f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
5268f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else if (uprv_stricmp(minimal, buffer) != 0) {
5269f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("  minimal doesn't match expected %s in uloc_MinimizeSubtags(), maximal \"%s\" = %s\n", minimal, maximal, buffer);
5270f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
5271f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
5272f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5273f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (i = 0; i < sizeof(full_data) / sizeof(full_data[0]); ++i) {
5274f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5275f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UErrorCode status = U_ZERO_ERROR;
5276f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* const minimal = full_data[i][0];
5277f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* const maximal = full_data[i][1];
5278f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5279f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* const int32_t length = */
5280f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            uloc_addLikelySubtags(
5281f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                minimal,
5282f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                buffer,
5283f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                sizeof(buffer),
5284f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                &status);
5285f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(status)) {
5286f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err_status(status, "  unexpected failure of uloc_addLikelySubtags(), minimal \"%s\" status \"%s\"\n", minimal, u_errorName(status));
5287f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            status = U_ZERO_ERROR;
5288f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
5289f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else if (uprv_strlen(maximal) == 0) {
5290f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if (uprv_stricmp(minimal, buffer) != 0) {
5291f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("  unexpected maximal value \"%s\" in uloc_addLikelySubtags(), minimal \"%s\" = \"%s\"\n", maximal, minimal, buffer);
5292f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
5293f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
5294f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else if (uprv_stricmp(maximal, buffer) != 0) {
5295f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("  maximal doesn't match expected \"%s\" in uloc_addLikelySubtags(), minimal \"%s\" = \"%s\"\n", maximal, minimal, buffer);
5296f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
5297f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
5298f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5299f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (i = 0; i < sizeof(full_data) / sizeof(full_data[0]); ++i) {
5300f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5301f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UErrorCode status = U_ZERO_ERROR;
5302f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* const maximal = full_data[i][1];
5303f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* const minimal = full_data[i][2];
5304f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5305f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (strlen(maximal) > 0) {
5306f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5307f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            /* const int32_t length = */
5308f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                uloc_minimizeSubtags(
5309f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    maximal,
5310f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    buffer,
5311f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    sizeof(buffer),
5312f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    &status);
5313f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5314f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if (U_FAILURE(status)) {
5315f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err_status(status, "  unexpected failure of uloc_minimizeSubtags(), maximal \"%s\" status %s\n", maximal, u_errorName(status));
5316f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                status = U_ZERO_ERROR;
5317f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
5318f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            else if (uprv_strlen(minimal) == 0) {
5319f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                if (uprv_stricmp(maximal, buffer) != 0) {
5320f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    log_err("  unexpected minimal value \"%s\" in uloc_minimizeSubtags(), maximal \"%s\" = \"%s\"\n", minimal, maximal, buffer);
5321f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                }
5322f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
5323f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            else if (uprv_stricmp(minimal, buffer) != 0) {
5324f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("  minimal doesn't match expected %s in uloc_MinimizeSubtags(), maximal \"%s\" = %s\n", minimal, maximal, buffer);
5325f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
5326f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
5327f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
5328f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5329f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (i = 0; i < sizeof(maximizeErrors) / sizeof(maximizeErrors[0]); ++i) {
5330f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5331f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UErrorCode status = U_ZERO_ERROR;
5332f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* const minimal = maximizeErrors[i].tag;
5333f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* const maximal = maximizeErrors[i].expected;
5334f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const UErrorCode expectedStatus = maximizeErrors[i].uerror;
5335f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const int32_t expectedLength = getExpectedReturnValue(&maximizeErrors[i]);
5336f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const int32_t bufferSize = getBufferSize(&maximizeErrors[i], sizeof(buffer));
5337f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5338f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const int32_t length =
5339f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            uloc_addLikelySubtags(
5340f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                minimal,
5341f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                buffer,
5342f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                bufferSize,
5343f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                &status);
5344f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5345f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (status == U_ZERO_ERROR) {
5346f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("  unexpected U_ZERO_ERROR for uloc_addLikelySubtags(), minimal \"%s\" expected status %s\n", minimal, u_errorName(expectedStatus));
5347f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            status = U_ZERO_ERROR;
5348f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
5349f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else if (status != expectedStatus) {
5350f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err_status(status, "  unexpected status for uloc_addLikelySubtags(), minimal \"%s\" expected status %s, but got %s\n", minimal, u_errorName(expectedStatus), u_errorName(status));
5351f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
5352f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else if (length != expectedLength) {
5353f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("  unexpected length for uloc_addLikelySubtags(), minimal \"%s\" expected length %d, but got %d\n", minimal, expectedLength, length);
5354f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
5355f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else if (status == U_BUFFER_OVERFLOW_ERROR || status == U_STRING_NOT_TERMINATED_WARNING) {
5356f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if (uprv_strnicmp(maximal, buffer, bufferSize) != 0) {
5357f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("  maximal doesn't match expected %s in uloc_addLikelySubtags(), minimal \"%s\" = %*s\n",
5358f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    maximal, minimal, (int)sizeof(buffer), buffer);
5359f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
5360f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
5361f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
5362f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5363f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (i = 0; i < sizeof(minimizeErrors) / sizeof(minimizeErrors[0]); ++i) {
5364f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5365f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        UErrorCode status = U_ZERO_ERROR;
5366f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* const maximal = minimizeErrors[i].tag;
5367f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const char* const minimal = minimizeErrors[i].expected;
5368f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const UErrorCode expectedStatus = minimizeErrors[i].uerror;
5369f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const int32_t expectedLength = getExpectedReturnValue(&minimizeErrors[i]);
5370f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const int32_t bufferSize = getBufferSize(&minimizeErrors[i], sizeof(buffer));
5371f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5372f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        const int32_t length =
5373f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            uloc_minimizeSubtags(
5374f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                maximal,
5375f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                buffer,
5376f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                bufferSize,
5377f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                &status);
5378f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5379f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (status == U_ZERO_ERROR) {
5380f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("  unexpected U_ZERO_ERROR for uloc_minimizeSubtags(), maximal \"%s\" expected status %s\n", maximal, u_errorName(expectedStatus));
5381f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            status = U_ZERO_ERROR;
5382f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
5383f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else if (status != expectedStatus) {
5384f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err_status(status, "  unexpected status for uloc_minimizeSubtags(), maximal \"%s\" expected status %s, but got %s\n", maximal, u_errorName(expectedStatus), u_errorName(status));
5385f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
5386f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else if (length != expectedLength) {
5387f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err("  unexpected length for uloc_minimizeSubtags(), maximal \"%s\" expected length %d, but got %d\n", maximal, expectedLength, length);
5388f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
5389f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        else if (status == U_BUFFER_OVERFLOW_ERROR || status == U_STRING_NOT_TERMINATED_WARNING) {
5390f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if (uprv_strnicmp(minimal, buffer, bufferSize) != 0) {
5391f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("  minimal doesn't match expected \"%s\" in uloc_minimizeSubtags(), minimal \"%s\" = \"%*s\"\n",
5392f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    minimal, maximal, (int)sizeof(buffer), buffer);
5393f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
5394f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
5395f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
5396f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
5397f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5398f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)const char* const locale_to_langtag[][3] = {
5399f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"",            "und",          "und"},
5400f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en",          "en",           "en"},
5401f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en_US",       "en-US",        "en-US"},
5402f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"iw_IL",       "he-IL",        "he-IL"},
5403f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"sr_Latn_SR",  "sr-Latn-SR",   "sr-Latn-SR"},
5404f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en__POSIX",   "en-u-va-posix", "en-u-va-posix"},
5405f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en_POSIX",    "en-u-va-posix", "en-u-va-posix"},
5406f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en_US_POSIX@ca=japanese",  "en-US-u-ca-japanese-va-posix", "en-US-u-ca-japanese-va-posix"},
5407f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"und_555",     "und-555",      "und-555"},
5408f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"123",         "und",          NULL},
5409f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"%$#&",        "und",          NULL},
5410f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"_Latn",       "und-Latn",     "und-Latn"},
5411f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"_DE",         "und-DE",       "und-DE"},
5412f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"und_FR",      "und-FR",       "und-FR"},
5413f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"th_TH_TH",    "th-TH",        NULL},
5414f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"bogus",       "bogus",        "bogus"},
5415f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"foooobarrr",  "und",          NULL},
5416f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"az_AZ_CYRL",  "az-Cyrl-AZ",   "az-Cyrl-AZ"},
5417f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"aa_BB_CYRL",  "aa-BB",        NULL},
5418f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en_US_1234",  "en-US-1234",   "en-US-1234"},
5419f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en_US_VARIANTA_VARIANTB", "en-US-varianta-variantb",  "en-US-varianta-variantb"},
5420f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en_US_VARIANTB_VARIANTA", "en-US-varianta-variantb",  "en-US-varianta-variantb"},
5421f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"ja__9876_5432",   "ja-5432-9876", "ja-5432-9876"},
5422f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"zh_Hant__VAR",    "zh-Hant",  NULL},
5423f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"es__BADVARIANT_GOODVAR",  "es-goodvar",   NULL},
5424f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en@calendar=gregorian",   "en-u-ca-gregory",  "en-u-ca-gregory"},
5425f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"de@collation=phonebook;calendar=gregorian",   "de-u-ca-gregory-co-phonebk",   "de-u-ca-gregory-co-phonebk"},
5426f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"th@numbers=thai;z=extz;x=priv-use;a=exta",   "th-a-exta-u-nu-thai-z-extz-x-priv-use", "th-a-exta-u-nu-thai-z-extz-x-priv-use"},
5427f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en@timezone=America/New_York;calendar=japanese",    "en-u-ca-japanese-tz-usnyc",    "en-u-ca-japanese-tz-usnyc"},
5428f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en@timezone=US/Eastern",  "en-u-tz-usnyc",    "en-u-tz-usnyc"},
5429f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en@x=x-y-z;a=a-b-c",  "en-x-x-y-z",   NULL},
5430f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"it@collation=badcollationtype;colStrength=identical;cu=usd-eur", "it-u-ks-identic",  NULL},
5431f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en_US_POSIX", "en-US-u-va-posix", "en-US-u-va-posix"},
5432f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en_US_POSIX@calendar=japanese;currency=EUR","en-US-u-ca-japanese-cu-EUR-va-posix", "en-US-u-ca-japanese-cu-EUR-va-posix"},
5433f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5434f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {NULL,          NULL,           NULL}
5435f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)};
5436f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5437f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestToLanguageTag(void) {
5438f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char langtag[256];
5439f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t i;
5440f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status;
5441f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t len;
5442f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char *inloc;
5443f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char *expected;
5444f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5445f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (i = 0; locale_to_langtag[i][0] != NULL; i++) {
5446f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        inloc = locale_to_langtag[i][0];
5447f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5448f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* testing non-strict mode */
5449f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status = U_ZERO_ERROR;
5450f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        langtag[0] = 0;
5451f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        expected = locale_to_langtag[i][1];
5452f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5453f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        len = uloc_toLanguageTag(inloc, langtag, sizeof(langtag), FALSE, &status);
5454f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(status)) {
5455f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if (expected != NULL) {
5456f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("Error returned by uloc_toLanguageTag for locale id [%s] - error: %s\n",
5457f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    inloc, u_errorName(status));
5458f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
5459f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        } else {
5460f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if (expected == NULL) {
5461f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("Error should be returned by uloc_toLanguageTag for locale id [%s], but [%s] is returned without errors\n",
5462f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    inloc, langtag);
5463f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            } else if (uprv_strcmp(langtag, expected) != 0) {
5464f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_data_err("uloc_toLanguageTag returned language tag [%s] for input locale [%s] - expected: [%s]. Are you missing data?\n",
5465f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    langtag, inloc, expected);
5466f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
5467f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
5468f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5469f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        /* testing strict mode */
5470f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status = U_ZERO_ERROR;
5471f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        langtag[0] = 0;
5472f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        expected = locale_to_langtag[i][2];
5473f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5474f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        len = uloc_toLanguageTag(inloc, langtag, sizeof(langtag), TRUE, &status);
5475f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(status)) {
5476f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if (expected != NULL) {
5477f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_data_err("Error returned by uloc_toLanguageTag {strict} for locale id [%s] - error: %s Are you missing data?\n",
5478f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    inloc, u_errorName(status));
5479f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
5480f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        } else {
5481f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if (expected == NULL) {
5482f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("Error should be returned by uloc_toLanguageTag {strict} for locale id [%s], but [%s] is returned without errors\n",
5483f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    inloc, langtag);
5484f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            } else if (uprv_strcmp(langtag, expected) != 0) {
5485f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("uloc_toLanguageTag {strict} returned language tag [%s] for input locale [%s] - expected: [%s]\n",
5486f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    langtag, inloc, expected);
5487f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
5488f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
5489f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
5490f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
5491f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5492f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static const struct {
5493f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char  *bcpID;
5494f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    const char  *locID;
5495f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t     len;
5496f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} langtag_to_locale[] = {
5497f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en",                  "en",                   2},
5498f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en-us",               "en_US",                5},
5499f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"und-US",              "_US",                  6},
5500f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"und-latn",            "_Latn",                8},
5501f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en-US-posix",         "en_US_POSIX",          11},
5502f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"de-de_euro",          "de",                   2},
5503f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"kok-IN",              "kok_IN",               6},
5504f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"123",                 "",                     0},
5505f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en_us",               "",                     0},
5506f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en-latn-x",           "en_Latn",              7},
5507f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"art-lojban",          "jbo",                  10},
5508f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"zh-hakka",            "hak",                  8},
5509f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"zh-cmn-CH",           "cmn_CH",               9},
5510f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"xxx-yy",              "xxx_YY",               6},
5511f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"fr-234",              "fr_234",               6},
5512f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"i-default",           "",                     9},
5513f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"i-test",              "",                     0},
5514f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"ja-jp-jp",            "ja_JP",                5},
5515f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"bogus",               "bogus",                5},
5516f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"boguslang",           "",                     0},
5517f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"EN-lATN-us",          "en_Latn_US",           10},
5518f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"und-variant-1234",    "__1234_VARIANT",       16},
5519f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"und-varzero-var1-vartwo", "__VARZERO",        11},
5520f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en-u-ca-gregory",     "en@calendar=gregorian",    15},
5521f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en-U-cu-USD",         "en@currency=usd",      11},
5522f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en-US-u-va-posix",    "en_US_POSIX",          16},
5523f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"ar-x-1-2-3",          "ar@x=1-2-3",           10},
5524f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"fr-u-nu-latn-cu-eur", "fr@currency=eur;numbers=latn", 19},
5525f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"de-k-kext-u-co-phonebk-nu-latn",  "de@collation=phonebook;k=kext;numbers=latn",   30},
5526f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"ja-u-cu-jpy-ca-jp",   "ja@currency=jpy",      11},
5527f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"en-us-u-tz-usnyc",    "en_US@timezone=America/New_York",      16},
5528f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"und-a-abc-def",       "und@a=abc-def",        13},
5529f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {"zh-u-ca-chinese-x-u-ca-chinese",  "zh@calendar=chinese;x=u-ca-chinese",   30},
5530f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    {NULL,          NULL,           0}
5531f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)};
5532f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5533f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestForLanguageTag(void) {
5534f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    char locale[256];
5535f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t i;
5536f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    UErrorCode status;
5537f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    int32_t parsedLen;
5538f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5539f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    for (i = 0; langtag_to_locale[i].bcpID != NULL; i++) {
5540f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        status = U_ZERO_ERROR;
5541f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        locale[0] = 0;
5542f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        uloc_forLanguageTag(langtag_to_locale[i].bcpID, locale, sizeof(locale), &parsedLen, &status);
5543f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        if (U_FAILURE(status)) {
5544f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            log_err_status(status, "Error returned by uloc_forLanguageTag for language tag [%s] - error: %s\n",
5545f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                langtag_to_locale[i].bcpID, u_errorName(status));
5546f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        } else {
5547f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if (uprv_strcmp(langtag_to_locale[i].locID, locale) != 0) {
5548f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("uloc_forLanguageTag returned locale [%s] for input language tag [%s] - expected: [%s]\n",
5549f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    locale, langtag_to_locale[i].bcpID, langtag_to_locale[i].locID);
5550f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
5551f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            if (parsedLen != langtag_to_locale[i].len) {
5552f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                log_err("uloc_forLanguageTag parsed length of %d for input language tag [%s] - expected parsed length: %d\n",
5553f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                    parsedLen, langtag_to_locale[i].bcpID, langtag_to_locale[i].len);
5554f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)            }
5555f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        }
5556f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    }
5557f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
5558f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5559f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void test_unicode_define(const char *namech, char ch, const char *nameu, UChar uch)
5560f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){
5561f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  UChar asUch[1];
5562f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  asUch[0]=0;
5563f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  log_verbose("Testing whether %s[\\x%02x,'%c'] == %s[U+%04X]\n", namech, ch,(int)ch, nameu, (int) uch);
5564f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  u_charsToUChars(&ch, asUch, 1);
5565f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  if(asUch[0] != uch) {
5566f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    log_err("FAIL:  %s[\\x%02x,'%c'] maps to U+%04X, but %s = U+%04X\n", namech, ch, (int)ch, (int)asUch[0], nameu, (int)uch);
5567f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  } else {
5568f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    log_verbose(" .. OK, == U+%04X\n", (int)asUch[0]);
5569f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  }
5570f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
5571f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5572f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define TEST_UNICODE_DEFINE(x,y) test_unicode_define(#x, (char)(x), #y, (UChar)(y))
5573f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
5574f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)static void TestUnicodeDefines(void) {
5575f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  TEST_UNICODE_DEFINE(ULOC_KEYWORD_SEPARATOR, ULOC_KEYWORD_SEPARATOR_UNICODE);
5576f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  TEST_UNICODE_DEFINE(ULOC_KEYWORD_ASSIGN, ULOC_KEYWORD_ASSIGN_UNICODE);
5577f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  TEST_UNICODE_DEFINE(ULOC_KEYWORD_ITEM_SEPARATOR, ULOC_KEYWORD_ITEM_SEPARATOR_UNICODE);
5578f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}
5579