]> git.saurik.com Git - apple/icu.git/blame - icuSources/test/cintltst/cmeasureformattest.c
ICU-66108.tar.gz
[apple/icu.git] / icuSources / test / cintltst / cmeasureformattest.c
CommitLineData
2ca993e8
A
1/********************************************************************
2 * Copyright (c) 2015-2016, Apple Inc. All Rights Reserved.
3 ********************************************************************/
4/* C API TEST FOR APPLE MEASUREFORMAT C WRAPPER */
5
6#include "unicode/utypes.h"
f3c0d7a5
A
7
8#if U_PLATFORM_IS_DARWIN_BASED || U_PLATFORM_IS_LINUX_BASED || U_PLATFORM == U_PF_BSD || U_PLATFORM == U_PF_SOLARIS
2ca993e8 9#include <unistd.h>
f3c0d7a5 10#endif
2ca993e8
A
11
12#if !UCONFIG_NO_FORMATTING
13
14#include "unicode/uameasureformat.h"
15#include "unicode/ustring.h"
a62d09fc 16#include "unicode/uloc.h"
2ca993e8
A
17#include "cintltst.h"
18#include "cmemory.h"
19#include "cstring.h"
20
21static void TestUAMeasureFormat(void);
a62d09fc 22static void TestUAMeasFmtOpenAllLocs(void);
2ca993e8
A
23static void TestUAGetUnitsForUsage(void);
24static void TestUAGetCategoryForUnit(void);
25
26void addMeasureFormatTest(TestNode** root);
27
28#define TESTCASE(x) addTest(root, &x, "tsformat/cmeasureformattest/" #x)
29
30void addMeasureFormatTest(TestNode** root)
31{
32 TESTCASE(TestUAMeasureFormat);
a62d09fc 33 TESTCASE(TestUAMeasFmtOpenAllLocs);
2ca993e8
A
34 TESTCASE(TestUAGetUnitsForUsage);
35 TESTCASE(TestUAGetCategoryForUnit);
36}
37
38typedef struct {
39 UAMeasureUnit unit;
40 float value;
41 const char * expectFmt_wide_2;
42 const char * expectFmt_wide_0;
43 const char * expectFmt_shrt_X;
44 const char * expectFmt_shrt_1;
45 const char * expectFmt_narr_0;
46 const char * expectFmt_numr_0;
47 int32_t beginInt_wide_0;
48 int32_t endInt_wide_0;
49 int32_t beginInt_numr_0;
50 int32_t endInt_numr_0;
51} SingleUnitFormat;
52
53typedef struct {
54 UAMeasureUnit unit;
55 const char * expectName_wide;
56 const char * expectName_shrt;
57 const char * expectName_narr;
58} SingleUnitName;
59
60typedef struct {
61 const UAMeasure* measures;
62 int32_t measureCount;
63 const char * expectFmt_wide_2;
64 const char * expectFmt_wide_0;
65 const char * expectFmt_shrt_X;
66 const char * expectFmt_shrt_1;
67 const char * expectFmt_shrtr_1;
68 const char * expectFmt_narr_0;
69 const char * expectFmt_numr_0;
340931cb 70 const char * expectFmt_numr_2;
2ca993e8
A
71 int32_t ranges_wide_2[8][3];
72 int32_t ranges_shrtr_1[8][3];
73 int32_t ranges_numr_0[8][3];
340931cb 74 int32_t ranges_numr_2[8][3];
2ca993e8
A
75} MultipleUnitFormat;
76
77typedef struct {
78 const UAMeasureUnit* units;
79 int32_t unitCount;
80 UAMeasureNameListStyle listStyle;
81 const char * expectName_wide;
82 const char * expectName_shrt;
83 const char * expectName_narr;
84} MultipleUnitName;
85
86typedef struct {
87 const char * locale;
88 const SingleUnitFormat * singleUnitFormatTests; // may be NULL
89 const SingleUnitName * singleUnitNameTests; // may be NULL
90 const MultipleUnitFormat * multipleUnitFormatTests; // may be NULL
91 const MultipleUnitName * multipleUnitNameTests; // may be NULL
92} LocaleWidthNumFmtItem;
93
94static const SingleUnitFormat en_singFmt[] = {
95// unit value wide_2 wide_0 shrt_X shrt_1 narr_0 numr_0 wide_0 narr_0
96 { UAMEASUNIT_DURATION_MINUTE, 0.0, "0.00 minutes", "0 minutes", "0 min", "0.0 min", "0m", "0m", 0,1, 0,1 },
97 { UAMEASUNIT_DURATION_MINUTE, 1.0, "1.00 minutes", "1 minute", "1 min", "1.0 min", "1m", "1m", 0,1, 0,1 },
98 { UAMEASUNIT_DURATION_MINUTE, 5.25, "5.25 minutes", "5 minutes", "5.25 min", "5.2 min", "5m", "5m", 0,1, 0,1 },
99 { UAMEASUNIT_DURATION_DAY, 5.25, "5.25 days", "5 days", "5.25 days", "5.2 days", "5d", "5d", 0,1, 0,1 },
100 { UAMEASUNIT_DURATION_WEEK, 5.25, "5.25 weeks", "5 weeks", "5.25 wks", "5.2 wks", "5w", "5w", 0,1, 0,1 },
101 { UAMEASUNIT_DURATION_CENTURY, 37.203, "37.20 centuries", "37 centuries", "37.203 c", "37.2 c", "37 c", "37 c", 0,2, 0,2 },
102 { UAMEASUNIT_LENGTH_CENTIMETER, 37.203, "37.20 centimeters", "37 centimeters", "37.203 cm", "37.2 cm", "37cm", "37cm", 0,2, 0,2 },
0f5d89e8 103 { UAMEASUNIT_SPEED_KILOMETER_PER_HOUR, 37.203, "37.20 kilometers per hour", "37 kilometers per hour", "37.203 km/h", "37.2 km/h", "37km/h", "37km/h", 0,2, 0,2 },
2ca993e8
A
104 { UAMEASUNIT_TEMPERATURE_CELSIUS, 37.203, "37.20 degrees Celsius", "37 degrees Celsius", "37.203\\u00B0C", "37.2\\u00B0C", "37\\u00B0C", "37\\u00B0", 0,2, 0,2 },
105 { UAMEASUNIT_TEMPERATURE_FAHRENHEIT, 37.203, "37.20 degrees Fahrenheit", "37 degrees Fahrenheit", "37.203\\u00B0F", "37.2\\u00B0F", "37\\u00B0", "37\\u00B0", 0,2, 0,2 },
f3c0d7a5 106 { UAMEASUNIT_TEMPERATURE_GENERIC, 37.203, "37.20 degrees", "37 degrees", "37.203\\u00B0", "37.2\\u00B0", "37\\u00B0", "37\\u00B0", 0,2, 0,2 },
340931cb 107 { UAMEASUNIT_TEMPERATURE_GENERIC, 1.000, "1.00 degrees", "1 degree", "1\\u00B0", "1.0\\u00B0", "1\\u00B0", "1\\u00B0", 0,1, 0,1 }, // rdar://65008672
2ca993e8
A
108 { UAMEASUNIT_VOLUME_LITER, 37.203, "37.20 liters", "37 liters", "37.203 L", "37.2 L", "37L", "37L", 0,2, 0,2 },
109 { UAMEASUNIT_ENERGY_FOODCALORIE, 37.203, "37.20 Calories", "37 Calories", "37.203 Cal", "37.2 Cal", "37Cal", "37Cal", 0,2, 0,2 },
110 { UAMEASUNIT_ENERGY_JOULE, 37.203, "37.20 joules", "37 joules", "37.203 J", "37.2 J", "37J", "37J", 0,2, 0,2 },
111 { UAMEASUNIT_DIGITAL_MEGABYTE, 37.203, "37.20 megabytes", "37 megabytes", "37.203 MB", "37.2 MB", "37MB", "37MB", 0,2, 0,2 },
112 { (UAMeasureUnit)0, 0, NULL, NULL, NULL, NULL, NULL, NULL }
113};
114
115static const SingleUnitFormat en_GB_singFmt[] = {
116// unit value wide_2 wide_0 shrt_X shrt_1 narr_0 numr_0 wide_0 narr_0
117 { UAMEASUNIT_DURATION_MINUTE, 0.0, "0.00 minutes", "0 minutes", "0 min", "0.0 min", "0m", "0m", 0,1, 0,1 },
118 { UAMEASUNIT_DURATION_MINUTE, 1.0, "1.00 minutes", "1 minute", "1 min", "1.0 min", "1m", "1m", 0,1, 0,1 },
119 { UAMEASUNIT_DURATION_MINUTE, 5.25, "5.25 minutes", "5 minutes", "5.25 min", "5.2 min", "5m", "5m", 0,1, 0,1 },
120 { UAMEASUNIT_LENGTH_CENTIMETER, 37.203, "37.20 centimetres", "37 centimetres", "37.203 cm", "37.2 cm", "37cm", "37cm", 0,2, 0,2 },
121 { UAMEASUNIT_TEMPERATURE_CELSIUS, 37.203, "37.20 degrees Celsius", "37 degrees Celsius", "37.203\\u00B0C", "37.2\\u00B0C", "37\\u00B0", "37\\u00B0", 0,2, 0,2 },
122 { UAMEASUNIT_TEMPERATURE_FAHRENHEIT, 37.203, "37.20 degrees Fahrenheit", "37 degrees Fahrenheit", "37.203\\u00B0F", "37.2\\u00B0F", "37\\u00B0F", "37\\u00B0", 0,2, 0,2 },
f3c0d7a5 123 { UAMEASUNIT_TEMPERATURE_GENERIC, 37.203, "37.20 degrees", "37 degrees", "37.203\\u00B0", "37.2\\u00B0", "37\\u00B0", "37\\u00B0", 0,2, 0,2 },
2ca993e8
A
124 { UAMEASUNIT_VOLUME_LITER, 37.203, "37.20 litres", "37 litres", "37.203 l", "37.2 l", "37l", "37l", 0,2, 0,2 },
125 { UAMEASUNIT_ENERGY_FOODCALORIE, 37.203, "37.20 Calories", "37 Calories", "37.203 Cal", "37.2 Cal", "37Cal", "37Cal", 0,2, 0,2 },
126 { (UAMeasureUnit)0, 0, NULL, NULL, NULL, NULL, NULL, NULL }
127};
128
340931cb
A
129static const SingleUnitFormat en_AU_singFmt[] = {
130// unit value wide_2 wide_0 shrt_X shrt_1 narr_0 numr_0 wide_0 narr_0
131 { UAMEASUNIT_ENERGY_KILOCALORIE, 1.0, "1.00 Calories", "1 Calorie", "1 Cal", "1.0 Cal", "1Cal", "1Cal", 0,1, 0,1 },
132 { UAMEASUNIT_ENERGY_KILOCALORIE, 37.203, "37.20 Calories", "37 Calories", "37.203 Cal", "37.2 Cal", "37Cal", "37Cal", 0,2, 0,2 },
133 { UAMEASUNIT_ENERGY_FOODCALORIE, 1.0, "1.00 Calories", "1 Calorie", "1 Cal", "1.0 Cal", "1Cal", "1Cal", 0,1, 0,1 },
134 { UAMEASUNIT_ENERGY_FOODCALORIE, 37.203, "37.20 Calories", "37 Calories", "37.203 Cal", "37.2 Cal", "37Cal", "37Cal", 0,2, 0,2 },
135 { (UAMeasureUnit)0, 0, NULL, NULL, NULL, NULL, NULL, NULL }
136};
137
2ca993e8
A
138static const SingleUnitFormat fr_singFmt[] = {
139// unit value wide_2 wide_0 shrt_X shrt_1 narr_0 numr_0 wide_0 narr_0
3d1f044b
A
140 { UAMEASUNIT_DURATION_MINUTE, 0.0, "0,00 minute", "0 minute", "0\\u00A0mn", "0,0\\u00A0mn", "0mn", "0mn", 0,1, 0,1 },
141 { UAMEASUNIT_DURATION_MINUTE, 1.0, "1,00 minute", "1 minute", "1\\u00A0mn", "1,0\\u00A0mn", "1mn", "1mn", 0,1, 0,1 },
142 { UAMEASUNIT_DURATION_MINUTE, 5.25, "5,25 minutes", "5 minutes", "5,25\\u00A0mn", "5,2\\u00A0mn", "5mn", "5mn", 0,1, 0,1 },
143 { UAMEASUNIT_LENGTH_CENTIMETER, 37.203, "37,20\\u00A0centim\\u00E8tres", "37\\u00A0centim\\u00E8tres", "37,203\\u202Fcm", "37,2\\u202Fcm", "37 cm", "37 cm", 0,2, 0,2 },
144 { UAMEASUNIT_TEMPERATURE_CELSIUS, 37.203, "37,20\\u00A0degr\\u00E9s Celsius","37\\u00A0degr\\u00E9s Celsius", "37,203\\u202F\\u00B0C", "37,2\\u202F\\u00B0C", "37\\u00B0C", "37\\u00B0", 0,2, 0,2 },
145 { UAMEASUNIT_TEMPERATURE_FAHRENHEIT, 37.203, "37,20\\u00A0degr\\u00E9s Fahrenheit", "37\\u00A0degr\\u00E9s Fahrenheit", "37,203\\u202F\\u00B0F", "37,2\\u202F\\u00B0F", "37\\u202F\\u00B0F", "37\\u00B0", 0,2, 0,2 },
146 { UAMEASUNIT_TEMPERATURE_GENERIC, 37.203, "37,20\\u00A0degr\\u00E9s", "37\\u00A0degr\\u00E9s", "37,203\\u00B0", "37,2\\u00B0", "37\\u00B0", "37\\u00B0", 0,2, 0,2 },
147 { UAMEASUNIT_VOLUME_LITER, 37.203, "37,20\\u00A0litres", "37\\u00A0litres", "37,203\\u202Fl", "37,2\\u202Fl", "37 l", "37 l", 0,2, 0,2 },
148 { UAMEASUNIT_ENERGY_FOODCALORIE, 37.203, "37,20\\u00A0kilocalories", "37\\u00A0kilocalories", "37,203\\u202Fkcal","37,2\\u202Fkcal","37\\u202Fkcal","37\\u202Fkcal", 0,2, 0,2 },
2ca993e8
A
149 { (UAMeasureUnit)0, 0, NULL, NULL, NULL, NULL, NULL, NULL }
150};
151
152static const SingleUnitFormat fr_CA_singFmt[] = {
153// unit value wide_2 wide_0 shrt_X shrt_1 narr_0 numr_0 wide_0 narr_0
154 { UAMEASUNIT_DURATION_MINUTE, 0.0, "0,00 minute", "0 minute", "0 min", "0,0 min", "0m", "0m", 0,1, 0,1 },
155 { UAMEASUNIT_DURATION_MINUTE, 1.0, "1,00 minute", "1 minute", "1 min", "1,0 min", "1m", "1m", 0,1, 0,1 },
156 { UAMEASUNIT_DURATION_MINUTE, 5.25, "5,25 minutes", "5 minutes", "5,25 min", "5,2 min", "5m", "5m", 0,1, 0,1 },
157 { UAMEASUNIT_LENGTH_CENTIMETER, 37.203, "37,20 centim\\u00E8tres", "37 centim\\u00E8tres", "37,203 cm", "37,2 cm", "37 cm", "37 cm", 0,2, 0,2 },
c5116b9f
A
158 { UAMEASUNIT_TEMPERATURE_CELSIUS, 37.203, "37,20 degr\\u00E9s Celsius", "37 degr\\u00E9s Celsius", "37,203\\u00A0\\u00B0C", "37,2\\u00A0\\u00B0C", "37\\u00A0\\u00B0C", "37\\u00B0", 0,2, 0,2 },
159 { UAMEASUNIT_TEMPERATURE_FAHRENHEIT, 37.203, "37,20 degr\\u00E9s Fahrenheit", "37 degr\\u00E9s Fahrenheit", "37,203\\u00A0\\u00B0F", "37,2\\u00A0\\u00B0F", "37\\u00A0\\u00B0F", "37\\u00B0", 0,2, 0,2 },
2ca993e8
A
160 { UAMEASUNIT_TEMPERATURE_GENERIC, 37.203, "37,20\\u00B0", "37\\u00B0", "37,203\\u00B0", "37,2\\u00B0", "37\\u00B0", "37\\u00B0", 0,2, 0,2 },
161 { UAMEASUNIT_VOLUME_LITER, 37.203, "37,20 litres", "37 litres", "37,203 L", "37,2 L", "37L", "37L", 0,2, 0,2 },
3d1f044b 162 { UAMEASUNIT_ENERGY_FOODCALORIE, 37.203, "37,20 calories", "37 calories", "37,203 cal", "37,2 cal", "37 cal", "37 cal", 0,2, 0,2 },
2ca993e8
A
163 { (UAMeasureUnit)0, 0, NULL, NULL, NULL, NULL, NULL, NULL }
164};
165
c5116b9f
A
166static const SingleUnitFormat zh_Hant_singFmt[] = {
167// unit value wide_2 wide_0 shrt_X shrt_1 narr_0 numr_0 wide_0 narr_0
168 { UAMEASUNIT_DURATION_MINUTE, 5.25, "5.25\\u5206\\u9418", "5\\u5206\\u9418", "5.25\\u5206\\u9418", "5.2\\u5206\\u9418", "5\\u5206", "5\\u5206", 0,1, 0,1 },
169 { UAMEASUNIT_LENGTH_CENTIMETER, 37.203, "37.20\\u516C\\u5206", "37\\u516C\\u5206", "37.203\\u516C\\u5206", "37.2\\u516C\\u5206", "37\\u516C\\u5206", "37\\u516C\\u5206", 0,2, 0,2 },
170 { UAMEASUNIT_TEMPERATURE_GENERIC, 37.203, "37.20\\u00B0", "37\\u00B0", "37.203\\u00B0", "37.2\\u00B0", "37\\u00B0", "37\\u00B0", 0,2, 0,2 },
171 { UAMEASUNIT_ANGLE_DEGREE, 37.203, "37.20\\u5EA6", "37\\u5EA6", "37.203\\u00B0", "37.2\\u00B0", "37\\u00B0", "37\\u00B0", 0,2, 0,2 },
172 { (UAMeasureUnit)0, 0, NULL, NULL, NULL, NULL, NULL, NULL }
173};
174
2ca993e8
A
175static const SingleUnitFormat cs_singFmt[] = {
176// unit value wide_2 wide_0 shrt_X shrt_1 narr_0 numr_0 wide_0 narr_0
177 { UAMEASUNIT_DURATION_MINUTE, 0.0, "0,00 minuty", "0 minut", "0 min", "0,0 min", "0 m", "0 m", 0,1, 0,1 }, // other for integer, else many
178 { UAMEASUNIT_DURATION_MINUTE, 1.0, "1,00 minuty", "1 minuta", "1 min", "1,0 min", "1 m", "1 m", 0,1, 0,1 }, // one for integer, else many
179 { UAMEASUNIT_DURATION_MINUTE, 2.0, "2,00 minuty", "2 minuty", "2 min", "2,0 min", "2 m", "2 m", 0,1, 0,1 }, // few for integer, else many
180 { UAMEASUNIT_DURATION_MINUTE, 8.5, "8,50 minuty", "8 minut", "8,5 min", "8,5 min", "8 m", "8 m", 0,1, 0,1 }, // other for integer, else many
181 { (UAMeasureUnit)0, 0, NULL, NULL, NULL, NULL, NULL, NULL }
182};
183
340931cb
A
184static const SingleUnitFormat da_singFmt[] = {
185// unit value wide_2 wide_0 shrt_X shrt_1 narr_0 numr_0 wide_0 narr_0
186 { UAMEASUNIT_SPEED_KILOMETER_PER_HOUR, 1.1, "1,10 kilometer i timen", "1 kilometer i timen", "1,1 km/t.", "1,1 km/t.", "1 km/t", "1 km/t", 0,1, 0,1 }, // other for integer, else many
187 { UAMEASUNIT_SPEED_KILOMETER_PER_HOUR, 2.0, "2,00 kilometer i timen", "2 kilometer i timen", "2 km/t.", "2,0 km/t.", "2 km/t", "2 km/t", 0,1, 0,1 }, // other for integer, else many
188 { (UAMeasureUnit)0, 0, NULL, NULL, NULL, NULL, NULL, NULL }
189};
190
191static const SingleUnitFormat fi_singFmt[] = {
192// unit value wide_2 wide_0 shrt_X shrt_1 narr_0 numr_0 wide_0 narr_0
193 { UAMEASUNIT_DURATION_HOUR, 37.203, "37,20 tuntia", "37 tuntia", "37,203 t", "37,2 t", "37 t", "37 t", 0,2, 0,2 },
194 { UAMEASUNIT_DURATION_MINUTE, 37.203, "37,20 minuuttia", "37 minuuttia", "37,203 min", "37,2 min", "37 min", "37 min", 0,2, 0,2 },
195 { (UAMeasureUnit)0, 0, NULL, NULL, NULL, NULL, NULL, NULL }
196};
197
1a147d09
A
198static const SingleUnitFormat nl_singFmt[] = {
199// unit value wide_2 wide_0 shrt_X shrt_1 narr_0 numr_0 wide_0 narr_0
200 { UAMEASUNIT_TEMPERATURE_CELSIUS, 37.203, "37,20 graden Celsius", "37 graden Celsius", "37,203\\u00A0\\u00B0C", "37,2\\u00A0\\u00B0C", "37\\u00B0", "37\\u00B0", 0,2, 0,2 },
201 { UAMEASUNIT_TEMPERATURE_FAHRENHEIT, 37.203, "37,20 graden Fahrenheit", "37 graden Fahrenheit", "37,203\\u00A0\\u00B0F", "37,2\\u00A0\\u00B0F", "37\\u00B0F", "37\\u00B0", 0,2, 0,2 },
202 { (UAMeasureUnit)0, 0, NULL, NULL, NULL, NULL, NULL, NULL }
203};
204
205static const SingleUnitFormat it_singFmt[] = {
206// unit value wide_2 wide_0 shrt_X shrt_1 narr_0 numr_0 wide_0 narr_0
207 { UAMEASUNIT_DURATION_HOUR, 37.203, "37,20 ore", "37 ore", "37,203 h", "37,2 h", "37 h", "37 h", 0,2, 0,2 },
208 { UAMEASUNIT_DURATION_MINUTE, 37.203, "37,20 minuti", "37 minuti", "37,203 min", "37,2 min", "37 min", "37 min", 0,2, 0,2 },
209 { (UAMeasureUnit)0, 0, NULL, NULL, NULL, NULL, NULL, NULL }
210};
211
212static const SingleUnitFormat nb_singFmt[] = {
213// unit value wide_2 wide_0 shrt_X shrt_1 narr_0 numr_0 wide_0 narr_0
214 { UAMEASUNIT_DURATION_HOUR, 37.203, "37,20 timer", "37 timer", "37,203 t", "37,2 t", "37 t", "37 t", 0,2, 0,2 },
215 { UAMEASUNIT_DURATION_MINUTE, 37.203, "37,20 minutter", "37 minutter", "37,203 min", "37,2 min", "37 m", "37 m", 0,2, 0,2 },
340931cb
A
216 { UAMEASUNIT_LENGTH_INCH, 1.0, "1,00 tomme", "1 tomme", "1 to", "1,0 to", "1 to", "1 to", 0,1, 0,1 },
217 { UAMEASUNIT_LENGTH_INCH, 37.203, "37,20 tommer", "37 tommer", "37,203 to", "37,2 to", "37 to", "37 to", 0,2, 0,2 },
218 { (UAMeasureUnit)0, 0, NULL, NULL, NULL, NULL, NULL, NULL }
219};
220
221static const SingleUnitFormat ro_singFmt[] = {
222// unit value wide_2 wide_0 shrt_X shrt_1 narr_0 numr_0 wide_0 narr_0
223 { UAMEASUNIT_DURATION_HOUR, 37.203, "37,20 ore", "37 de ore", "37,203 ore", "37,2 ore", "37 h", "37 h", 0,2, 0,2 },
224 { UAMEASUNIT_DURATION_MINUTE, 37.203, "37,20 minute", "37 de minute", "37,203 min.", "37,2 min.", "37 m", "37 m", 0,2, 0,2 },
225 { (UAMeasureUnit)0, 0, NULL, NULL, NULL, NULL, NULL, NULL }
226};
227
228static const SingleUnitFormat uk_singFmt[] = {
229// unit value wide_2 wide_0 shrt_X shrt_1 narr_0 numr_0 wide_0 narr_0
230 { UAMEASUNIT_LENGTH_FOOT, 1.0, "1,00 \\u0444\\u0443\\u0442\\u0430", "1 \\u0444\\u0443\\u0442", "1 \\u0444\\u0442", "1,0 \\u0444\\u0442", "1 \\u0444\\u0442", "1 \\u0444\\u0442", 0,1, 0,1 },
231 { UAMEASUNIT_LENGTH_FOOT, 10.0, "10,00 \\u0444\\u0443\\u0442\\u0430", "10 \\u0444\\u0443\\u0442\\u0456\\u0432", "10 \\u0444\\u0442", "10,0 \\u0444\\u0442", "10 \\u0444\\u0442", "10 \\u0444\\u0442", 0,2, 0,2 },
232 { (UAMeasureUnit)0, 0, NULL, NULL, NULL, NULL, NULL, NULL }
233};
234
235static const SingleUnitFormat vi_singFmt[] = {
236// unit value wide_2 wide_0 shrt_X shrt_1 narr_0 numr_0 wide_0 narr_0
237 { UAMEASUNIT_ENERGY_KILOCALORIE, 123.0, "123,00 kil\\u00F4calo", "123 kil\\u00F4calo", "123 kcal", "123,0 kcal", "123 kcal", "123 kcal", 0,3, 0,3 },
238 { UAMEASUNIT_ENERGY_KILOJOULE, 123.0, "123,00 kil\\u00F4jun", "123 kil\\u00F4jun", "123 kJ", "123,0 kJ", "123 kJ", "123 kJ", 0,3, 0,3 },
1a147d09
A
239 { (UAMeasureUnit)0, 0, NULL, NULL, NULL, NULL, NULL, NULL }
240};
241
2ca993e8
A
242static const SingleUnitName en_singNam[] = {
243// unit wide shrt narr
244 { UAMEASUNIT_DURATION_MINUTE, "minutes", "min", "min" },
245 { UAMEASUNIT_DURATION_CENTURY, "centuries", "c", "c" },
246 { UAMEASUNIT_LENGTH_CENTIMETER, "centimeters", "cm", "cm" },
247 { UAMEASUNIT_SPEED_KILOMETER_PER_HOUR, "kilometers per hour", "km/hour", "km/hr" },
248 { UAMEASUNIT_TEMPERATURE_CELSIUS, "degrees Celsius", "deg. C", "\\u00B0C" },
249 { UAMEASUNIT_TEMPERATURE_FAHRENHEIT, "degrees Fahrenheit", "deg. F", "\\u00B0F" },
f3c0d7a5 250 { UAMEASUNIT_TEMPERATURE_GENERIC, "degrees", "deg.", "deg." },
2ca993e8
A
251 { UAMEASUNIT_VOLUME_LITER, "liters", "liters", "liter" },
252 { UAMEASUNIT_ENERGY_FOODCALORIE, "Calories", "Cal", "Cal" },
253 { UAMEASUNIT_ENERGY_JOULE, "joules", "joules", "joule" },
254 { UAMEASUNIT_DIGITAL_MEGABYTE, "megabytes", "MByte", "MByte" },
255 { (UAMeasureUnit)0, NULL, NULL, NULL }
256};
257
258static const SingleUnitName en_GB_singNam[] = {
259// unit wide shrt narr
260 { UAMEASUNIT_DURATION_MINUTE, "minutes", "min", "min" },
261 { UAMEASUNIT_LENGTH_CENTIMETER, "centimetres", "cm", "cm" },
262 { UAMEASUNIT_TEMPERATURE_CELSIUS, "degrees Celsius", "deg. C", "\\u00B0C" },
263 { UAMEASUNIT_TEMPERATURE_FAHRENHEIT, "degrees Fahrenheit", "deg. F", "\\u00B0F" },
f3c0d7a5 264 { UAMEASUNIT_TEMPERATURE_GENERIC, "degrees", "deg.", "deg." },
2ca993e8
A
265 { UAMEASUNIT_VOLUME_LITER, "litres", "litres", "litre" },
266 { UAMEASUNIT_ENERGY_FOODCALORIE, "Calories", "Cal", "Cal" },
267 { (UAMeasureUnit)0, NULL, NULL, NULL }
268};
269
270static const UAMeasure meas_hrMnSc[] = { {37.3,UAMEASUNIT_DURATION_HOUR}, {12.1,UAMEASUNIT_DURATION_MINUTE}, {5.32,UAMEASUNIT_DURATION_SECOND} };
271static const UAMeasure meas_hrMn[] = { {37.3,UAMEASUNIT_DURATION_HOUR}, {12.1,UAMEASUNIT_DURATION_MINUTE} };
272static const UAMeasure meas_mCm[] = { {37.3,UAMEASUNIT_LENGTH_METER}, {12.1,UAMEASUNIT_LENGTH_CENTIMETER} };
273static const UAMeasure meas_cm[] = { {12.1,UAMEASUNIT_LENGTH_CENTIMETER} };
274static const UAMeasure meas_2hrMn[] = { {2.0,UAMEASUNIT_DURATION_HOUR}, {12.1,UAMEASUNIT_DURATION_MINUTE} };
275static const UAMeasure meas_moDys[] = { {1.0,UAMEASUNIT_DURATION_MONTH}, {2.0,UAMEASUNIT_DURATION_DAY} };
276
277static const MultipleUnitFormat en_multFmt[] = {
340931cb
A
278// measures count wide_2 wide_0 shrt_X shrt_1 shrtr_1 narr_0 numr_0 numr_2
279 { meas_hrMnSc, UPRV_LENGTHOF(meas_hrMnSc), "37 hours, 12 minutes, 5.32 seconds", "37 hours, 12 minutes, 5 seconds", "37 hr, 12 min, 5.32 sec", "37 hr, 12 min, 5.3 sec", "37hr 12min 5.3sec", "37h 12m 5s", "37:12:05", "37:12:05.32",
2ca993e8
A
280 /* ranges_wide_2: */ {{UAMEASUNIT_DURATION_HOUR,0,8},{UAMEASUNIT_DURATION_HOUR|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_DURATION_MINUTE,10,20},{UAMEASUNIT_DURATION_MINUTE|UAMEASFMT_NUMERIC_FIELD_FLAG,10,12},{UAMEASUNIT_DURATION_SECOND,22,34},{UAMEASUNIT_DURATION_SECOND|UAMEASFMT_NUMERIC_FIELD_FLAG,22,26}},
281 /* ranges_shrtr_1: */ {{UAMEASUNIT_DURATION_HOUR,0,4},{UAMEASUNIT_DURATION_HOUR|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_DURATION_MINUTE, 5,10},{UAMEASUNIT_DURATION_MINUTE|UAMEASFMT_NUMERIC_FIELD_FLAG, 5, 7},{UAMEASUNIT_DURATION_SECOND,11,17},{UAMEASUNIT_DURATION_SECOND|UAMEASFMT_NUMERIC_FIELD_FLAG,11,14}},
340931cb
A
282 /* ranges_numr_0: */ {{UAMEASUNIT_DURATION_HOUR,0,2},{UAMEASUNIT_DURATION_HOUR|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_DURATION_MINUTE, 3, 5},{UAMEASUNIT_DURATION_MINUTE|UAMEASFMT_NUMERIC_FIELD_FLAG, 3, 5},{UAMEASUNIT_DURATION_SECOND, 6, 8},{UAMEASUNIT_DURATION_SECOND|UAMEASFMT_NUMERIC_FIELD_FLAG, 6, 8}},
283 /* ranges_numr_2: */ {{UAMEASUNIT_DURATION_HOUR,0,2},{UAMEASUNIT_DURATION_HOUR|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_DURATION_MINUTE, 3, 5},{UAMEASUNIT_DURATION_MINUTE|UAMEASFMT_NUMERIC_FIELD_FLAG, 3, 5},{UAMEASUNIT_DURATION_SECOND, 6, 11},{UAMEASUNIT_DURATION_SECOND|UAMEASFMT_NUMERIC_FIELD_FLAG, 6, 11}} },
284 { meas_hrMn, UPRV_LENGTHOF(meas_hrMn), "37 hours, 12.10 minutes", "37 hours, 12 minutes", "37 hr, 12.1 min", "37 hr, 12.1 min", "37hr 12.1min", "37h 12m", "37:12", "37:12.10",
2ca993e8
A
285 /* ranges_wide_2: */ {{UAMEASUNIT_DURATION_HOUR,0,8},{UAMEASUNIT_DURATION_HOUR|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_DURATION_MINUTE,10,23},{UAMEASUNIT_DURATION_MINUTE|UAMEASFMT_NUMERIC_FIELD_FLAG,10,15}},
286 /* ranges_shrtr_1: */ {{UAMEASUNIT_DURATION_HOUR,0,4},{UAMEASUNIT_DURATION_HOUR|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_DURATION_MINUTE, 5,12},{UAMEASUNIT_DURATION_MINUTE|UAMEASFMT_NUMERIC_FIELD_FLAG, 5, 9}},
340931cb
A
287 /* ranges_numr_0: */ {{UAMEASUNIT_DURATION_HOUR,0,2},{UAMEASUNIT_DURATION_HOUR|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_DURATION_MINUTE, 3, 5},{UAMEASUNIT_DURATION_MINUTE|UAMEASFMT_NUMERIC_FIELD_FLAG, 3, 5}},
288 /* ranges_numr_2: */ {{UAMEASUNIT_DURATION_HOUR,0,2},{UAMEASUNIT_DURATION_HOUR|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_DURATION_MINUTE, 3, 8},{UAMEASUNIT_DURATION_MINUTE|UAMEASFMT_NUMERIC_FIELD_FLAG, 3, 8}} },
289 { meas_mCm, UPRV_LENGTHOF(meas_mCm), "37 meters, 12.10 centimeters", "37 meters, 12 centimeters", "37 m, 12.1 cm", "37 m, 12.1 cm", "37m 12.1cm", "37m 12cm", "37m 12cm", "37m 12.10cm",
2ca993e8
A
290 /* ranges_wide_2: */ {{UAMEASUNIT_LENGTH_METER,0,9},{UAMEASUNIT_LENGTH_METER|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_LENGTH_CENTIMETER,11,28},{UAMEASUNIT_LENGTH_CENTIMETER|UAMEASFMT_NUMERIC_FIELD_FLAG,11,16}},
291 /* ranges_shrtr_1: */ {{UAMEASUNIT_LENGTH_METER,0,3},{UAMEASUNIT_LENGTH_METER|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_LENGTH_CENTIMETER, 4,10},{UAMEASUNIT_LENGTH_CENTIMETER|UAMEASFMT_NUMERIC_FIELD_FLAG, 4, 8}},
340931cb
A
292 /* ranges_numr_0: */ {{UAMEASUNIT_LENGTH_METER,0,3},{UAMEASUNIT_LENGTH_METER|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_LENGTH_CENTIMETER, 4, 8},{UAMEASUNIT_LENGTH_CENTIMETER|UAMEASFMT_NUMERIC_FIELD_FLAG, 4, 6}},
293 /* ranges_numr_2: */ {{UAMEASUNIT_LENGTH_METER,0,3},{UAMEASUNIT_LENGTH_METER|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_LENGTH_CENTIMETER, 4, 11},{UAMEASUNIT_LENGTH_CENTIMETER|UAMEASFMT_NUMERIC_FIELD_FLAG, 4, 9}} },
294 { meas_cm, UPRV_LENGTHOF(meas_cm), "12.10 centimeters", "12 centimeters", "12.1 cm", "12.1 cm", "12.1cm", "12cm", "12cm", "12.10cm",
2ca993e8
A
295 /* ranges_wide_2: */ {{UAMEASUNIT_LENGTH_CENTIMETER,0,17},{UAMEASUNIT_LENGTH_CENTIMETER|UAMEASFMT_NUMERIC_FIELD_FLAG,0,5}},
296 /* ranges_shrtr_1: */ {{UAMEASUNIT_LENGTH_CENTIMETER,0, 6},{UAMEASUNIT_LENGTH_CENTIMETER|UAMEASFMT_NUMERIC_FIELD_FLAG,0,4}},
340931cb
A
297 /* ranges_numr_0: */ {{UAMEASUNIT_LENGTH_CENTIMETER,0, 4},{UAMEASUNIT_LENGTH_CENTIMETER|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2}},
298 /* ranges_numr_2: */ {{UAMEASUNIT_LENGTH_CENTIMETER,0, 7},{UAMEASUNIT_LENGTH_CENTIMETER|UAMEASFMT_NUMERIC_FIELD_FLAG,0,5}} },
299 { NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, {{0,0,0}}, {{0,0,0}}, {{0,0,0}}, {{0,0,0}} }
2ca993e8
A
300};
301
302static const MultipleUnitFormat en_GB_multFmt[] = {
340931cb
A
303// measures count wide_2 wide_0 shrt_X shrt_1 shrtr_1 narr_0 numr_0 numr_2
304 { meas_hrMnSc, UPRV_LENGTHOF(meas_hrMnSc), "37 hours, 12 minutes, 5.32 seconds", "37 hours, 12 minutes, 5 seconds", "37 hrs, 12 min, 5.32 secs", "37 hrs, 12 min, 5.3 secs", "37hrs 12min 5.3secs", "37h 12m 5s", "37:12:05", "37:12:05.32",
2ca993e8
A
305 /* ranges_wide_2: */ {{UAMEASUNIT_DURATION_HOUR,0,8},{UAMEASUNIT_DURATION_HOUR|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_DURATION_MINUTE,10,20},{UAMEASUNIT_DURATION_MINUTE|UAMEASFMT_NUMERIC_FIELD_FLAG,10,12},{UAMEASUNIT_DURATION_SECOND,22,34},{UAMEASUNIT_DURATION_SECOND|UAMEASFMT_NUMERIC_FIELD_FLAG,22,26}},
306 /* ranges_shrtr_1: */ {{UAMEASUNIT_DURATION_HOUR,0,5},{UAMEASUNIT_DURATION_HOUR|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_DURATION_MINUTE, 6,11},{UAMEASUNIT_DURATION_MINUTE|UAMEASFMT_NUMERIC_FIELD_FLAG, 6, 8},{UAMEASUNIT_DURATION_SECOND,12,19},{UAMEASUNIT_DURATION_SECOND|UAMEASFMT_NUMERIC_FIELD_FLAG,12,15}},
340931cb
A
307 /* ranges_numr_0: */ {{UAMEASUNIT_DURATION_HOUR,0,2},{UAMEASUNIT_DURATION_HOUR|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_DURATION_MINUTE, 3, 5},{UAMEASUNIT_DURATION_MINUTE|UAMEASFMT_NUMERIC_FIELD_FLAG, 3, 5},{UAMEASUNIT_DURATION_SECOND, 6, 8},{UAMEASUNIT_DURATION_SECOND|UAMEASFMT_NUMERIC_FIELD_FLAG, 6, 8}},
308 /* ranges_numr_2: */ {{UAMEASUNIT_DURATION_HOUR,0,2},{UAMEASUNIT_DURATION_HOUR|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_DURATION_MINUTE, 3, 5},{UAMEASUNIT_DURATION_MINUTE|UAMEASFMT_NUMERIC_FIELD_FLAG, 3, 5},{UAMEASUNIT_DURATION_SECOND, 6, 11},{UAMEASUNIT_DURATION_SECOND|UAMEASFMT_NUMERIC_FIELD_FLAG, 6, 11}} },
309 { meas_hrMn, UPRV_LENGTHOF(meas_hrMn), "37 hours, 12.10 minutes", "37 hours, 12 minutes", "37 hrs, 12.1 min", "37 hrs, 12.1 min", "37hrs 12.1min", "37h 12m", "37:12", "37:12.10",
2ca993e8
A
310 /* ranges_wide_2: */ {{UAMEASUNIT_DURATION_HOUR,0,8},{UAMEASUNIT_DURATION_HOUR|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_DURATION_MINUTE,10,23},{UAMEASUNIT_DURATION_MINUTE|UAMEASFMT_NUMERIC_FIELD_FLAG,10,15}},
311 /* ranges_shrtr_1: */ {{UAMEASUNIT_DURATION_HOUR,0,5},{UAMEASUNIT_DURATION_HOUR|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_DURATION_MINUTE, 6,13},{UAMEASUNIT_DURATION_MINUTE|UAMEASFMT_NUMERIC_FIELD_FLAG, 6,10}},
340931cb
A
312 /* ranges_numr_0: */ {{UAMEASUNIT_DURATION_HOUR,0,2},{UAMEASUNIT_DURATION_HOUR|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_DURATION_MINUTE, 3, 5},{UAMEASUNIT_DURATION_MINUTE|UAMEASFMT_NUMERIC_FIELD_FLAG, 3, 5}},
313 /* ranges_numr_2: */ {{UAMEASUNIT_DURATION_HOUR,0,2},{UAMEASUNIT_DURATION_HOUR|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_DURATION_MINUTE, 3, 8},{UAMEASUNIT_DURATION_MINUTE|UAMEASFMT_NUMERIC_FIELD_FLAG, 3, 8}} },
314 { meas_mCm, UPRV_LENGTHOF(meas_mCm), "37 metres, 12.10 centimetres", "37 metres, 12 centimetres", "37 m, 12.1 cm", "37 m, 12.1 cm", "37m 12.1cm", "37m 12cm", "37m 12cm", "37m 12.10cm",
2ca993e8
A
315 /* ranges_wide_2: */ {{UAMEASUNIT_LENGTH_METER,0,9},{UAMEASUNIT_LENGTH_METER|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_LENGTH_CENTIMETER,11,28},{UAMEASUNIT_LENGTH_CENTIMETER|UAMEASFMT_NUMERIC_FIELD_FLAG,11,16}},
316 /* ranges_shrtr_1: */ {{UAMEASUNIT_LENGTH_METER,0,3},{UAMEASUNIT_LENGTH_METER|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_LENGTH_CENTIMETER, 4,10},{UAMEASUNIT_LENGTH_CENTIMETER|UAMEASFMT_NUMERIC_FIELD_FLAG, 4, 8}},
340931cb
A
317 /* ranges_numr_0: */ {{UAMEASUNIT_LENGTH_METER,0,3},{UAMEASUNIT_LENGTH_METER|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_LENGTH_CENTIMETER, 4, 8},{UAMEASUNIT_LENGTH_CENTIMETER|UAMEASFMT_NUMERIC_FIELD_FLAG, 4, 6}},
318 /* ranges_numr_2: */ {{UAMEASUNIT_LENGTH_METER,0,3},{UAMEASUNIT_LENGTH_METER|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2},{UAMEASUNIT_LENGTH_CENTIMETER, 4, 11},{UAMEASUNIT_LENGTH_CENTIMETER|UAMEASFMT_NUMERIC_FIELD_FLAG, 4, 9}} },
319 { meas_cm, UPRV_LENGTHOF(meas_cm), "12.10 centimetres", "12 centimetres", "12.1 cm", "12.1 cm", "12.1cm", "12cm", "12cm", "12.10cm",
2ca993e8
A
320 /* ranges_wide_2: */ {{UAMEASUNIT_LENGTH_CENTIMETER,0,17},{UAMEASUNIT_LENGTH_CENTIMETER|UAMEASFMT_NUMERIC_FIELD_FLAG,0,5}},
321 /* ranges_shrtr_1: */ {{UAMEASUNIT_LENGTH_CENTIMETER,0, 6},{UAMEASUNIT_LENGTH_CENTIMETER|UAMEASFMT_NUMERIC_FIELD_FLAG,0,4}},
340931cb
A
322 /* ranges_numr_0: */ {{UAMEASUNIT_LENGTH_CENTIMETER,0, 4},{UAMEASUNIT_LENGTH_CENTIMETER|UAMEASFMT_NUMERIC_FIELD_FLAG,0,2}},
323 /* ranges_numr_2: */ {{UAMEASUNIT_LENGTH_CENTIMETER,0, 7},{UAMEASUNIT_LENGTH_CENTIMETER|UAMEASFMT_NUMERIC_FIELD_FLAG,0,5}} },
324 { NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, {{0,0,0}}, {{0,0,0}}, {{0,0,0}}, {{0,0,0}} }
2ca993e8
A
325};
326
327static const MultipleUnitFormat he_multFmt[] = {
328// measures count wide_2 wide_0
340931cb
A
329 { meas_2hrMn, UPRV_LENGTHOF(meas_2hrMn), "\\u05E9\\u05E2\\u05EA\\u05D9\\u05D9\\u05DD \\u05D5-12.10 \\u05D3\\u05E7\\u05D5\\u05EA", "\\u05E9\\u05E2\\u05EA\\u05D9\\u05D9\\u05DD \\u05D5-12 \\u05D3\\u05E7\\u05D5\\u05EA",
330 /* shrt_X, shrt_1*/ "\\u05E9\\u05E2\\u05EA\\u05D9\\u05D9\\u05DD \\u05D5-12.1 \\u05D3\\u05E7\\u05F3", "\\u05E9\\u05E2\\u05EA\\u05D9\\u05D9\\u05DD \\u05D5-12.1 \\u05D3\\u05E7\\u05F3",
331 /* shrtr_1, narr_0, numr_0, numr_2*/ "\\u05E9\\u05E2\\u05EA\\u05D9\\u05D9\\u05DD \\u05D5-12.1 \\u05D3\\u05E7\\u05F3", "\\u05E9\\u05E2\\u05EA\\u05D9\\u05D9\\u05DD \\u05D5-12 \\u05D3\\u05E7\\u05F3", "2:12", "2:12.10",
332 /* ranges_wide_2: */ {{UAMEASUNIT_DURATION_HOUR,0,6},{UAMEASUNIT_DURATION_MINUTE,9,19},{UAMEASUNIT_DURATION_MINUTE|UAMEASFMT_NUMERIC_FIELD_FLAG,9,14}},
333 /* ranges_shrtr_1: */ {{UAMEASUNIT_DURATION_HOUR,0,6},{UAMEASUNIT_DURATION_MINUTE,9,17},{UAMEASUNIT_DURATION_MINUTE|UAMEASFMT_NUMERIC_FIELD_FLAG,9,13}},
334 /* ranges_numr_0: */ {{UAMEASUNIT_DURATION_HOUR,0,1},{UAMEASUNIT_DURATION_HOUR|UAMEASFMT_NUMERIC_FIELD_FLAG,0,1},{UAMEASUNIT_DURATION_MINUTE,2,4},{UAMEASUNIT_DURATION_MINUTE|UAMEASFMT_NUMERIC_FIELD_FLAG,2,4}},
335 /* ranges_numr_2: */ {{UAMEASUNIT_DURATION_HOUR,0,1},{UAMEASUNIT_DURATION_HOUR|UAMEASFMT_NUMERIC_FIELD_FLAG,0,1},{UAMEASUNIT_DURATION_MINUTE,2,7},{UAMEASUNIT_DURATION_MINUTE|UAMEASFMT_NUMERIC_FIELD_FLAG,2,7}} },
336 { NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, {{0,0,0}}, {{0,0,0}}, {{0,0,0}}, {{0,0,0}} }
2ca993e8
A
337};
338
339static const MultipleUnitFormat hi_multFmt[] = {
340// measures count wide_2 wide_0
3d1f044b
A
341 { meas_moDys, UPRV_LENGTHOF(meas_moDys), "1 \\u092E\\u093E\\u0939 \\u0914\\u0930 2.00 \\u0926\\u093F\\u0928", "1 \\u092E\\u093E\\u0939 \\u0914\\u0930 2 \\u0926\\u093F\\u0928",
342 /* shrt_X, shrt_1*/ "1 \\u092E\\u093E\\u0939, 2 \\u0926\\u093F\\u0928", "1 \\u092E\\u093E\\u0939, 2.0 \\u0926\\u093F\\u0928",
340931cb 343 /* shrtr_1, narr_0, numr_0, numr_2*/ "1 \\u092E\\u093E\\u0939, 2.0 \\u0926\\u093F\\u0928", "1 \\u092E\\u093E\\u0939, 2 \\u0926\\u093F\\u0928", "1 \\u092E\\u093E\\u0939, 2 \\u0926\\u093F\\u0928", "1 \\u092E\\u093E\\u0939, 2.00 \\u0926\\u093F\\u0928",
2ca993e8
A
344 /* ranges_wide_2: */ {{UAMEASUNIT_DURATION_MONTH,0,5},{UAMEASUNIT_DURATION_MONTH|UAMEASFMT_NUMERIC_FIELD_FLAG,0,1},{UAMEASUNIT_DURATION_DAY,9,17},{UAMEASUNIT_DURATION_DAY|UAMEASFMT_NUMERIC_FIELD_FLAG,9,13}},
345 /* ranges_shrtr_1: */ {{UAMEASUNIT_DURATION_MONTH,0,5},{UAMEASUNIT_DURATION_MONTH|UAMEASFMT_NUMERIC_FIELD_FLAG,0,1},{UAMEASUNIT_DURATION_DAY,7,14},{UAMEASUNIT_DURATION_DAY|UAMEASFMT_NUMERIC_FIELD_FLAG,7,10}},
340931cb
A
346 /* ranges_numr_0: */ {{UAMEASUNIT_DURATION_MONTH,0,5},{UAMEASUNIT_DURATION_MONTH|UAMEASFMT_NUMERIC_FIELD_FLAG,0,1},{UAMEASUNIT_DURATION_DAY,7,12},{UAMEASUNIT_DURATION_DAY|UAMEASFMT_NUMERIC_FIELD_FLAG,7,8}},
347 /* ranges_numr_0: */ {{UAMEASUNIT_DURATION_MONTH,0,5},{UAMEASUNIT_DURATION_MONTH|UAMEASFMT_NUMERIC_FIELD_FLAG,0,1},{UAMEASUNIT_DURATION_DAY,7,15},{UAMEASUNIT_DURATION_DAY|UAMEASFMT_NUMERIC_FIELD_FLAG,7,11}} },
348 { NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, {{0,0,0}}, {{0,0,0}}, {{0,0,0}}, {{0,0,0}} }
2ca993e8
A
349};
350
351static const UAMeasureUnit unit_hrMnSc[] = { UAMEASUNIT_DURATION_HOUR, UAMEASUNIT_DURATION_MINUTE, UAMEASUNIT_DURATION_SECOND };
352static const UAMeasureUnit unit_hrMn[] = { UAMEASUNIT_DURATION_HOUR, UAMEASUNIT_DURATION_MINUTE };
353static const UAMeasureUnit unit_mCm[] = { UAMEASUNIT_LENGTH_METER, UAMEASUNIT_LENGTH_CENTIMETER };
354
355static const MultipleUnitName en_multNam[] = {
356// units count listStyle wide shrt narr
357 { unit_hrMnSc, UPRV_LENGTHOF(unit_hrMnSc), UAMEASNAME_LIST_STANDARD, "hours, minutes, and seconds", "hours, min, and secs", "hour, min, and sec" },
358 { unit_hrMnSc, UPRV_LENGTHOF(unit_hrMnSc), UAMEASNAME_LIST_MATCHUNITS, "hours, minutes, seconds", "hours, min, secs", "hour min sec" },
359 { unit_hrMn, UPRV_LENGTHOF(unit_hrMn), UAMEASNAME_LIST_STANDARD, "hours and minutes", "hours and min", "hour and min" },
360 { unit_hrMn, UPRV_LENGTHOF(unit_hrMn), UAMEASNAME_LIST_MATCHUNITS, "hours, minutes", "hours, min", "hour min" },
361 { unit_mCm, UPRV_LENGTHOF(unit_mCm), UAMEASNAME_LIST_STANDARD, "meters and centimeters", "meters and cm", "meter and cm" },
362 { unit_mCm, UPRV_LENGTHOF(unit_mCm), UAMEASNAME_LIST_MATCHUNITS, "meters, centimeters", "meters, cm", "meter cm" },
363 { NULL, 0, (UAMeasureNameListStyle)0, NULL, NULL, NULL }
364};
365
366static const MultipleUnitName en_GB_multNam[] = {
367// units count listStyle wide shrt narr
368 { unit_hrMnSc, UPRV_LENGTHOF(unit_hrMnSc), UAMEASNAME_LIST_STANDARD, "hours, minutes and seconds", "hours, min and secs", "hour, min and sec" },
369 { unit_hrMnSc, UPRV_LENGTHOF(unit_hrMnSc), UAMEASNAME_LIST_MATCHUNITS, "hours, minutes, seconds", "hours, min, secs", "hour min sec" },
370 { unit_hrMn, UPRV_LENGTHOF(unit_hrMn), UAMEASNAME_LIST_STANDARD, "hours and minutes", "hours and min", "hour and min" },
371 { unit_hrMn, UPRV_LENGTHOF(unit_hrMn), UAMEASNAME_LIST_MATCHUNITS, "hours, minutes", "hours, min", "hour min" },
372 { unit_mCm, UPRV_LENGTHOF(unit_mCm), UAMEASNAME_LIST_STANDARD, "metres and centimetres", "metres and cm", "m and cm" },
373 { unit_mCm, UPRV_LENGTHOF(unit_mCm), UAMEASNAME_LIST_MATCHUNITS, "metres, centimetres", "metres, cm", "m cm" },
374 { NULL, 0, (UAMeasureNameListStyle)0, NULL, NULL, NULL }
375};
376
377static const MultipleUnitName ja_multNam[] = {
378// units count listStyle wide shrt narr
379 { unit_hrMnSc, UPRV_LENGTHOF(unit_hrMnSc), UAMEASNAME_LIST_STANDARD, "\\u6642\\u9593\\u3001\\u5206\\u3001\\u79D2", "\\u6642\\u9593\\u3001\\u5206\\u3001\\u79D2", "\\u6642\\u9593\\u3001\\u5206\\u3001\\u79D2" },
380 { unit_hrMnSc, UPRV_LENGTHOF(unit_hrMnSc), UAMEASNAME_LIST_MATCHUNITS, "\\u6642\\u9593 \\u5206 \\u79D2", "\\u6642\\u9593 \\u5206 \\u79D2", "\\u6642\\u9593\\u5206\\u79D2" },
381 { unit_hrMn, UPRV_LENGTHOF(unit_hrMn), UAMEASNAME_LIST_STANDARD, "\\u6642\\u9593\\u3001\\u5206", "\\u6642\\u9593\\u3001\\u5206", "\\u6642\\u9593\\u3001\\u5206" },
382 { unit_hrMn, UPRV_LENGTHOF(unit_hrMn), UAMEASNAME_LIST_MATCHUNITS, "\\u6642\\u9593 \\u5206", "\\u6642\\u9593 \\u5206", "\\u6642\\u9593\\u5206" },
383 { unit_mCm, UPRV_LENGTHOF(unit_mCm), UAMEASNAME_LIST_STANDARD, "\\u30E1\\u30FC\\u30C8\\u30EB\\u3001\\u30BB\\u30F3\\u30C1\\u30E1\\u30FC\\u30C8\\u30EB", "m\\u3001cm", "m\\u3001cm" },
384 { unit_mCm, UPRV_LENGTHOF(unit_mCm), UAMEASNAME_LIST_MATCHUNITS, "\\u30E1\\u30FC\\u30C8\\u30EB \\u30BB\\u30F3\\u30C1\\u30E1\\u30FC\\u30C8\\u30EB", "m cm", "mcm" },
385 { NULL, 0, (UAMeasureNameListStyle)0, NULL, NULL, NULL }
386};
387
388static const LocaleWidthNumFmtItem lwnItems[] = {
389 // ============= TIER 0,1 and subocales
390 { "en", en_singFmt, en_singNam, en_multFmt, en_multNam }, // en: try plural cases for 1, other
391 { "en_GB", en_GB_singFmt, en_GB_singNam, en_GB_multFmt, en_GB_multNam },
340931cb 392 { "en_AU", en_AU_singFmt, NULL, NULL, NULL },
2ca993e8
A
393 { "de", NULL, NULL, NULL, NULL }, // de: try plural cases for 1, other
394 { "fr", fr_singFmt, NULL, NULL, NULL }, // fr: try plural cases for 1, other
395 { "fr_CA", fr_CA_singFmt, NULL, NULL, NULL },
396 { "ja", NULL, NULL, NULL, ja_multNam }, // ja: try plural cases for other only
397 { "zh_Hans", NULL, NULL, NULL, NULL }, // zh_Hans: try plural cases for other only
398
399 // ============= TIER 2,3 and sublocales
400 { "ar", NULL, NULL, NULL, NULL }, // ar: try plural cases for 0, 1, 2, 3, 11, 100
401 { "ca", NULL, NULL, NULL, NULL }, // ca: try plural cases for 1, other
402 { "cs", cs_singFmt, NULL, NULL, NULL }, // cs: try plural cases for 1, 2, 8.5, 5
340931cb 403 { "da", da_singFmt, NULL, NULL, NULL }, // da: try plural cases for 1, other
2ca993e8
A
404 { "el", NULL, NULL, NULL, NULL }, // el: try plural cases for 1, other
405 { "es", NULL, NULL, NULL, NULL }, // es: try plural cases for 1, other
406 { "es_MX", NULL, NULL, NULL, NULL },
340931cb 407 { "fi", fi_singFmt, NULL, NULL, NULL }, // fi: try plural cases for 1, other
2ca993e8
A
408 { "he", NULL, NULL, he_multFmt, NULL }, // he: try plural cases for 1, 2, 20, 3
409 { "hi", NULL, NULL, hi_multFmt, NULL }, // hi: try plural cases for 1 (covers 0.0-1.0), other
410 { "hr", NULL, NULL, NULL, NULL }, // hr: try plural cases for 1, 2, 5
411 { "hu", NULL, NULL, NULL, NULL }, // hu: try plural cases for 1, other
412 { "id", NULL, NULL, NULL, NULL }, // id: try plural cases for other only
1a147d09 413 { "it", it_singFmt, NULL, NULL, NULL }, // it: try plural cases for 1, other
2ca993e8
A
414 { "ko", NULL, NULL, NULL, NULL }, // ko: try plural cases for other only
415 { "ms", NULL, NULL, NULL, NULL }, // ms: try plural cases for other only
1a147d09
A
416 { "nb", nb_singFmt, NULL, NULL, NULL }, // nb: try plural cases for 1, other
417 { "nl", nl_singFmt, NULL, NULL, NULL }, // nl: try plural cases for 1, other
2ca993e8
A
418 { "pl", NULL, NULL, NULL, NULL }, // pl: try plural cases for 1, 2, 5, 8.5
419 { "pt", NULL, NULL, NULL, NULL }, // pt: try plural cases for 1, other
420 { "pt_PT", NULL, NULL, NULL, NULL },
340931cb 421 { "ro", ro_singFmt, NULL, NULL, NULL }, // ro: try plural cases for 1, 2, 20
2ca993e8
A
422 { "ru", NULL, NULL, NULL, NULL }, // ru: try plural cases for 1, 2, 5, 8.5
423 { "sk", NULL, NULL, NULL, NULL }, // sk: try plural cases for 1, 2, 8.5, 5
424 { "sv", NULL, NULL, NULL, NULL }, // sv: try plural cases for 1, other
425 { "th", NULL, NULL, NULL, NULL }, // th: try plural cases for other only
426 { "tr", NULL, NULL, NULL, NULL }, // tr: try plural cases for 1, other
340931cb
A
427 { "uk", uk_singFmt, NULL, NULL, NULL }, // uk: try plural cases for 1, 2, 5, 8.5
428 { "vi", vi_singFmt, NULL, NULL, NULL }, // vi: try plural cases for other only
c5116b9f 429 { "zh_Hant", zh_Hant_singFmt, NULL, NULL, NULL }, // zh_Hant: try plural cases for other only
2ca993e8
A
430 { "zh_Hant_HK", NULL, NULL, NULL, NULL },
431
432 // =============TERMINATOR
433 { NULL, NULL, NULL, NULL, NULL }
434};
435
436enum { kUBufMax = 96, kBBufMax = 192 };
437
438
439static void TestUAMeasureFormat()
440{
441 const LocaleWidthNumFmtItem * itemPtr;
442 log_verbose("\nTesting uameasfmt functions\n");
443 for (itemPtr = lwnItems; itemPtr->locale != NULL; itemPtr++) {
444 UChar uget[kUBufMax];
445 UChar uexp[kUBufMax];
446 char bget[kBBufMax];
447 char bexp[kBBufMax];
448 int32_t ugetLen, uexpLen;
449 UErrorCode status = U_ZERO_ERROR;
450 UNumberFormat* numfmt_0;
451 UNumberFormat* numfmt_1;
452 UNumberFormat* numfmt_2;
453 UAMeasureFormat* measfmt_wide_2;
454 UAMeasureFormat* measfmt_wide_0;
455 UAMeasureFormat* measfmt_shrt_X;
456 UAMeasureFormat* measfmt_shrt_1;
457 UAMeasureFormat* measfmt_shrtr_1;
458 UAMeasureFormat* measfmt_narr_0;
459 UAMeasureFormat* measfmt_numr_0;
340931cb 460 UAMeasureFormat* measfmt_numr_2;
2ca993e8
A
461
462 numfmt_0 = unum_open(UNUM_DECIMAL, NULL, 0, itemPtr->locale, NULL, &status);
463 if ( U_FAILURE(status) ) {
464 log_data_err("FAIL: unum_open(UNUM_DECIMAL,...) fails for locale %s: %s\n",
465 itemPtr->locale, u_errorName(status) );
466 continue;
467 }
468 numfmt_1 = unum_clone(numfmt_0, &status);
469 numfmt_2 = unum_clone(numfmt_0, &status);
470 if ( U_FAILURE(status) ) {
471 log_err("FAIL: unum_clone fails for locale %s: %s\n",
472 itemPtr->locale, u_errorName(status) );
473 unum_close(numfmt_0);
474 continue;
475 }
476 unum_setAttribute(numfmt_0, UNUM_MIN_FRACTION_DIGITS, 0);
477 unum_setAttribute(numfmt_0, UNUM_MAX_FRACTION_DIGITS, 0);
478 unum_setAttribute(numfmt_0, UNUM_ROUNDING_MODE, UNUM_ROUND_DOWN);
479 unum_setAttribute(numfmt_1, UNUM_MIN_FRACTION_DIGITS, 1);
480 unum_setAttribute(numfmt_1, UNUM_MAX_FRACTION_DIGITS, 1);
481 unum_setAttribute(numfmt_1, UNUM_ROUNDING_MODE, UNUM_ROUND_DOWN);
482 unum_setAttribute(numfmt_2, UNUM_MIN_FRACTION_DIGITS, 2);
483 unum_setAttribute(numfmt_2, UNUM_MAX_FRACTION_DIGITS, 2);
484 unum_setAttribute(numfmt_2, UNUM_ROUNDING_MODE, UNUM_ROUND_DOWN);
485
486 measfmt_wide_2 = uameasfmt_open(itemPtr->locale, UAMEASFMT_WIDTH_WIDE, unum_clone(numfmt_2, &status), &status); // wide, num fmt with 2 decimals
487 measfmt_wide_0 = uameasfmt_open(itemPtr->locale, UAMEASFMT_WIDTH_WIDE, unum_clone(numfmt_0, &status), &status); // wide, num fmt with 0 decimals
488 measfmt_shrt_X = uameasfmt_open(itemPtr->locale, UAMEASFMT_WIDTH_SHORT, NULL, &status); // short, default num fmt
489 measfmt_shrt_1 = uameasfmt_open(itemPtr->locale, UAMEASFMT_WIDTH_SHORT, unum_clone(numfmt_1, &status), &status); // short, num fmt with 1 decimal
490 measfmt_shrtr_1 = uameasfmt_open(itemPtr->locale, UAMEASFMT_WIDTH_SHORTER, unum_clone(numfmt_1, &status), &status); // shorter, num fmt with 1 decimal
491 measfmt_narr_0 = uameasfmt_open(itemPtr->locale, UAMEASFMT_WIDTH_NARROW, unum_clone(numfmt_0, &status), &status); // narrow, num fmt with 0 decimal
492 measfmt_numr_0 = uameasfmt_open(itemPtr->locale, UAMEASFMT_WIDTH_NUMERIC, unum_clone(numfmt_0, &status), &status); // numeric, num fmt with 0 decimal
340931cb 493 measfmt_numr_2 = uameasfmt_open(itemPtr->locale, UAMEASFMT_WIDTH_NUMERIC, unum_clone(numfmt_2, &status), &status); // numeric, num fmt with 2 decimal
2ca993e8
A
494
495 if ( U_FAILURE(status) ) {
496 log_data_err("FAIL: uameasfmt_open fails for locale %s, various widths and number formatters: %s\n",
497 itemPtr->locale, u_errorName(status) );
498 unum_close(numfmt_0);
499 unum_close(numfmt_1);
500 unum_close(numfmt_2);
501 continue;
502 }
503
504 if (itemPtr->singleUnitFormatTests != NULL) {
505 const SingleUnitFormat * singFmtPtr;
506 for (singFmtPtr = itemPtr->singleUnitFormatTests; singFmtPtr->expectFmt_wide_2 != 0; singFmtPtr++) {
507 UFieldPosition fpos = { UNUM_INTEGER_FIELD, 0, 0 };
508 // wide_2
509 status = U_ZERO_ERROR;
510 ugetLen = uameasfmt_formatGetPosition(measfmt_wide_2, singFmtPtr->value, singFmtPtr->unit, uget, kUBufMax, NULL, &status);
511 if ( U_FAILURE(status) ) {
512 log_err("FAIL: uameasfmt_formatGetPosition locale %s, single format wide_2 for unit %d:%d, status %s\n",
513 itemPtr->locale, ((int)singFmtPtr->unit) >> 8, ((int)singFmtPtr->unit) & 0xFF, u_errorName(status));
514 } else {
515 uexpLen = u_unescape(singFmtPtr->expectFmt_wide_2, uexp, kUBufMax);
516 if (ugetLen != uexpLen || u_strcmp(uget, uexp) != 0 ) {
517 u_strToUTF8(bexp, kBBufMax, NULL, uexp, uexpLen, &status);
518 u_strToUTF8(bget, kBBufMax, NULL, uget, ugetLen, &status);
519 log_err("FAIL: uameasfmt_formatGetPosition locale %s, single format wide_2 for unit %d:%d, expected \"%s\", got \"%s\"\n",
520 itemPtr->locale, ((int)singFmtPtr->unit) >> 8, ((int)singFmtPtr->unit) & 0xFF, bexp, bget);
521 }
522 }
523 // wide_0
524 status = U_ZERO_ERROR;
525 fpos.beginIndex = -1;
526 fpos.endIndex = -1;
527 ugetLen = uameasfmt_formatGetPosition(measfmt_wide_0, singFmtPtr->value, singFmtPtr->unit, uget, kUBufMax, &fpos, &status);
528 if ( U_FAILURE(status) ) {
529 log_err("FAIL: uameasfmt_formatGetPosition locale %s, single format wide_0 for unit %d:%d, status %s\n",
530 itemPtr->locale, ((int)singFmtPtr->unit) >> 8, ((int)singFmtPtr->unit) & 0xFF, u_errorName(status));
531 } else {
532 uexpLen = u_unescape(singFmtPtr->expectFmt_wide_0, uexp, kUBufMax);
533 if (ugetLen != uexpLen || u_strcmp(uget, uexp) != 0 || fpos.beginIndex != singFmtPtr->beginInt_wide_0 || fpos.endIndex != singFmtPtr->endInt_wide_0) {
534 u_strToUTF8(bexp, kBBufMax, NULL, uexp, uexpLen, &status);
535 u_strToUTF8(bget, kBBufMax, NULL, uget, ugetLen, &status);
536 log_err("FAIL: uameasfmt_formatGetPosition locale %s, single format wide_0 for unit %d:%d,\n expect \"%s\" int pos [%d:%d],\n get \"%s\" int pos [%d:%d]\n",
537 itemPtr->locale, ((int)singFmtPtr->unit) >> 8, ((int)singFmtPtr->unit) & 0xFF,
538 bexp, singFmtPtr->beginInt_wide_0, singFmtPtr->endInt_wide_0,
539 bget, fpos.beginIndex, fpos.endIndex);
540 }
541 }
542 // shrt_X
543 status = U_ZERO_ERROR;
544 ugetLen = uameasfmt_formatGetPosition(measfmt_shrt_X, singFmtPtr->value, singFmtPtr->unit, uget, kUBufMax, NULL, &status);
545 if ( U_FAILURE(status) ) {
546 log_err("FAIL: uameasfmt_formatGetPosition locale %s, single format shrt_X for unit %d:%d, status %s\n",
547 itemPtr->locale, ((int)singFmtPtr->unit) >> 8, ((int)singFmtPtr->unit) & 0xFF, u_errorName(status));
548 } else {
549 uexpLen = u_unescape(singFmtPtr->expectFmt_shrt_X, uexp, kUBufMax);
550 if (ugetLen != uexpLen || u_strcmp(uget, uexp) != 0 ) {
551 u_strToUTF8(bexp, kBBufMax, NULL, uexp, uexpLen, &status);
552 u_strToUTF8(bget, kBBufMax, NULL, uget, ugetLen, &status);
553 log_err("FAIL: uameasfmt_formatGetPosition locale %s, single format shrt_X for unit %d:%d, expected \"%s\", got \"%s\"\n",
554 itemPtr->locale, ((int)singFmtPtr->unit) >> 8, ((int)singFmtPtr->unit) & 0xFF, bexp, bget);
555 }
556 }
557 // shrt_1
558 status = U_ZERO_ERROR;
559 ugetLen = uameasfmt_formatGetPosition(measfmt_shrt_1, singFmtPtr->value, singFmtPtr->unit, uget, kUBufMax, NULL, &status);
560 if ( U_FAILURE(status) ) {
561 log_err("FAIL: uameasfmt_formatGetPosition locale %s, single format shrt_1 for unit %d:%d, status %s\n",
562 itemPtr->locale, ((int)singFmtPtr->unit) >> 8, ((int)singFmtPtr->unit) & 0xFF, u_errorName(status));
563 } else {
564 uexpLen = u_unescape(singFmtPtr->expectFmt_shrt_1, uexp, kUBufMax);
565 if (ugetLen != uexpLen || u_strcmp(uget, uexp) != 0 ) {
566 u_strToUTF8(bexp, kBBufMax, NULL, uexp, uexpLen, &status);
567 u_strToUTF8(bget, kBBufMax, NULL, uget, ugetLen, &status);
568 log_err("FAIL: uameasfmt_formatGetPosition locale %s, single format shrt_1 for unit %d:%d, expected \"%s\", got \"%s\"\n",
569 itemPtr->locale, ((int)singFmtPtr->unit) >> 8, ((int)singFmtPtr->unit) & 0xFF, bexp, bget);
570 }
571 }
572 // narr_0
573 status = U_ZERO_ERROR;
574 ugetLen = uameasfmt_formatGetPosition(measfmt_narr_0, singFmtPtr->value, singFmtPtr->unit, uget, kUBufMax, NULL, &status);
575 if ( U_FAILURE(status) ) {
576 log_err("FAIL: uameasfmt_formatGetPosition locale %s, single format narr_0 for unit %d:%d, status %s\n",
577 itemPtr->locale, ((int)singFmtPtr->unit) >> 8, ((int)singFmtPtr->unit) & 0xFF, u_errorName(status));
578 } else {
579 uexpLen = u_unescape(singFmtPtr->expectFmt_narr_0, uexp, kUBufMax);
580 if (ugetLen != uexpLen || u_strcmp(uget, uexp) != 0 ) {
581 u_strToUTF8(bexp, kBBufMax, NULL, uexp, uexpLen, &status);
582 u_strToUTF8(bget, kBBufMax, NULL, uget, ugetLen, &status);
583 log_err("FAIL: uameasfmt_formatGetPosition locale %s, single format narr_0 for unit %d:%d, expected \"%s\", got \"%s\"\n",
584 itemPtr->locale, ((int)singFmtPtr->unit) >> 8, ((int)singFmtPtr->unit) & 0xFF, bexp, bget);
585 }
586 }
587 // numr_0
588 status = U_ZERO_ERROR;
589 fpos.beginIndex = -1;
590 fpos.endIndex = -1;
591 ugetLen = uameasfmt_formatGetPosition(measfmt_numr_0, singFmtPtr->value, singFmtPtr->unit, uget, kUBufMax, &fpos, &status);
592 if ( U_FAILURE(status) ) {
593 log_err("FAIL: uameasfmt_formatGetPosition locale %s, single format numr_0 for unit %d:%d, status %s\n",
594 itemPtr->locale, ((int)singFmtPtr->unit) >> 8, ((int)singFmtPtr->unit) & 0xFF, u_errorName(status));
595 } else {
596 uexpLen = u_unescape(singFmtPtr->expectFmt_numr_0, uexp, kUBufMax);
597 if (ugetLen != uexpLen || u_strcmp(uget, uexp) != 0 || fpos.beginIndex != singFmtPtr->beginInt_numr_0 || fpos.endIndex != singFmtPtr->endInt_numr_0) {
598 u_strToUTF8(bexp, kBBufMax, NULL, uexp, uexpLen, &status);
599 u_strToUTF8(bget, kBBufMax, NULL, uget, ugetLen, &status);
600 log_err("FAIL: uameasfmt_formatGetPosition locale %s, single format numr_0 for unit %d:%d,\n expect \"%s\" int pos [%d:%d],\n get \"%s\" int pos [%d:%d]\n",
601 itemPtr->locale, ((int)singFmtPtr->unit) >> 8, ((int)singFmtPtr->unit) & 0xFF,
602 bexp, singFmtPtr->beginInt_numr_0, singFmtPtr->endInt_numr_0,
603 bget, fpos.beginIndex, fpos.endIndex);
604 }
605 }
606 }
607 }
608
609 if (itemPtr->singleUnitNameTests != NULL) {
610 const SingleUnitName * singNamPtr;
611 for (singNamPtr = itemPtr->singleUnitNameTests; singNamPtr->expectName_wide != 0; singNamPtr++) {
612 // wide
613 status = U_ZERO_ERROR;
614 ugetLen = uameasfmt_getUnitName(measfmt_wide_2, singNamPtr->unit, uget, kUBufMax, &status);
615 if ( U_FAILURE(status) ) {
616 log_err("FAIL: uameasfmt_getUnitName locale %s, single name wide for unit %d:%d, status %s\n",
617 itemPtr->locale, ((int)singNamPtr->unit) >> 8, ((int)singNamPtr->unit) & 0xFF, u_errorName(status));
618 } else {
619 uexpLen = u_unescape(singNamPtr->expectName_wide, uexp, kUBufMax);
620 if (ugetLen != uexpLen || u_strcmp(uget, uexp) != 0 ) {
621 u_strToUTF8(bexp, kBBufMax, NULL, uexp, uexpLen, &status);
622 u_strToUTF8(bget, kBBufMax, NULL, uget, ugetLen, &status);
623 log_err("FAIL: uameasfmt_getUnitName locale %s, single name wide for unit %d:%d, expected \"%s\", got \"%s\"\n",
624 itemPtr->locale, ((int)singNamPtr->unit) >> 8, ((int)singNamPtr->unit) & 0xFF, bexp, bget);
625 }
626 }
627 // shrt
628 status = U_ZERO_ERROR;
629 ugetLen = uameasfmt_getUnitName(measfmt_shrt_X, singNamPtr->unit, uget, kUBufMax, &status);
630 if ( U_FAILURE(status) ) {
631 log_err("FAIL: uameasfmt_getUnitName locale %s, single name shrt for unit %d:%d, status %s\n",
632 itemPtr->locale, ((int)singNamPtr->unit) >> 8, ((int)singNamPtr->unit) & 0xFF, u_errorName(status));
633 } else {
634 uexpLen = u_unescape(singNamPtr->expectName_shrt, uexp, kUBufMax);
635 if (ugetLen != uexpLen || u_strcmp(uget, uexp) != 0 ) {
636 u_strToUTF8(bexp, kBBufMax, NULL, uexp, uexpLen, &status);
637 u_strToUTF8(bget, kBBufMax, NULL, uget, ugetLen, &status);
638 log_err("FAIL: uameasfmt_getUnitName locale %s, single name shrt for unit %d:%d, expected \"%s\", got \"%s\"\n",
639 itemPtr->locale, ((int)singNamPtr->unit) >> 8, ((int)singNamPtr->unit) & 0xFF, bexp, bget);
640 }
641 }
642 // narr
643 status = U_ZERO_ERROR;
644 ugetLen = uameasfmt_getUnitName(measfmt_narr_0, singNamPtr->unit, uget, kUBufMax, &status);
645 if ( U_FAILURE(status) ) {
646 log_err("FAIL: uameasfmt_getUnitName locale %s, single name narr for unit %d:%d, status %s\n",
647 itemPtr->locale, ((int)singNamPtr->unit) >> 8, ((int)singNamPtr->unit) & 0xFF, u_errorName(status));
648 } else {
649 uexpLen = u_unescape(singNamPtr->expectName_narr, uexp, kUBufMax);
650 if (ugetLen != uexpLen || u_strcmp(uget, uexp) != 0 ) {
651 u_strToUTF8(bexp, kBBufMax, NULL, uexp, uexpLen, &status);
652 u_strToUTF8(bget, kBBufMax, NULL, uget, ugetLen, &status);
653 log_err("FAIL: uameasfmt_getUnitName locale %s, single name narr for unit %d:%d, expected \"%s\", got \"%s\"\n",
654 itemPtr->locale, ((int)singNamPtr->unit) >> 8, ((int)singNamPtr->unit) & 0xFF, bexp, bget);
655 }
656 }
657 }
658 }
659
660 if (itemPtr->multipleUnitFormatTests != NULL) {
661 status = U_ZERO_ERROR;
662 UFieldPositionIterator* fpositer = ufieldpositer_open(&status);
663 if ( U_FAILURE(status) ) {
664 log_err("FAIL: ufieldpositer_open, status %s\n", u_errorName(status));
665 } else {
666 const MultipleUnitFormat * multFmtPtr;
667 for (multFmtPtr = itemPtr->multipleUnitFormatTests; multFmtPtr->measures != 0; multFmtPtr++) {
668 // wide_2
669 status = U_ZERO_ERROR;
670 ugetLen = uameasfmt_formatMultipleForFields(measfmt_wide_2, multFmtPtr->measures, multFmtPtr->measureCount, uget, kUBufMax, fpositer, &status);
671 if ( U_FAILURE(status) ) {
672 log_err("FAIL: uameasfmt_formatMultipleForFields locale %s, multiple format wide_2 for measureCount %d, status %s\n",
673 itemPtr->locale, multFmtPtr->measureCount, u_errorName(status));
674 } else {
675 uexpLen = u_unescape(multFmtPtr->expectFmt_wide_2, uexp, kUBufMax);
676 if (ugetLen != uexpLen || u_strcmp(uget, uexp) != 0 ) {
677 u_strToUTF8(bexp, kBBufMax, NULL, uexp, uexpLen, &status);
678 u_strToUTF8(bget, kBBufMax, NULL, uget, ugetLen, &status);
679 log_err("FAIL: uameasfmt_formatMultipleForFields locale %s, multiple format wide_2 for measureCount %d, expected \"%s\", got \"%s\"\n",
680 itemPtr->locale, multFmtPtr->measureCount, bexp, bget);
681 } else {
682 // check fpositer
683 int32_t field, beginIndex, endIndex, count;
684 for (count = 0; (field = ufieldpositer_next(fpositer, &beginIndex, &endIndex)) >= 0; count++) {
685 if (field != multFmtPtr->ranges_wide_2[count][0] || beginIndex != multFmtPtr->ranges_wide_2[count][1] || endIndex != multFmtPtr->ranges_wide_2[count][2]) {
686 log_err("FAIL: uameasfmt_formatMultipleForFields locale %s, multiple format wide_2 for measureCount %d,\n expect field %0X range %d..%d,\n get field %0X range %d..%d\n",
687 itemPtr->locale, multFmtPtr->measureCount,
688 multFmtPtr->ranges_wide_2[count][0], multFmtPtr->ranges_wide_2[count][1], multFmtPtr->ranges_wide_2[count][2],
689 field, beginIndex, endIndex);
690 break;
691 }
692 }
693 }
694 }
695 // wide_0
696 status = U_ZERO_ERROR;
697 ugetLen = uameasfmt_formatMultipleForFields(measfmt_wide_0, multFmtPtr->measures, multFmtPtr->measureCount, uget, kUBufMax, NULL, &status);
698 if ( U_FAILURE(status) ) {
699 log_err("FAIL: uameasfmt_formatMultipleForFields locale %s, multiple format wide_0 for measureCount %d, status %s\n",
700 itemPtr->locale, multFmtPtr->measureCount, u_errorName(status));
701 } else {
702 uexpLen = u_unescape(multFmtPtr->expectFmt_wide_0, uexp, kUBufMax);
703 if (ugetLen != uexpLen || u_strcmp(uget, uexp) != 0 ) {
704 u_strToUTF8(bexp, kBBufMax, NULL, uexp, uexpLen, &status);
705 u_strToUTF8(bget, kBBufMax, NULL, uget, ugetLen, &status);
706 log_err("FAIL: uameasfmt_formatMultipleForFields locale %s, multiple format wide_0 for measureCount %d, expected \"%s\", got \"%s\"\n",
707 itemPtr->locale, multFmtPtr->measureCount, bexp, bget);
708 }
709 }
710 // shrt_X
711 status = U_ZERO_ERROR;
712 ugetLen = uameasfmt_formatMultipleForFields(measfmt_shrt_X, multFmtPtr->measures, multFmtPtr->measureCount, uget, kUBufMax, NULL, &status);
713 if ( U_FAILURE(status) ) {
714 log_err("FAIL: uameasfmt_formatMultipleForFields locale %s, multiple format shrt_X for measureCount %d, status %s\n",
715 itemPtr->locale, multFmtPtr->measureCount, u_errorName(status));
716 } else {
717 uexpLen = u_unescape(multFmtPtr->expectFmt_shrt_X, uexp, kUBufMax);
718 if (ugetLen != uexpLen || u_strcmp(uget, uexp) != 0 ) {
719 u_strToUTF8(bexp, kBBufMax, NULL, uexp, uexpLen, &status);
720 u_strToUTF8(bget, kBBufMax, NULL, uget, ugetLen, &status);
721 log_err("FAIL: uameasfmt_formatMultipleForFields locale %s, multiple format shrt_X for measureCount %d, expected \"%s\", got \"%s\"\n",
722 itemPtr->locale, multFmtPtr->measureCount, bexp, bget);
723 }
724 }
725 // shrt_1
726 status = U_ZERO_ERROR;
727 ugetLen = uameasfmt_formatMultipleForFields(measfmt_shrt_1, multFmtPtr->measures, multFmtPtr->measureCount, uget, kUBufMax, NULL, &status);
728 if ( U_FAILURE(status) ) {
729 log_err("FAIL: uameasfmt_formatMultipleForFields locale %s, multiple format shrt_1 for measureCount %d, status %s\n",
730 itemPtr->locale, multFmtPtr->measureCount, u_errorName(status));
731 } else {
732 uexpLen = u_unescape(multFmtPtr->expectFmt_shrt_1, uexp, kUBufMax);
733 if (ugetLen != uexpLen || u_strcmp(uget, uexp) != 0 ) {
734 u_strToUTF8(bexp, kBBufMax, NULL, uexp, uexpLen, &status);
735 u_strToUTF8(bget, kBBufMax, NULL, uget, ugetLen, &status);
736 log_err("FAIL: uameasfmt_formatMultipleForFields locale %s, multiple format shrt_1 for measureCount %d, expected \"%s\", got \"%s\"\n",
737 itemPtr->locale, multFmtPtr->measureCount, bexp, bget);
738 }
739 }
740 // shrtr_1
741 status = U_ZERO_ERROR;
742 ugetLen = uameasfmt_formatMultipleForFields(measfmt_shrtr_1, multFmtPtr->measures, multFmtPtr->measureCount, uget, kUBufMax, fpositer, &status);
743 if ( U_FAILURE(status) ) {
744 log_err("FAIL: uameasfmt_formatMultipleForFields locale %s, multiple format shrtr_1 for measureCount %d, status %s\n",
745 itemPtr->locale, multFmtPtr->measureCount, u_errorName(status));
746 } else {
747 uexpLen = u_unescape(multFmtPtr->expectFmt_shrtr_1, uexp, kUBufMax);
748 if (ugetLen != uexpLen || u_strcmp(uget, uexp) != 0 ) {
749 u_strToUTF8(bexp, kBBufMax, NULL, uexp, uexpLen, &status);
750 u_strToUTF8(bget, kBBufMax, NULL, uget, ugetLen, &status);
751 log_err("FAIL: uameasfmt_formatMultipleForFields locale %s, multiple format shrtr_1 for measureCount %d, expected \"%s\", got \"%s\"\n",
752 itemPtr->locale, multFmtPtr->measureCount, bexp, bget);
753 } else {
754 // check fpositer
755 int32_t field, beginIndex, endIndex, count;
756 for (count = 0; (field = ufieldpositer_next(fpositer, &beginIndex, &endIndex)) >= 0; count++) {
757 if (field != multFmtPtr->ranges_shrtr_1[count][0] || beginIndex != multFmtPtr->ranges_shrtr_1[count][1] || endIndex != multFmtPtr->ranges_shrtr_1[count][2]) {
758 log_err("FAIL: uameasfmt_formatMultipleForFields locale %s, multiple format shrtr_1 for measureCount %d,\n expect field %0X range %d..%d,\n get field %0X range %d..%d\n",
759 itemPtr->locale, multFmtPtr->measureCount,
760 multFmtPtr->ranges_shrtr_1[count][0], multFmtPtr->ranges_shrtr_1[count][1], multFmtPtr->ranges_shrtr_1[count][2],
761 field, beginIndex, endIndex);
762 break;
763 }
764 }
765 }
766 }
767 // narr_0
768 status = U_ZERO_ERROR;
769 ugetLen = uameasfmt_formatMultipleForFields(measfmt_narr_0, multFmtPtr->measures, multFmtPtr->measureCount, uget, kUBufMax, NULL, &status);
770 if ( U_FAILURE(status) ) {
771 log_err("FAIL: uameasfmt_formatMultipleForFields locale %s, multiple format narr_0 for measureCount %d, status %s\n",
772 itemPtr->locale, multFmtPtr->measureCount, u_errorName(status));
773 } else {
774 uexpLen = u_unescape(multFmtPtr->expectFmt_narr_0, uexp, kUBufMax);
775 if (ugetLen != uexpLen || u_strcmp(uget, uexp) != 0 ) {
776 u_strToUTF8(bexp, kBBufMax, NULL, uexp, uexpLen, &status);
777 u_strToUTF8(bget, kBBufMax, NULL, uget, ugetLen, &status);
778 log_err("FAIL: uameasfmt_formatMultipleForFields locale %s, multiple format narr_0 for measureCount %d, expected \"%s\", got \"%s\"\n",
779 itemPtr->locale, multFmtPtr->measureCount, bexp, bget);
780 }
781 }
782 // numr_0
783 status = U_ZERO_ERROR;
784 ugetLen = uameasfmt_formatMultipleForFields(measfmt_numr_0, multFmtPtr->measures, multFmtPtr->measureCount, uget, kUBufMax, fpositer, &status);
785 if ( U_FAILURE(status) ) {
786 log_err("FAIL: uameasfmt_formatMultipleForFields locale %s, multiple format numr_0 for measureCount %d, status %s\n",
787 itemPtr->locale, multFmtPtr->measureCount, u_errorName(status));
788 } else {
789 uexpLen = u_unescape(multFmtPtr->expectFmt_numr_0, uexp, kUBufMax);
790 if (ugetLen != uexpLen || u_strcmp(uget, uexp) != 0 ) {
791 u_strToUTF8(bexp, kBBufMax, NULL, uexp, uexpLen, &status);
792 u_strToUTF8(bget, kBBufMax, NULL, uget, ugetLen, &status);
793 log_err("FAIL: uameasfmt_formatMultipleForFields locale %s, multiple format numr_0 for measureCount %d, expected \"%s\", got \"%s\"\n",
794 itemPtr->locale, multFmtPtr->measureCount, bexp, bget);
795 } else {
796 // check fpositer
797 int32_t field, beginIndex, endIndex, count;
798 for (count = 0; (field = ufieldpositer_next(fpositer, &beginIndex, &endIndex)) >= 0; count++) {
799 if (field != multFmtPtr->ranges_numr_0[count][0] || beginIndex != multFmtPtr->ranges_numr_0[count][1] || endIndex != multFmtPtr->ranges_numr_0[count][2]) {
800 log_err("FAIL: uameasfmt_formatMultipleForFields locale %s, multiple format numr_0 for measureCount %d,\n expect field %0X range %d..%d,\n get field %0X range %d..%d\n",
801 itemPtr->locale, multFmtPtr->measureCount,
802 multFmtPtr->ranges_numr_0[count][0], multFmtPtr->ranges_numr_0[count][1], multFmtPtr->ranges_numr_0[count][2],
803 field, beginIndex, endIndex);
804 break;
805 }
806 }
807 }
808 }
340931cb
A
809 // numr_2
810 status = U_ZERO_ERROR;
811 ugetLen = uameasfmt_formatMultipleForFields(measfmt_numr_2, multFmtPtr->measures, multFmtPtr->measureCount, uget, kUBufMax, fpositer, &status);
812 if ( U_FAILURE(status) ) {
813 log_err("FAIL: uameasfmt_formatMultipleForFields locale %s, multiple format numr_2 for measureCount %d, status %s\n",
814 itemPtr->locale, multFmtPtr->measureCount, u_errorName(status));
815 } else {
816 uexpLen = u_unescape(multFmtPtr->expectFmt_numr_2, uexp, kUBufMax);
817 if (ugetLen != uexpLen || u_strcmp(uget, uexp) != 0 ) {
818 u_strToUTF8(bexp, kBBufMax, NULL, uexp, uexpLen, &status);
819 u_strToUTF8(bget, kBBufMax, NULL, uget, ugetLen, &status);
820 log_err("FAIL: uameasfmt_formatMultipleForFields locale %s, multiple format numr_2 for measureCount %d, expected \"%s\", got \"%s\"\n",
821 itemPtr->locale, multFmtPtr->measureCount, bexp, bget);
822 } else {
823 // check fpositer
824 int32_t field, beginIndex, endIndex, count;
825 for (count = 0; (field = ufieldpositer_next(fpositer, &beginIndex, &endIndex)) >= 0; count++) {
826 if (field != multFmtPtr->ranges_numr_2[count][0] || beginIndex != multFmtPtr->ranges_numr_2[count][1] || endIndex != multFmtPtr->ranges_numr_2[count][2]) {
827 log_err("FAIL: uameasfmt_formatMultipleForFields locale %s, multiple format numr_2 for measureCount %d,\n expect field %0X range %d..%d,\n get field %0X range %d..%d\n",
828 itemPtr->locale, multFmtPtr->measureCount,
829 multFmtPtr->ranges_numr_2[count][0], multFmtPtr->ranges_numr_2[count][1], multFmtPtr->ranges_numr_2[count][2],
830 field, beginIndex, endIndex);
831 break;
832 }
833 }
834 }
835 }
2ca993e8
A
836 }
837 ufieldpositer_close(fpositer);
838 }
839 }
840
841 if (itemPtr->multipleUnitNameTests != NULL) {
842 const MultipleUnitName * multNamPtr;
843 for (multNamPtr = itemPtr->multipleUnitNameTests; multNamPtr->units != 0; multNamPtr++) {
844 // wide
845 status = U_ZERO_ERROR;
846 ugetLen = uameasfmt_getMultipleUnitNames(measfmt_wide_2, multNamPtr->units, multNamPtr->unitCount, multNamPtr->listStyle, uget, kUBufMax, &status);
847 if ( U_FAILURE(status) ) {
848 log_err("FAIL: uameasfmt_getMultipleUnitNames locale %s, multiple name wide for unitCount %d, listStyle %d, status %s\n",
849 itemPtr->locale, multNamPtr->unitCount, multNamPtr->listStyle, u_errorName(status));
850 } else {
851 uexpLen = u_unescape(multNamPtr->expectName_wide, uexp, kUBufMax);
852 if (ugetLen != uexpLen || u_strcmp(uget, uexp) != 0 ) {
853 u_strToUTF8(bexp, kBBufMax, NULL, uexp, uexpLen, &status);
854 u_strToUTF8(bget, kBBufMax, NULL, uget, ugetLen, &status);
855 log_err("FAIL: uameasfmt_getMultipleUnitNames locale %s, multiple name wide for unitCount %d, listStyle %d, expected \"%s\", got \"%s\"\n",
856 itemPtr->locale, multNamPtr->unitCount, multNamPtr->listStyle, bexp, bget);
857 }
858 }
859 // shrt
860 status = U_ZERO_ERROR;
861 ugetLen = uameasfmt_getMultipleUnitNames(measfmt_shrt_X, multNamPtr->units, multNamPtr->unitCount, multNamPtr->listStyle, uget, kUBufMax, &status);
862 if ( U_FAILURE(status) ) {
863 log_err("FAIL: uameasfmt_getMultipleUnitNames locale %s, multiple name shrt for unitCount %d, listStyle %d, status %s\n",
864 itemPtr->locale, multNamPtr->unitCount, multNamPtr->listStyle, u_errorName(status));
865 } else {
866 uexpLen = u_unescape(multNamPtr->expectName_shrt, uexp, kUBufMax);
867 if (ugetLen != uexpLen || u_strcmp(uget, uexp) != 0 ) {
868 u_strToUTF8(bexp, kBBufMax, NULL, uexp, uexpLen, &status);
869 u_strToUTF8(bget, kBBufMax, NULL, uget, ugetLen, &status);
870 log_err("FAIL: uameasfmt_getMultipleUnitNames locale %s, multiple name shrt for unitCount %d, listStyle %d, expected \"%s\", got \"%s\"\n",
871 itemPtr->locale, multNamPtr->unitCount, multNamPtr->listStyle, bexp, bget);
872 }
873 }
874 // narr
875 status = U_ZERO_ERROR;
876 ugetLen = uameasfmt_getMultipleUnitNames(measfmt_narr_0, multNamPtr->units, multNamPtr->unitCount, multNamPtr->listStyle, uget, kUBufMax, &status);
877 if ( U_FAILURE(status) ) {
878 log_err("FAIL: uameasfmt_getMultipleUnitNames locale %s, multiple name narr for unitCount %d, listStyle %d, status %s\n",
879 itemPtr->locale, multNamPtr->unitCount, multNamPtr->listStyle, u_errorName(status));
880 } else {
881 uexpLen = u_unescape(multNamPtr->expectName_narr, uexp, kUBufMax);
882 if (ugetLen != uexpLen || u_strcmp(uget, uexp) != 0 ) {
883 u_strToUTF8(bexp, kBBufMax, NULL, uexp, uexpLen, &status);
884 u_strToUTF8(bget, kBBufMax, NULL, uget, ugetLen, &status);
885 log_err("FAIL: uameasfmt_getMultipleUnitNames locale %s, multiple name narr for unitCount %d, listStyle %d, expected \"%s\", got \"%s\"\n",
886 itemPtr->locale, multNamPtr->unitCount, multNamPtr->listStyle, bexp, bget);
887 }
888 }
889 }
890 }
891
892 uameasfmt_close(measfmt_wide_2);
893 uameasfmt_close(measfmt_wide_0);
894 uameasfmt_close(measfmt_shrt_X);
895 uameasfmt_close(measfmt_shrt_1);
896 uameasfmt_close(measfmt_shrtr_1);
897 uameasfmt_close(measfmt_narr_0);
898 uameasfmt_close(measfmt_numr_0);
340931cb 899 uameasfmt_close(measfmt_numr_2);
2ca993e8
A
900
901 unum_close(numfmt_0);
902 unum_close(numfmt_1);
903 unum_close(numfmt_2);
904 }
905 /* sleep to check leaks etc */
f3c0d7a5 906#if U_PLATFORM_IS_DARWIN_BASED || U_PLATFORM_IS_LINUX_BASED || U_PLATFORM == U_PF_BSD || U_PLATFORM == U_PF_SOLARIS
2ca993e8 907 sleep(8);
f3c0d7a5 908#endif
2ca993e8
A
909}
910
a62d09fc
A
911static void TestUAMeasFmtOpenAllLocs()
912{
913 int32_t iLoc, nLoc = uloc_countAvailable();
914 for (iLoc = 0; iLoc <= nLoc; iLoc++) {
915 const char *loc = (iLoc < nLoc)? uloc_getAvailable(iLoc): "xyz" /* something bogus */;
916 if (loc != NULL) {
917 UAMeasureFormat* measfmt;
918 UErrorCode status;
919
920 status = U_ZERO_ERROR;
921 measfmt = uameasfmt_open(loc, UAMEASFMT_WIDTH_WIDE, NULL, &status);
922 if ( U_SUCCESS(status) ) {
923 uameasfmt_close(measfmt);
924 } else {
925 log_data_err("FAIL: uameasfmt_open fails for locale %-10s, width WIDE : %s\n", loc, u_errorName(status) );
926 }
927
928 status = U_ZERO_ERROR;
929 measfmt = uameasfmt_open(loc, UAMEASFMT_WIDTH_SHORT, NULL, &status);
930 if ( U_SUCCESS(status) ) {
931 uameasfmt_close(measfmt);
932 } else {
933 log_data_err("FAIL: uameasfmt_open fails for locale %-10s, width SHORT : %s\n", loc, u_errorName(status) );
934 }
935
936 status = U_ZERO_ERROR;
937 measfmt = uameasfmt_open(loc, UAMEASFMT_WIDTH_NARROW, NULL, &status);
938 if ( U_SUCCESS(status) ) {
939 uameasfmt_close(measfmt);
940 } else {
941 log_data_err("FAIL: uameasfmt_open fails for locale %-10s, width NARROW : %s\n", loc, u_errorName(status) );
942 }
943
944
945 status = U_ZERO_ERROR;
946 measfmt = uameasfmt_open(loc, UAMEASFMT_WIDTH_NUMERIC, NULL, &status);
947 if ( U_SUCCESS(status) ) {
948 uameasfmt_close(measfmt);
949 } else {
950 log_data_err("FAIL: uameasfmt_open fails for locale %-10s, width NUMERIC: %s\n", loc, u_errorName(status) );
951 }
952 }
953 }
954}
955
2ca993e8
A
956enum { kMeasureUnitMax = 3 };
957
958typedef struct {
959 const char* locale;
960 const char* category;
961 const char* usage;
962 int32_t unitCount;
963 UAMeasureUnit units[kMeasureUnitMax];
964} UnitsForUsageItem;
965
966static const UnitsForUsageItem unitsForUsageItems[] = {
967 { "en_US", "length", "person", 1, { UAMEASUNIT_LENGTH_INCH } },
968 { "en_US", "length", "person-informal", 2, { UAMEASUNIT_LENGTH_FOOT, UAMEASUNIT_LENGTH_INCH } },
969 { "en_US", "length", "person-small", 1, { UAMEASUNIT_LENGTH_INCH } },
970 { "fr_FR", "length", "person", 2, { UAMEASUNIT_LENGTH_METER, UAMEASUNIT_LENGTH_CENTIMETER } },
971 { "fr_FR", "length", "person-informal", 2, { UAMEASUNIT_LENGTH_METER, UAMEASUNIT_LENGTH_CENTIMETER } },
972 { "fr_FR", "length", "person-small", 1, { UAMEASUNIT_LENGTH_CENTIMETER } },
973 { "fr_FR@rg=USZZZZ", "length", "person", 1, { UAMEASUNIT_LENGTH_INCH } },
974 { "fr_FR@rg=USZZZZ", "length", "person-informal", 2, { UAMEASUNIT_LENGTH_FOOT, UAMEASUNIT_LENGTH_INCH } },
975 { "fr_FR@rg=USZZZZ", "length", "person-small", 1, { UAMEASUNIT_LENGTH_INCH } },
f3c0d7a5 976 { "en_IN", "pressure","baromtrc", 1, { UAMEASUNIT_PRESSURE_HECTOPASCAL } },
2ca993e8
A
977 { "es_MX", "pressure","baromtrc", 1, { UAMEASUNIT_PRESSURE_MILLIMETER_OF_MERCURY } },
978 { "fr_FR", "pressure","baromtrc", 1, { UAMEASUNIT_PRESSURE_HECTOPASCAL } },
979 { "pt"/*BR*/, "pressure","baromtrc", 1, { UAMEASUNIT_PRESSURE_MILLIBAR } },
980 { "en_US", "length", NULL, 1, { UAMEASUNIT_LENGTH_FOOT } },
981 { "en_US", "length", "large", 1, { UAMEASUNIT_LENGTH_MILE } },
982 { "en_US", "length", "small", 1, { UAMEASUNIT_LENGTH_INCH } },
983 { "fr_FR", "length", NULL, 1, { UAMEASUNIT_LENGTH_METER } },
984 { "fr_FR", "length", "large", 1, { UAMEASUNIT_LENGTH_KILOMETER } },
985 { "fr_FR", "length", "small", 1, { UAMEASUNIT_LENGTH_CENTIMETER } },
986 { "en_US", "xxxxxxxx","yyyyyyyy", 0, { (UAMeasureUnit)0 } },
340931cb
A
987 // <rdar://problem/59634873> kcal: default
988 { "fr_FR", "energy", "person-usage", 1, { UAMEASUNIT_ENERGY_KILOCALORIE } },
989 { "es_ES", "energy", "person-usage", 1, { UAMEASUNIT_ENERGY_KILOCALORIE } },
990 { "zh_CN", "energy", "person-usage", 1, { UAMEASUNIT_ENERGY_KILOCALORIE } },
991 // <rdar://problem/59634873> kJ: AU NZ
992 { "en_AU", "energy", "person-usage", 1, { UAMEASUNIT_ENERGY_KILOJOULE } },
993 { "en_NZ", "energy", "person-usage", 1, { UAMEASUNIT_ENERGY_KILOJOULE } },
994 // <rdar://problem/59634873> Cal: US CA
995 { "en_US", "energy", "person-usage", 1, { UAMEASUNIT_ENERGY_FOODCALORIE } },
996 { "en_CA", "energy", "person-usage", 1, { UAMEASUNIT_ENERGY_FOODCALORIE } },
997 // <rdar://problem/59634873> Cal: others as requested by Loc
998 { "he_IL", "energy", "person-usage", 1, { UAMEASUNIT_ENERGY_FOODCALORIE } },
999 { "pt_BR", "energy", "person-usage", 1, { UAMEASUNIT_ENERGY_FOODCALORIE } },
1000 { "zh_TW", "energy", "person-usage", 1, { UAMEASUNIT_ENERGY_FOODCALORIE } },
1001 { "ar_SA", "energy", "person-usage", 1, { UAMEASUNIT_ENERGY_FOODCALORIE } },
1002 { "ar_AE", "energy", "person-usage", 1, { UAMEASUNIT_ENERGY_FOODCALORIE } },
f3c0d7a5
A
1003 // tests for ms=
1004 { "en_US@ms=metric", "length", "large", 1, { UAMEASUNIT_LENGTH_KILOMETER } },
1005 { "fr_FR@ms=ussystem", "length", "large", 1, { UAMEASUNIT_LENGTH_MILE } },
1006 { "en_GB@ms=metric", "concentr", "blood-glucose", 1, { UAMEASUNIT_CONCENTRATION_MILLIMOLE_PER_LITER } },
1007 { "en_US@ms=uksystem", "mass", "person", 2, { UAMEASUNIT_MASS_STONE, UAMEASUNIT_MASS_POUND } },
1008 { "fr_FR", "mass", "person", 1, { UAMEASUNIT_MASS_KILOGRAM } },
1009 { "fr_FR@rg=USZZZZ", "mass", "person", 1, { UAMEASUNIT_MASS_POUND } },
1010 { "fr_FR@ms=uksystem;rg=USZZZZ", "mass", "person", 2, { UAMEASUNIT_MASS_STONE, UAMEASUNIT_MASS_POUND } },
1011 // terminator
1012 { NULL, NULL, NULL, 0, { (UAMeasureUnit)0 } }
2ca993e8
A
1013};
1014
1015static void TestUAGetUnitsForUsage()
1016{
1017 const UnitsForUsageItem* itemPtr = unitsForUsageItems;
1018 for (; itemPtr->locale != NULL; itemPtr++) {
1019 UAMeasureUnit units[kMeasureUnitMax];
1020 UErrorCode status = U_ZERO_ERROR;
1021 int32_t unitsCount = uameasfmt_getUnitsForUsage(itemPtr->locale, itemPtr->category, itemPtr->usage,
1022 units, kMeasureUnitMax, &status);
1023 if ( U_FAILURE(status) ) {
1024 if (itemPtr->unitCount != 0) {
1025 log_err("FAIL: uameasfmt_getUnitsForUsage locale %s, category %s-%s, status %s\n",
1026 itemPtr->locale, itemPtr->category, itemPtr->usage, u_errorName(status));
1027 }
1028 } else if (itemPtr->unitCount == 0) {
1029 log_err("FAIL: uameasfmt_getUnitsForUsage locale %s, category %s-%s, expected failure, got status %s\n",
1030 itemPtr->locale, itemPtr->category, itemPtr->usage, u_errorName(status));
1031 } else if (unitsCount != itemPtr->unitCount) {
1032 log_err("FAIL: uameasfmt_getUnitsForUsage locale %s, category %s-%s, expected count %d, got %d\n",
1033 itemPtr->locale, itemPtr->category, itemPtr->usage, itemPtr->unitCount, unitsCount);
1034 } else if (units[0] != itemPtr->units[0] || (unitsCount == 2 && units[1] != itemPtr->units[1])) {
1035 log_err("FAIL: uameasfmt_getUnitsForUsage locale %s, category %s-%s, expected units x%04X ..., got x%04X ...\n",
1036 itemPtr->locale, itemPtr->category, itemPtr->usage, itemPtr->units[0], units[0]);
1037 }
1038 }
1039}
1040
1041typedef struct {
1042 UAMeasureUnit unit;
1043 const char* category;
1044} CategoryForUnit;
1045
1046static const CategoryForUnit categoryForUnitItems[] = {
1047 { UAMEASUNIT_VOLUME_LITER, "volume" },
1048 { UAMEASUNIT_LENGTH_METER, "length" },
1049 { UAMEASUNIT_PRESSURE_HECTOPASCAL, "pressure" },
1050 { UAMEASUNIT_CONCENTRATION_MILLIMOLE_PER_LITER, "concentr" },
1051 { (UAMeasureUnit)0, NULL }
1052};
1053
1054static void TestUAGetCategoryForUnit()
1055{
1056 const CategoryForUnit* itemPtr = categoryForUnitItems;
1057 for (; itemPtr->category != NULL; itemPtr++) {
1058 UErrorCode status = U_ZERO_ERROR;
1059 const char *category = uameasfmt_getUnitCategory(itemPtr->unit, &status);
1060 if ( U_FAILURE(status) ) {
1061 log_err("FAIL: uameasfmt_getUnitCategory unit %d:%d, got status %s\n",
1062 ((int)itemPtr->unit) >> 8, ((int)itemPtr->unit) & 0xFF, u_errorName(status));
1063 } else if (category == NULL) {
1064 log_err("FAIL: uameasfmt_getUnitCategory unit %d:%d, got NULL return\n",
1065 ((int)itemPtr->unit) >> 8, ((int)itemPtr->unit) & 0xFF);
1066 } else if (uprv_strcmp(category, itemPtr->category) != 0) {
1067 log_err("FAIL: uameasfmt_getUnitCategory unit %d:%d, expected %s, got %s\n",
1068 ((int)itemPtr->unit) >> 8, ((int)itemPtr->unit) & 0xFF, itemPtr->category, category);
1069 }
1070 }
1071}
1072
1073#endif /* #if !UCONFIG_NO_FORMATTING */