1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /*
4 *******************************************************************************
5 * Copyright (C) 2014-2016, International Business Machines Corporation and *
6 * others. All Rights Reserved. *
7 *******************************************************************************
8 *
9 * File MEASFMTTEST.CPP
10 *
11 *******************************************************************************
12 */
13 #include <stdio.h>
14 #include <stdlib.h>
15
16 #include "intltest.h"
17
18 #if !UCONFIG_NO_FORMATTING
19
20 #include "unicode/decimfmt.h"
21 #include "unicode/measfmt.h"
22 #include "unicode/measure.h"
23 #include "unicode/measunit.h"
24 #include "unicode/strenum.h"
25 #include "unicode/tmunit.h"
26 #include "unicode/plurrule.h"
27 #include "unicode/ustring.h"
28 #include "charstr.h"
29 #include "cstr.h"
30 #include "unicode/reldatefmt.h"
31 #include "unicode/rbnf.h"
32
33 struct ExpectedResult {
34 const Measure *measures;
35 int32_t count;
36 const char *expected;
37 };
38
39 class MeasureFormatTest : public IntlTest {
40 public:
MeasureFormatTest()41 MeasureFormatTest() {
42 }
43
44 void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
45 private:
46 void TestBasic();
47 void TestCompatible53();
48 void TestCompatible54();
49 void TestCompatible55();
50 void TestCompatible56();
51 void TestCompatible57();
52 void TestCompatible58();
53 void TestCompatible59();
54 void TestCompatible63();
55 void TestCompatible64();
56 void TestCompatible65();
57 void TestGetAvailable();
58 void TestExamplesInDocs();
59 void TestFormatPeriodEn();
60 void Test10219FractionalPlurals();
61 void TestGreek();
62 void TestFormatSingleArg();
63 void TestFormatMeasuresZeroArg();
64 void TestSimplePer();
65 void TestNumeratorPlurals();
66 void TestMultiples();
67 void TestManyLocaleDurations();
68 void TestGram();
69 void TestCurrencies();
70 void TestDisplayNames();
71 void TestFieldPosition();
72 void TestFieldPositionMultiple();
73 void TestBadArg();
74 void TestEquality();
75 void TestGroupingSeparator();
76 void TestDoubleZero();
77 void TestUnitPerUnitResolution();
78 void TestIndividualPluralFallback();
79 void Test20332_PersonUnits();
80 void TestNumericTime();
81 void TestNumericTimeSomeSpecialFormats();
82 void TestIdentifiers();
83 void TestInvalidIdentifiers();
84 void TestCompoundUnitOperations();
85 void TestDimensionlessBehaviour();
86 void Test21060_AddressSanitizerProblem();
87
88 void verifyFormat(
89 const char *description,
90 const MeasureFormat &fmt,
91 const Measure *measures,
92 int32_t measureCount,
93 const char *expected);
94 void verifyFormatWithPrefix(
95 const char *description,
96 const MeasureFormat &fmt,
97 const UnicodeString &prefix,
98 const Measure *measures,
99 int32_t measureCount,
100 const char *expected);
101 void verifyFormat(
102 const char *description,
103 const MeasureFormat &fmt,
104 const ExpectedResult *expectedResults,
105 int32_t count);
106 void helperTestSimplePer(
107 const Locale &locale,
108 UMeasureFormatWidth width,
109 double value,
110 const MeasureUnit &unit,
111 const MeasureUnit &perUnit,
112 const char *expected);
113 void helperTestSimplePer(
114 const Locale &locale,
115 UMeasureFormatWidth width,
116 double value,
117 const MeasureUnit &unit,
118 const MeasureUnit &perUnit,
119 const char *expected,
120 int32_t field,
121 int32_t expected_start,
122 int32_t expected_end);
123 void helperTestMultiples(
124 const Locale &locale,
125 UMeasureFormatWidth width,
126 const char *expected);
127 void helperTestManyLocaleDurations(
128 const char *localeID,
129 UMeasureFormatWidth width,
130 const Measure *measures,
131 int32_t measureCount,
132 const char *expected);
133 void helperTestDisplayName(
134 const MeasureUnit *unit,
135 const char *localeID,
136 UMeasureFormatWidth width,
137 const char *expected);
138 void verifyFieldPosition(
139 const char *description,
140 const MeasureFormat &fmt,
141 const UnicodeString &prefix,
142 const Measure *measures,
143 int32_t measureCount,
144 NumberFormat::EAlignmentFields field,
145 int32_t start,
146 int32_t end);
147 void verifySingleUnit(
148 const MeasureUnit& unit,
149 UMeasureSIPrefix siPrefix,
150 int8_t power,
151 const char* identifier);
152 void verifyCompoundUnit(
153 const MeasureUnit& unit,
154 const char* identifier,
155 const char** subIdentifiers,
156 int32_t subIdentifierCount);
157 void verifyMixedUnit(
158 const MeasureUnit& unit,
159 const char* identifier,
160 const char** subIdentifiers,
161 int32_t subIdentifierCount);
162 };
163
runIndexedTest(int32_t index,UBool exec,const char * & name,char *)164 void MeasureFormatTest::runIndexedTest(
165 int32_t index, UBool exec, const char *&name, char *) {
166 if (exec) {
167 logln("TestSuite MeasureFormatTest: ");
168 }
169 TESTCASE_AUTO_BEGIN;
170 TESTCASE_AUTO(TestBasic);
171 TESTCASE_AUTO(TestCompatible53);
172 TESTCASE_AUTO(TestCompatible54);
173 TESTCASE_AUTO(TestCompatible55);
174 TESTCASE_AUTO(TestCompatible56);
175 TESTCASE_AUTO(TestCompatible57);
176 TESTCASE_AUTO(TestCompatible58);
177 TESTCASE_AUTO(TestCompatible59);
178 TESTCASE_AUTO(TestCompatible63);
179 TESTCASE_AUTO(TestCompatible64);
180 TESTCASE_AUTO(TestCompatible65);
181 TESTCASE_AUTO(TestGetAvailable);
182 TESTCASE_AUTO(TestExamplesInDocs);
183 TESTCASE_AUTO(TestFormatPeriodEn);
184 TESTCASE_AUTO(Test10219FractionalPlurals);
185 TESTCASE_AUTO(TestGreek);
186 TESTCASE_AUTO(TestFormatSingleArg);
187 TESTCASE_AUTO(TestFormatMeasuresZeroArg);
188 TESTCASE_AUTO(TestSimplePer);
189 TESTCASE_AUTO(TestNumeratorPlurals);
190 TESTCASE_AUTO(TestMultiples);
191 TESTCASE_AUTO(TestManyLocaleDurations);
192 TESTCASE_AUTO(TestGram);
193 TESTCASE_AUTO(TestCurrencies);
194 TESTCASE_AUTO(TestDisplayNames);
195 TESTCASE_AUTO(TestFieldPosition);
196 TESTCASE_AUTO(TestFieldPositionMultiple);
197 TESTCASE_AUTO(TestBadArg);
198 TESTCASE_AUTO(TestEquality);
199 TESTCASE_AUTO(TestGroupingSeparator);
200 TESTCASE_AUTO(TestDoubleZero);
201 TESTCASE_AUTO(TestUnitPerUnitResolution);
202 TESTCASE_AUTO(TestIndividualPluralFallback);
203 TESTCASE_AUTO(Test20332_PersonUnits);
204 TESTCASE_AUTO(TestNumericTime);
205 TESTCASE_AUTO(TestNumericTimeSomeSpecialFormats);
206 TESTCASE_AUTO(TestIdentifiers);
207 TESTCASE_AUTO(TestInvalidIdentifiers);
208 TESTCASE_AUTO(TestCompoundUnitOperations);
209 TESTCASE_AUTO(TestDimensionlessBehaviour);
210 TESTCASE_AUTO(Test21060_AddressSanitizerProblem);
211 TESTCASE_AUTO_END;
212 }
213
TestCompatible53()214 void MeasureFormatTest::TestCompatible53() {
215 UErrorCode status = U_ZERO_ERROR;
216 LocalPointer<MeasureUnit> measureUnit;
217 measureUnit.adoptInstead(MeasureUnit::createGForce(status));
218 measureUnit.adoptInstead(MeasureUnit::createArcMinute(status));
219 measureUnit.adoptInstead(MeasureUnit::createArcSecond(status));
220 measureUnit.adoptInstead(MeasureUnit::createDegree(status));
221 measureUnit.adoptInstead(MeasureUnit::createAcre(status));
222 measureUnit.adoptInstead(MeasureUnit::createHectare(status));
223 measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status));
224 measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status));
225 measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status));
226 measureUnit.adoptInstead(MeasureUnit::createSquareMile(status));
227 measureUnit.adoptInstead(MeasureUnit::createDay(status));
228 measureUnit.adoptInstead(MeasureUnit::createHour(status));
229 measureUnit.adoptInstead(MeasureUnit::createMillisecond(status));
230 measureUnit.adoptInstead(MeasureUnit::createMinute(status));
231 measureUnit.adoptInstead(MeasureUnit::createMonth(status));
232 measureUnit.adoptInstead(MeasureUnit::createSecond(status));
233 measureUnit.adoptInstead(MeasureUnit::createWeek(status));
234 measureUnit.adoptInstead(MeasureUnit::createYear(status));
235 measureUnit.adoptInstead(MeasureUnit::createCentimeter(status));
236 measureUnit.adoptInstead(MeasureUnit::createFoot(status));
237 measureUnit.adoptInstead(MeasureUnit::createInch(status));
238 measureUnit.adoptInstead(MeasureUnit::createKilometer(status));
239 measureUnit.adoptInstead(MeasureUnit::createLightYear(status));
240 measureUnit.adoptInstead(MeasureUnit::createMeter(status));
241 measureUnit.adoptInstead(MeasureUnit::createMile(status));
242 measureUnit.adoptInstead(MeasureUnit::createMillimeter(status));
243 measureUnit.adoptInstead(MeasureUnit::createPicometer(status));
244 measureUnit.adoptInstead(MeasureUnit::createYard(status));
245 measureUnit.adoptInstead(MeasureUnit::createGram(status));
246 measureUnit.adoptInstead(MeasureUnit::createKilogram(status));
247 measureUnit.adoptInstead(MeasureUnit::createOunce(status));
248 measureUnit.adoptInstead(MeasureUnit::createPound(status));
249 measureUnit.adoptInstead(MeasureUnit::createHorsepower(status));
250 measureUnit.adoptInstead(MeasureUnit::createKilowatt(status));
251 measureUnit.adoptInstead(MeasureUnit::createWatt(status));
252 measureUnit.adoptInstead(MeasureUnit::createHectopascal(status));
253 measureUnit.adoptInstead(MeasureUnit::createInchHg(status));
254 measureUnit.adoptInstead(MeasureUnit::createMillibar(status));
255 measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status));
256 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status));
257 measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status));
258 measureUnit.adoptInstead(MeasureUnit::createCelsius(status));
259 measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status));
260 measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status));
261 measureUnit.adoptInstead(MeasureUnit::createCubicMile(status));
262 measureUnit.adoptInstead(MeasureUnit::createLiter(status));
263 assertSuccess("", status);
264 }
265
TestCompatible54()266 void MeasureFormatTest::TestCompatible54() {
267 UErrorCode status = U_ZERO_ERROR;
268 LocalPointer<MeasureUnit> measureUnit;
269 measureUnit.adoptInstead(MeasureUnit::createGForce(status));
270 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecondSquared(status));
271 measureUnit.adoptInstead(MeasureUnit::createArcMinute(status));
272 measureUnit.adoptInstead(MeasureUnit::createArcSecond(status));
273 measureUnit.adoptInstead(MeasureUnit::createDegree(status));
274 measureUnit.adoptInstead(MeasureUnit::createRadian(status));
275 measureUnit.adoptInstead(MeasureUnit::createAcre(status));
276 measureUnit.adoptInstead(MeasureUnit::createHectare(status));
277 measureUnit.adoptInstead(MeasureUnit::createSquareCentimeter(status));
278 measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status));
279 measureUnit.adoptInstead(MeasureUnit::createSquareInch(status));
280 measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status));
281 measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status));
282 measureUnit.adoptInstead(MeasureUnit::createSquareMile(status));
283 measureUnit.adoptInstead(MeasureUnit::createSquareYard(status));
284 measureUnit.adoptInstead(MeasureUnit::createLiterPerKilometer(status));
285 measureUnit.adoptInstead(MeasureUnit::createMilePerGallon(status));
286 measureUnit.adoptInstead(MeasureUnit::createBit(status));
287 measureUnit.adoptInstead(MeasureUnit::createByte(status));
288 measureUnit.adoptInstead(MeasureUnit::createGigabit(status));
289 measureUnit.adoptInstead(MeasureUnit::createGigabyte(status));
290 measureUnit.adoptInstead(MeasureUnit::createKilobit(status));
291 measureUnit.adoptInstead(MeasureUnit::createKilobyte(status));
292 measureUnit.adoptInstead(MeasureUnit::createMegabit(status));
293 measureUnit.adoptInstead(MeasureUnit::createMegabyte(status));
294 measureUnit.adoptInstead(MeasureUnit::createTerabit(status));
295 measureUnit.adoptInstead(MeasureUnit::createTerabyte(status));
296 measureUnit.adoptInstead(MeasureUnit::createDay(status));
297 measureUnit.adoptInstead(MeasureUnit::createHour(status));
298 measureUnit.adoptInstead(MeasureUnit::createMicrosecond(status));
299 measureUnit.adoptInstead(MeasureUnit::createMillisecond(status));
300 measureUnit.adoptInstead(MeasureUnit::createMinute(status));
301 measureUnit.adoptInstead(MeasureUnit::createMonth(status));
302 measureUnit.adoptInstead(MeasureUnit::createNanosecond(status));
303 measureUnit.adoptInstead(MeasureUnit::createSecond(status));
304 measureUnit.adoptInstead(MeasureUnit::createWeek(status));
305 measureUnit.adoptInstead(MeasureUnit::createYear(status));
306 measureUnit.adoptInstead(MeasureUnit::createAmpere(status));
307 measureUnit.adoptInstead(MeasureUnit::createMilliampere(status));
308 measureUnit.adoptInstead(MeasureUnit::createOhm(status));
309 measureUnit.adoptInstead(MeasureUnit::createVolt(status));
310 measureUnit.adoptInstead(MeasureUnit::createCalorie(status));
311 measureUnit.adoptInstead(MeasureUnit::createFoodcalorie(status));
312 measureUnit.adoptInstead(MeasureUnit::createJoule(status));
313 measureUnit.adoptInstead(MeasureUnit::createKilocalorie(status));
314 measureUnit.adoptInstead(MeasureUnit::createKilojoule(status));
315 measureUnit.adoptInstead(MeasureUnit::createKilowattHour(status));
316 measureUnit.adoptInstead(MeasureUnit::createGigahertz(status));
317 measureUnit.adoptInstead(MeasureUnit::createHertz(status));
318 measureUnit.adoptInstead(MeasureUnit::createKilohertz(status));
319 measureUnit.adoptInstead(MeasureUnit::createMegahertz(status));
320 measureUnit.adoptInstead(MeasureUnit::createAstronomicalUnit(status));
321 measureUnit.adoptInstead(MeasureUnit::createCentimeter(status));
322 measureUnit.adoptInstead(MeasureUnit::createDecimeter(status));
323 measureUnit.adoptInstead(MeasureUnit::createFathom(status));
324 measureUnit.adoptInstead(MeasureUnit::createFoot(status));
325 measureUnit.adoptInstead(MeasureUnit::createFurlong(status));
326 measureUnit.adoptInstead(MeasureUnit::createInch(status));
327 measureUnit.adoptInstead(MeasureUnit::createKilometer(status));
328 measureUnit.adoptInstead(MeasureUnit::createLightYear(status));
329 measureUnit.adoptInstead(MeasureUnit::createMeter(status));
330 measureUnit.adoptInstead(MeasureUnit::createMicrometer(status));
331 measureUnit.adoptInstead(MeasureUnit::createMile(status));
332 measureUnit.adoptInstead(MeasureUnit::createMillimeter(status));
333 measureUnit.adoptInstead(MeasureUnit::createNanometer(status));
334 measureUnit.adoptInstead(MeasureUnit::createNauticalMile(status));
335 measureUnit.adoptInstead(MeasureUnit::createParsec(status));
336 measureUnit.adoptInstead(MeasureUnit::createPicometer(status));
337 measureUnit.adoptInstead(MeasureUnit::createYard(status));
338 measureUnit.adoptInstead(MeasureUnit::createLux(status));
339 measureUnit.adoptInstead(MeasureUnit::createCarat(status));
340 measureUnit.adoptInstead(MeasureUnit::createGram(status));
341 measureUnit.adoptInstead(MeasureUnit::createKilogram(status));
342 measureUnit.adoptInstead(MeasureUnit::createMetricTon(status));
343 measureUnit.adoptInstead(MeasureUnit::createMicrogram(status));
344 measureUnit.adoptInstead(MeasureUnit::createMilligram(status));
345 measureUnit.adoptInstead(MeasureUnit::createOunce(status));
346 measureUnit.adoptInstead(MeasureUnit::createOunceTroy(status));
347 measureUnit.adoptInstead(MeasureUnit::createPound(status));
348 measureUnit.adoptInstead(MeasureUnit::createStone(status));
349 measureUnit.adoptInstead(MeasureUnit::createTon(status));
350 measureUnit.adoptInstead(MeasureUnit::createGigawatt(status));
351 measureUnit.adoptInstead(MeasureUnit::createHorsepower(status));
352 measureUnit.adoptInstead(MeasureUnit::createKilowatt(status));
353 measureUnit.adoptInstead(MeasureUnit::createMegawatt(status));
354 measureUnit.adoptInstead(MeasureUnit::createMilliwatt(status));
355 measureUnit.adoptInstead(MeasureUnit::createWatt(status));
356 measureUnit.adoptInstead(MeasureUnit::createHectopascal(status));
357 measureUnit.adoptInstead(MeasureUnit::createInchHg(status));
358 measureUnit.adoptInstead(MeasureUnit::createMillibar(status));
359 measureUnit.adoptInstead(MeasureUnit::createMillimeterOfMercury(status));
360 measureUnit.adoptInstead(MeasureUnit::createPoundPerSquareInch(status));
361 measureUnit.adoptInstead(MeasureUnit::createKarat(status));
362 measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status));
363 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status));
364 measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status));
365 measureUnit.adoptInstead(MeasureUnit::createCelsius(status));
366 measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status));
367 measureUnit.adoptInstead(MeasureUnit::createKelvin(status));
368 measureUnit.adoptInstead(MeasureUnit::createAcreFoot(status));
369 measureUnit.adoptInstead(MeasureUnit::createBushel(status));
370 measureUnit.adoptInstead(MeasureUnit::createCentiliter(status));
371 measureUnit.adoptInstead(MeasureUnit::createCubicCentimeter(status));
372 measureUnit.adoptInstead(MeasureUnit::createCubicFoot(status));
373 measureUnit.adoptInstead(MeasureUnit::createCubicInch(status));
374 measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status));
375 measureUnit.adoptInstead(MeasureUnit::createCubicMeter(status));
376 measureUnit.adoptInstead(MeasureUnit::createCubicMile(status));
377 measureUnit.adoptInstead(MeasureUnit::createCubicYard(status));
378 measureUnit.adoptInstead(MeasureUnit::createCup(status));
379 measureUnit.adoptInstead(MeasureUnit::createDeciliter(status));
380 measureUnit.adoptInstead(MeasureUnit::createFluidOunce(status));
381 measureUnit.adoptInstead(MeasureUnit::createGallon(status));
382 measureUnit.adoptInstead(MeasureUnit::createHectoliter(status));
383 measureUnit.adoptInstead(MeasureUnit::createLiter(status));
384 measureUnit.adoptInstead(MeasureUnit::createMegaliter(status));
385 measureUnit.adoptInstead(MeasureUnit::createMilliliter(status));
386 measureUnit.adoptInstead(MeasureUnit::createPint(status));
387 measureUnit.adoptInstead(MeasureUnit::createQuart(status));
388 measureUnit.adoptInstead(MeasureUnit::createTablespoon(status));
389 measureUnit.adoptInstead(MeasureUnit::createTeaspoon(status));
390 assertSuccess("", status);
391 }
392
TestCompatible55()393 void MeasureFormatTest::TestCompatible55() {
394 UErrorCode status = U_ZERO_ERROR;
395 LocalPointer<MeasureUnit> measureUnit;
396 measureUnit.adoptInstead(MeasureUnit::createGForce(status));
397 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecondSquared(status));
398 measureUnit.adoptInstead(MeasureUnit::createArcMinute(status));
399 measureUnit.adoptInstead(MeasureUnit::createArcSecond(status));
400 measureUnit.adoptInstead(MeasureUnit::createDegree(status));
401 measureUnit.adoptInstead(MeasureUnit::createRadian(status));
402 measureUnit.adoptInstead(MeasureUnit::createAcre(status));
403 measureUnit.adoptInstead(MeasureUnit::createHectare(status));
404 measureUnit.adoptInstead(MeasureUnit::createSquareCentimeter(status));
405 measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status));
406 measureUnit.adoptInstead(MeasureUnit::createSquareInch(status));
407 measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status));
408 measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status));
409 measureUnit.adoptInstead(MeasureUnit::createSquareMile(status));
410 measureUnit.adoptInstead(MeasureUnit::createSquareYard(status));
411 measureUnit.adoptInstead(MeasureUnit::createLiterPerKilometer(status));
412 measureUnit.adoptInstead(MeasureUnit::createMilePerGallon(status));
413 measureUnit.adoptInstead(MeasureUnit::createBit(status));
414 measureUnit.adoptInstead(MeasureUnit::createByte(status));
415 measureUnit.adoptInstead(MeasureUnit::createGigabit(status));
416 measureUnit.adoptInstead(MeasureUnit::createGigabyte(status));
417 measureUnit.adoptInstead(MeasureUnit::createKilobit(status));
418 measureUnit.adoptInstead(MeasureUnit::createKilobyte(status));
419 measureUnit.adoptInstead(MeasureUnit::createMegabit(status));
420 measureUnit.adoptInstead(MeasureUnit::createMegabyte(status));
421 measureUnit.adoptInstead(MeasureUnit::createTerabit(status));
422 measureUnit.adoptInstead(MeasureUnit::createTerabyte(status));
423 measureUnit.adoptInstead(MeasureUnit::createDay(status));
424 measureUnit.adoptInstead(MeasureUnit::createHour(status));
425 measureUnit.adoptInstead(MeasureUnit::createMicrosecond(status));
426 measureUnit.adoptInstead(MeasureUnit::createMillisecond(status));
427 measureUnit.adoptInstead(MeasureUnit::createMinute(status));
428 measureUnit.adoptInstead(MeasureUnit::createMonth(status));
429 measureUnit.adoptInstead(MeasureUnit::createNanosecond(status));
430 measureUnit.adoptInstead(MeasureUnit::createSecond(status));
431 measureUnit.adoptInstead(MeasureUnit::createWeek(status));
432 measureUnit.adoptInstead(MeasureUnit::createYear(status));
433 measureUnit.adoptInstead(MeasureUnit::createAmpere(status));
434 measureUnit.adoptInstead(MeasureUnit::createMilliampere(status));
435 measureUnit.adoptInstead(MeasureUnit::createOhm(status));
436 measureUnit.adoptInstead(MeasureUnit::createVolt(status));
437 measureUnit.adoptInstead(MeasureUnit::createCalorie(status));
438 measureUnit.adoptInstead(MeasureUnit::createFoodcalorie(status));
439 measureUnit.adoptInstead(MeasureUnit::createJoule(status));
440 measureUnit.adoptInstead(MeasureUnit::createKilocalorie(status));
441 measureUnit.adoptInstead(MeasureUnit::createKilojoule(status));
442 measureUnit.adoptInstead(MeasureUnit::createKilowattHour(status));
443 measureUnit.adoptInstead(MeasureUnit::createGigahertz(status));
444 measureUnit.adoptInstead(MeasureUnit::createHertz(status));
445 measureUnit.adoptInstead(MeasureUnit::createKilohertz(status));
446 measureUnit.adoptInstead(MeasureUnit::createMegahertz(status));
447 measureUnit.adoptInstead(MeasureUnit::createAstronomicalUnit(status));
448 measureUnit.adoptInstead(MeasureUnit::createCentimeter(status));
449 measureUnit.adoptInstead(MeasureUnit::createDecimeter(status));
450 measureUnit.adoptInstead(MeasureUnit::createFathom(status));
451 measureUnit.adoptInstead(MeasureUnit::createFoot(status));
452 measureUnit.adoptInstead(MeasureUnit::createFurlong(status));
453 measureUnit.adoptInstead(MeasureUnit::createInch(status));
454 measureUnit.adoptInstead(MeasureUnit::createKilometer(status));
455 measureUnit.adoptInstead(MeasureUnit::createLightYear(status));
456 measureUnit.adoptInstead(MeasureUnit::createMeter(status));
457 measureUnit.adoptInstead(MeasureUnit::createMicrometer(status));
458 measureUnit.adoptInstead(MeasureUnit::createMile(status));
459 measureUnit.adoptInstead(MeasureUnit::createMillimeter(status));
460 measureUnit.adoptInstead(MeasureUnit::createNanometer(status));
461 measureUnit.adoptInstead(MeasureUnit::createNauticalMile(status));
462 measureUnit.adoptInstead(MeasureUnit::createParsec(status));
463 measureUnit.adoptInstead(MeasureUnit::createPicometer(status));
464 measureUnit.adoptInstead(MeasureUnit::createYard(status));
465 measureUnit.adoptInstead(MeasureUnit::createLux(status));
466 measureUnit.adoptInstead(MeasureUnit::createCarat(status));
467 measureUnit.adoptInstead(MeasureUnit::createGram(status));
468 measureUnit.adoptInstead(MeasureUnit::createKilogram(status));
469 measureUnit.adoptInstead(MeasureUnit::createMetricTon(status));
470 measureUnit.adoptInstead(MeasureUnit::createMicrogram(status));
471 measureUnit.adoptInstead(MeasureUnit::createMilligram(status));
472 measureUnit.adoptInstead(MeasureUnit::createOunce(status));
473 measureUnit.adoptInstead(MeasureUnit::createOunceTroy(status));
474 measureUnit.adoptInstead(MeasureUnit::createPound(status));
475 measureUnit.adoptInstead(MeasureUnit::createStone(status));
476 measureUnit.adoptInstead(MeasureUnit::createTon(status));
477 measureUnit.adoptInstead(MeasureUnit::createGigawatt(status));
478 measureUnit.adoptInstead(MeasureUnit::createHorsepower(status));
479 measureUnit.adoptInstead(MeasureUnit::createKilowatt(status));
480 measureUnit.adoptInstead(MeasureUnit::createMegawatt(status));
481 measureUnit.adoptInstead(MeasureUnit::createMilliwatt(status));
482 measureUnit.adoptInstead(MeasureUnit::createWatt(status));
483 measureUnit.adoptInstead(MeasureUnit::createHectopascal(status));
484 measureUnit.adoptInstead(MeasureUnit::createInchHg(status));
485 measureUnit.adoptInstead(MeasureUnit::createMillibar(status));
486 measureUnit.adoptInstead(MeasureUnit::createMillimeterOfMercury(status));
487 measureUnit.adoptInstead(MeasureUnit::createPoundPerSquareInch(status));
488 measureUnit.adoptInstead(MeasureUnit::createKarat(status));
489 measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status));
490 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status));
491 measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status));
492 measureUnit.adoptInstead(MeasureUnit::createCelsius(status));
493 measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status));
494 measureUnit.adoptInstead(MeasureUnit::createGenericTemperature(status));
495 measureUnit.adoptInstead(MeasureUnit::createKelvin(status));
496 measureUnit.adoptInstead(MeasureUnit::createAcreFoot(status));
497 measureUnit.adoptInstead(MeasureUnit::createBushel(status));
498 measureUnit.adoptInstead(MeasureUnit::createCentiliter(status));
499 measureUnit.adoptInstead(MeasureUnit::createCubicCentimeter(status));
500 measureUnit.adoptInstead(MeasureUnit::createCubicFoot(status));
501 measureUnit.adoptInstead(MeasureUnit::createCubicInch(status));
502 measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status));
503 measureUnit.adoptInstead(MeasureUnit::createCubicMeter(status));
504 measureUnit.adoptInstead(MeasureUnit::createCubicMile(status));
505 measureUnit.adoptInstead(MeasureUnit::createCubicYard(status));
506 measureUnit.adoptInstead(MeasureUnit::createCup(status));
507 measureUnit.adoptInstead(MeasureUnit::createDeciliter(status));
508 measureUnit.adoptInstead(MeasureUnit::createFluidOunce(status));
509 measureUnit.adoptInstead(MeasureUnit::createGallon(status));
510 measureUnit.adoptInstead(MeasureUnit::createHectoliter(status));
511 measureUnit.adoptInstead(MeasureUnit::createLiter(status));
512 measureUnit.adoptInstead(MeasureUnit::createMegaliter(status));
513 measureUnit.adoptInstead(MeasureUnit::createMilliliter(status));
514 measureUnit.adoptInstead(MeasureUnit::createPint(status));
515 measureUnit.adoptInstead(MeasureUnit::createQuart(status));
516 measureUnit.adoptInstead(MeasureUnit::createTablespoon(status));
517 measureUnit.adoptInstead(MeasureUnit::createTeaspoon(status));
518 assertSuccess("", status);
519 }
520
TestCompatible56()521 void MeasureFormatTest::TestCompatible56() {
522 UErrorCode status = U_ZERO_ERROR;
523 LocalPointer<MeasureUnit> measureUnit;
524 measureUnit.adoptInstead(MeasureUnit::createGForce(status));
525 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecondSquared(status));
526 measureUnit.adoptInstead(MeasureUnit::createArcMinute(status));
527 measureUnit.adoptInstead(MeasureUnit::createArcSecond(status));
528 measureUnit.adoptInstead(MeasureUnit::createDegree(status));
529 measureUnit.adoptInstead(MeasureUnit::createRadian(status));
530 measureUnit.adoptInstead(MeasureUnit::createRevolutionAngle(status));
531 measureUnit.adoptInstead(MeasureUnit::createAcre(status));
532 measureUnit.adoptInstead(MeasureUnit::createHectare(status));
533 measureUnit.adoptInstead(MeasureUnit::createSquareCentimeter(status));
534 measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status));
535 measureUnit.adoptInstead(MeasureUnit::createSquareInch(status));
536 measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status));
537 measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status));
538 measureUnit.adoptInstead(MeasureUnit::createSquareMile(status));
539 measureUnit.adoptInstead(MeasureUnit::createSquareYard(status));
540 measureUnit.adoptInstead(MeasureUnit::createLiterPer100Kilometers(status));
541 measureUnit.adoptInstead(MeasureUnit::createLiterPerKilometer(status));
542 measureUnit.adoptInstead(MeasureUnit::createMilePerGallon(status));
543 measureUnit.adoptInstead(MeasureUnit::createBit(status));
544 measureUnit.adoptInstead(MeasureUnit::createByte(status));
545 measureUnit.adoptInstead(MeasureUnit::createGigabit(status));
546 measureUnit.adoptInstead(MeasureUnit::createGigabyte(status));
547 measureUnit.adoptInstead(MeasureUnit::createKilobit(status));
548 measureUnit.adoptInstead(MeasureUnit::createKilobyte(status));
549 measureUnit.adoptInstead(MeasureUnit::createMegabit(status));
550 measureUnit.adoptInstead(MeasureUnit::createMegabyte(status));
551 measureUnit.adoptInstead(MeasureUnit::createTerabit(status));
552 measureUnit.adoptInstead(MeasureUnit::createTerabyte(status));
553 measureUnit.adoptInstead(MeasureUnit::createCentury(status));
554 measureUnit.adoptInstead(MeasureUnit::createDay(status));
555 measureUnit.adoptInstead(MeasureUnit::createHour(status));
556 measureUnit.adoptInstead(MeasureUnit::createMicrosecond(status));
557 measureUnit.adoptInstead(MeasureUnit::createMillisecond(status));
558 measureUnit.adoptInstead(MeasureUnit::createMinute(status));
559 measureUnit.adoptInstead(MeasureUnit::createMonth(status));
560 measureUnit.adoptInstead(MeasureUnit::createNanosecond(status));
561 measureUnit.adoptInstead(MeasureUnit::createSecond(status));
562 measureUnit.adoptInstead(MeasureUnit::createWeek(status));
563 measureUnit.adoptInstead(MeasureUnit::createYear(status));
564 measureUnit.adoptInstead(MeasureUnit::createAmpere(status));
565 measureUnit.adoptInstead(MeasureUnit::createMilliampere(status));
566 measureUnit.adoptInstead(MeasureUnit::createOhm(status));
567 measureUnit.adoptInstead(MeasureUnit::createVolt(status));
568 measureUnit.adoptInstead(MeasureUnit::createCalorie(status));
569 measureUnit.adoptInstead(MeasureUnit::createFoodcalorie(status));
570 measureUnit.adoptInstead(MeasureUnit::createJoule(status));
571 measureUnit.adoptInstead(MeasureUnit::createKilocalorie(status));
572 measureUnit.adoptInstead(MeasureUnit::createKilojoule(status));
573 measureUnit.adoptInstead(MeasureUnit::createKilowattHour(status));
574 measureUnit.adoptInstead(MeasureUnit::createGigahertz(status));
575 measureUnit.adoptInstead(MeasureUnit::createHertz(status));
576 measureUnit.adoptInstead(MeasureUnit::createKilohertz(status));
577 measureUnit.adoptInstead(MeasureUnit::createMegahertz(status));
578 measureUnit.adoptInstead(MeasureUnit::createAstronomicalUnit(status));
579 measureUnit.adoptInstead(MeasureUnit::createCentimeter(status));
580 measureUnit.adoptInstead(MeasureUnit::createDecimeter(status));
581 measureUnit.adoptInstead(MeasureUnit::createFathom(status));
582 measureUnit.adoptInstead(MeasureUnit::createFoot(status));
583 measureUnit.adoptInstead(MeasureUnit::createFurlong(status));
584 measureUnit.adoptInstead(MeasureUnit::createInch(status));
585 measureUnit.adoptInstead(MeasureUnit::createKilometer(status));
586 measureUnit.adoptInstead(MeasureUnit::createLightYear(status));
587 measureUnit.adoptInstead(MeasureUnit::createMeter(status));
588 measureUnit.adoptInstead(MeasureUnit::createMicrometer(status));
589 measureUnit.adoptInstead(MeasureUnit::createMile(status));
590 measureUnit.adoptInstead(MeasureUnit::createMileScandinavian(status));
591 measureUnit.adoptInstead(MeasureUnit::createMillimeter(status));
592 measureUnit.adoptInstead(MeasureUnit::createNanometer(status));
593 measureUnit.adoptInstead(MeasureUnit::createNauticalMile(status));
594 measureUnit.adoptInstead(MeasureUnit::createParsec(status));
595 measureUnit.adoptInstead(MeasureUnit::createPicometer(status));
596 measureUnit.adoptInstead(MeasureUnit::createYard(status));
597 measureUnit.adoptInstead(MeasureUnit::createLux(status));
598 measureUnit.adoptInstead(MeasureUnit::createCarat(status));
599 measureUnit.adoptInstead(MeasureUnit::createGram(status));
600 measureUnit.adoptInstead(MeasureUnit::createKilogram(status));
601 measureUnit.adoptInstead(MeasureUnit::createMetricTon(status));
602 measureUnit.adoptInstead(MeasureUnit::createMicrogram(status));
603 measureUnit.adoptInstead(MeasureUnit::createMilligram(status));
604 measureUnit.adoptInstead(MeasureUnit::createOunce(status));
605 measureUnit.adoptInstead(MeasureUnit::createOunceTroy(status));
606 measureUnit.adoptInstead(MeasureUnit::createPound(status));
607 measureUnit.adoptInstead(MeasureUnit::createStone(status));
608 measureUnit.adoptInstead(MeasureUnit::createTon(status));
609 measureUnit.adoptInstead(MeasureUnit::createGigawatt(status));
610 measureUnit.adoptInstead(MeasureUnit::createHorsepower(status));
611 measureUnit.adoptInstead(MeasureUnit::createKilowatt(status));
612 measureUnit.adoptInstead(MeasureUnit::createMegawatt(status));
613 measureUnit.adoptInstead(MeasureUnit::createMilliwatt(status));
614 measureUnit.adoptInstead(MeasureUnit::createWatt(status));
615 measureUnit.adoptInstead(MeasureUnit::createHectopascal(status));
616 measureUnit.adoptInstead(MeasureUnit::createInchHg(status));
617 measureUnit.adoptInstead(MeasureUnit::createMillibar(status));
618 measureUnit.adoptInstead(MeasureUnit::createMillimeterOfMercury(status));
619 measureUnit.adoptInstead(MeasureUnit::createPoundPerSquareInch(status));
620 measureUnit.adoptInstead(MeasureUnit::createKarat(status));
621 measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status));
622 measureUnit.adoptInstead(MeasureUnit::createKnot(status));
623 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status));
624 measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status));
625 measureUnit.adoptInstead(MeasureUnit::createCelsius(status));
626 measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status));
627 measureUnit.adoptInstead(MeasureUnit::createGenericTemperature(status));
628 measureUnit.adoptInstead(MeasureUnit::createKelvin(status));
629 measureUnit.adoptInstead(MeasureUnit::createAcreFoot(status));
630 measureUnit.adoptInstead(MeasureUnit::createBushel(status));
631 measureUnit.adoptInstead(MeasureUnit::createCentiliter(status));
632 measureUnit.adoptInstead(MeasureUnit::createCubicCentimeter(status));
633 measureUnit.adoptInstead(MeasureUnit::createCubicFoot(status));
634 measureUnit.adoptInstead(MeasureUnit::createCubicInch(status));
635 measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status));
636 measureUnit.adoptInstead(MeasureUnit::createCubicMeter(status));
637 measureUnit.adoptInstead(MeasureUnit::createCubicMile(status));
638 measureUnit.adoptInstead(MeasureUnit::createCubicYard(status));
639 measureUnit.adoptInstead(MeasureUnit::createCup(status));
640 measureUnit.adoptInstead(MeasureUnit::createCupMetric(status));
641 measureUnit.adoptInstead(MeasureUnit::createDeciliter(status));
642 measureUnit.adoptInstead(MeasureUnit::createFluidOunce(status));
643 measureUnit.adoptInstead(MeasureUnit::createGallon(status));
644 measureUnit.adoptInstead(MeasureUnit::createHectoliter(status));
645 measureUnit.adoptInstead(MeasureUnit::createLiter(status));
646 measureUnit.adoptInstead(MeasureUnit::createMegaliter(status));
647 measureUnit.adoptInstead(MeasureUnit::createMilliliter(status));
648 measureUnit.adoptInstead(MeasureUnit::createPint(status));
649 measureUnit.adoptInstead(MeasureUnit::createPintMetric(status));
650 measureUnit.adoptInstead(MeasureUnit::createQuart(status));
651 measureUnit.adoptInstead(MeasureUnit::createTablespoon(status));
652 measureUnit.adoptInstead(MeasureUnit::createTeaspoon(status));
653 assertSuccess("", status);
654 }
655
TestCompatible57()656 void MeasureFormatTest::TestCompatible57() {
657 UErrorCode status = U_ZERO_ERROR;
658 LocalPointer<MeasureUnit> measureUnit;
659 measureUnit.adoptInstead(MeasureUnit::createGForce(status));
660 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecondSquared(status));
661 measureUnit.adoptInstead(MeasureUnit::createArcMinute(status));
662 measureUnit.adoptInstead(MeasureUnit::createArcSecond(status));
663 measureUnit.adoptInstead(MeasureUnit::createDegree(status));
664 measureUnit.adoptInstead(MeasureUnit::createRadian(status));
665 measureUnit.adoptInstead(MeasureUnit::createRevolutionAngle(status));
666 measureUnit.adoptInstead(MeasureUnit::createAcre(status));
667 measureUnit.adoptInstead(MeasureUnit::createHectare(status));
668 measureUnit.adoptInstead(MeasureUnit::createSquareCentimeter(status));
669 measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status));
670 measureUnit.adoptInstead(MeasureUnit::createSquareInch(status));
671 measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status));
672 measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status));
673 measureUnit.adoptInstead(MeasureUnit::createSquareMile(status));
674 measureUnit.adoptInstead(MeasureUnit::createSquareYard(status));
675 measureUnit.adoptInstead(MeasureUnit::createKarat(status));
676 measureUnit.adoptInstead(MeasureUnit::createMilligramPerDeciliter(status));
677 measureUnit.adoptInstead(MeasureUnit::createMillimolePerLiter(status));
678 measureUnit.adoptInstead(MeasureUnit::createPartPerMillion(status));
679 measureUnit.adoptInstead(MeasureUnit::createLiterPer100Kilometers(status));
680 measureUnit.adoptInstead(MeasureUnit::createLiterPerKilometer(status));
681 measureUnit.adoptInstead(MeasureUnit::createMilePerGallon(status));
682 measureUnit.adoptInstead(MeasureUnit::createMilePerGallonImperial(status));
683 measureUnit.adoptInstead(MeasureUnit::createBit(status));
684 measureUnit.adoptInstead(MeasureUnit::createByte(status));
685 measureUnit.adoptInstead(MeasureUnit::createGigabit(status));
686 measureUnit.adoptInstead(MeasureUnit::createGigabyte(status));
687 measureUnit.adoptInstead(MeasureUnit::createKilobit(status));
688 measureUnit.adoptInstead(MeasureUnit::createKilobyte(status));
689 measureUnit.adoptInstead(MeasureUnit::createMegabit(status));
690 measureUnit.adoptInstead(MeasureUnit::createMegabyte(status));
691 measureUnit.adoptInstead(MeasureUnit::createTerabit(status));
692 measureUnit.adoptInstead(MeasureUnit::createTerabyte(status));
693 measureUnit.adoptInstead(MeasureUnit::createCentury(status));
694 measureUnit.adoptInstead(MeasureUnit::createDay(status));
695 measureUnit.adoptInstead(MeasureUnit::createHour(status));
696 measureUnit.adoptInstead(MeasureUnit::createMicrosecond(status));
697 measureUnit.adoptInstead(MeasureUnit::createMillisecond(status));
698 measureUnit.adoptInstead(MeasureUnit::createMinute(status));
699 measureUnit.adoptInstead(MeasureUnit::createMonth(status));
700 measureUnit.adoptInstead(MeasureUnit::createNanosecond(status));
701 measureUnit.adoptInstead(MeasureUnit::createSecond(status));
702 measureUnit.adoptInstead(MeasureUnit::createWeek(status));
703 measureUnit.adoptInstead(MeasureUnit::createYear(status));
704 measureUnit.adoptInstead(MeasureUnit::createAmpere(status));
705 measureUnit.adoptInstead(MeasureUnit::createMilliampere(status));
706 measureUnit.adoptInstead(MeasureUnit::createOhm(status));
707 measureUnit.adoptInstead(MeasureUnit::createVolt(status));
708 measureUnit.adoptInstead(MeasureUnit::createCalorie(status));
709 measureUnit.adoptInstead(MeasureUnit::createFoodcalorie(status));
710 measureUnit.adoptInstead(MeasureUnit::createJoule(status));
711 measureUnit.adoptInstead(MeasureUnit::createKilocalorie(status));
712 measureUnit.adoptInstead(MeasureUnit::createKilojoule(status));
713 measureUnit.adoptInstead(MeasureUnit::createKilowattHour(status));
714 measureUnit.adoptInstead(MeasureUnit::createGigahertz(status));
715 measureUnit.adoptInstead(MeasureUnit::createHertz(status));
716 measureUnit.adoptInstead(MeasureUnit::createKilohertz(status));
717 measureUnit.adoptInstead(MeasureUnit::createMegahertz(status));
718 measureUnit.adoptInstead(MeasureUnit::createAstronomicalUnit(status));
719 measureUnit.adoptInstead(MeasureUnit::createCentimeter(status));
720 measureUnit.adoptInstead(MeasureUnit::createDecimeter(status));
721 measureUnit.adoptInstead(MeasureUnit::createFathom(status));
722 measureUnit.adoptInstead(MeasureUnit::createFoot(status));
723 measureUnit.adoptInstead(MeasureUnit::createFurlong(status));
724 measureUnit.adoptInstead(MeasureUnit::createInch(status));
725 measureUnit.adoptInstead(MeasureUnit::createKilometer(status));
726 measureUnit.adoptInstead(MeasureUnit::createLightYear(status));
727 measureUnit.adoptInstead(MeasureUnit::createMeter(status));
728 measureUnit.adoptInstead(MeasureUnit::createMicrometer(status));
729 measureUnit.adoptInstead(MeasureUnit::createMile(status));
730 measureUnit.adoptInstead(MeasureUnit::createMileScandinavian(status));
731 measureUnit.adoptInstead(MeasureUnit::createMillimeter(status));
732 measureUnit.adoptInstead(MeasureUnit::createNanometer(status));
733 measureUnit.adoptInstead(MeasureUnit::createNauticalMile(status));
734 measureUnit.adoptInstead(MeasureUnit::createParsec(status));
735 measureUnit.adoptInstead(MeasureUnit::createPicometer(status));
736 measureUnit.adoptInstead(MeasureUnit::createYard(status));
737 measureUnit.adoptInstead(MeasureUnit::createLux(status));
738 measureUnit.adoptInstead(MeasureUnit::createCarat(status));
739 measureUnit.adoptInstead(MeasureUnit::createGram(status));
740 measureUnit.adoptInstead(MeasureUnit::createKilogram(status));
741 measureUnit.adoptInstead(MeasureUnit::createMetricTon(status));
742 measureUnit.adoptInstead(MeasureUnit::createMicrogram(status));
743 measureUnit.adoptInstead(MeasureUnit::createMilligram(status));
744 measureUnit.adoptInstead(MeasureUnit::createOunce(status));
745 measureUnit.adoptInstead(MeasureUnit::createOunceTroy(status));
746 measureUnit.adoptInstead(MeasureUnit::createPound(status));
747 measureUnit.adoptInstead(MeasureUnit::createStone(status));
748 measureUnit.adoptInstead(MeasureUnit::createTon(status));
749 measureUnit.adoptInstead(MeasureUnit::createGigawatt(status));
750 measureUnit.adoptInstead(MeasureUnit::createHorsepower(status));
751 measureUnit.adoptInstead(MeasureUnit::createKilowatt(status));
752 measureUnit.adoptInstead(MeasureUnit::createMegawatt(status));
753 measureUnit.adoptInstead(MeasureUnit::createMilliwatt(status));
754 measureUnit.adoptInstead(MeasureUnit::createWatt(status));
755 measureUnit.adoptInstead(MeasureUnit::createHectopascal(status));
756 measureUnit.adoptInstead(MeasureUnit::createInchHg(status));
757 measureUnit.adoptInstead(MeasureUnit::createMillibar(status));
758 measureUnit.adoptInstead(MeasureUnit::createMillimeterOfMercury(status));
759 measureUnit.adoptInstead(MeasureUnit::createPoundPerSquareInch(status));
760 measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status));
761 measureUnit.adoptInstead(MeasureUnit::createKnot(status));
762 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status));
763 measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status));
764 measureUnit.adoptInstead(MeasureUnit::createCelsius(status));
765 measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status));
766 measureUnit.adoptInstead(MeasureUnit::createGenericTemperature(status));
767 measureUnit.adoptInstead(MeasureUnit::createKelvin(status));
768 measureUnit.adoptInstead(MeasureUnit::createAcreFoot(status));
769 measureUnit.adoptInstead(MeasureUnit::createBushel(status));
770 measureUnit.adoptInstead(MeasureUnit::createCentiliter(status));
771 measureUnit.adoptInstead(MeasureUnit::createCubicCentimeter(status));
772 measureUnit.adoptInstead(MeasureUnit::createCubicFoot(status));
773 measureUnit.adoptInstead(MeasureUnit::createCubicInch(status));
774 measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status));
775 measureUnit.adoptInstead(MeasureUnit::createCubicMeter(status));
776 measureUnit.adoptInstead(MeasureUnit::createCubicMile(status));
777 measureUnit.adoptInstead(MeasureUnit::createCubicYard(status));
778 measureUnit.adoptInstead(MeasureUnit::createCup(status));
779 measureUnit.adoptInstead(MeasureUnit::createCupMetric(status));
780 measureUnit.adoptInstead(MeasureUnit::createDeciliter(status));
781 measureUnit.adoptInstead(MeasureUnit::createFluidOunce(status));
782 measureUnit.adoptInstead(MeasureUnit::createGallon(status));
783 measureUnit.adoptInstead(MeasureUnit::createGallonImperial(status));
784 measureUnit.adoptInstead(MeasureUnit::createHectoliter(status));
785 measureUnit.adoptInstead(MeasureUnit::createLiter(status));
786 measureUnit.adoptInstead(MeasureUnit::createMegaliter(status));
787 measureUnit.adoptInstead(MeasureUnit::createMilliliter(status));
788 measureUnit.adoptInstead(MeasureUnit::createPint(status));
789 measureUnit.adoptInstead(MeasureUnit::createPintMetric(status));
790 measureUnit.adoptInstead(MeasureUnit::createQuart(status));
791 measureUnit.adoptInstead(MeasureUnit::createTablespoon(status));
792 measureUnit.adoptInstead(MeasureUnit::createTeaspoon(status));
793 assertSuccess("", status);
794 }
795
TestCompatible58()796 void MeasureFormatTest::TestCompatible58() {
797 UErrorCode status = U_ZERO_ERROR;
798 LocalPointer<MeasureUnit> measureUnit;
799 measureUnit.adoptInstead(MeasureUnit::createGForce(status));
800 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecondSquared(status));
801 measureUnit.adoptInstead(MeasureUnit::createArcMinute(status));
802 measureUnit.adoptInstead(MeasureUnit::createArcSecond(status));
803 measureUnit.adoptInstead(MeasureUnit::createDegree(status));
804 measureUnit.adoptInstead(MeasureUnit::createRadian(status));
805 measureUnit.adoptInstead(MeasureUnit::createRevolutionAngle(status));
806 measureUnit.adoptInstead(MeasureUnit::createAcre(status));
807 measureUnit.adoptInstead(MeasureUnit::createHectare(status));
808 measureUnit.adoptInstead(MeasureUnit::createSquareCentimeter(status));
809 measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status));
810 measureUnit.adoptInstead(MeasureUnit::createSquareInch(status));
811 measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status));
812 measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status));
813 measureUnit.adoptInstead(MeasureUnit::createSquareMile(status));
814 measureUnit.adoptInstead(MeasureUnit::createSquareYard(status));
815 measureUnit.adoptInstead(MeasureUnit::createKarat(status));
816 measureUnit.adoptInstead(MeasureUnit::createMilligramPerDeciliter(status));
817 measureUnit.adoptInstead(MeasureUnit::createMillimolePerLiter(status));
818 measureUnit.adoptInstead(MeasureUnit::createPartPerMillion(status));
819 measureUnit.adoptInstead(MeasureUnit::createLiterPer100Kilometers(status));
820 measureUnit.adoptInstead(MeasureUnit::createLiterPerKilometer(status));
821 measureUnit.adoptInstead(MeasureUnit::createMilePerGallon(status));
822 measureUnit.adoptInstead(MeasureUnit::createMilePerGallonImperial(status));
823 // measureUnit.adoptInstead(MeasureUnit::createEast(status));
824 // measureUnit.adoptInstead(MeasureUnit::createNorth(status));
825 // measureUnit.adoptInstead(MeasureUnit::createSouth(status));
826 // measureUnit.adoptInstead(MeasureUnit::createWest(status));
827 measureUnit.adoptInstead(MeasureUnit::createBit(status));
828 measureUnit.adoptInstead(MeasureUnit::createByte(status));
829 measureUnit.adoptInstead(MeasureUnit::createGigabit(status));
830 measureUnit.adoptInstead(MeasureUnit::createGigabyte(status));
831 measureUnit.adoptInstead(MeasureUnit::createKilobit(status));
832 measureUnit.adoptInstead(MeasureUnit::createKilobyte(status));
833 measureUnit.adoptInstead(MeasureUnit::createMegabit(status));
834 measureUnit.adoptInstead(MeasureUnit::createMegabyte(status));
835 measureUnit.adoptInstead(MeasureUnit::createTerabit(status));
836 measureUnit.adoptInstead(MeasureUnit::createTerabyte(status));
837 measureUnit.adoptInstead(MeasureUnit::createCentury(status));
838 measureUnit.adoptInstead(MeasureUnit::createDay(status));
839 measureUnit.adoptInstead(MeasureUnit::createHour(status));
840 measureUnit.adoptInstead(MeasureUnit::createMicrosecond(status));
841 measureUnit.adoptInstead(MeasureUnit::createMillisecond(status));
842 measureUnit.adoptInstead(MeasureUnit::createMinute(status));
843 measureUnit.adoptInstead(MeasureUnit::createMonth(status));
844 measureUnit.adoptInstead(MeasureUnit::createNanosecond(status));
845 measureUnit.adoptInstead(MeasureUnit::createSecond(status));
846 measureUnit.adoptInstead(MeasureUnit::createWeek(status));
847 measureUnit.adoptInstead(MeasureUnit::createYear(status));
848 measureUnit.adoptInstead(MeasureUnit::createAmpere(status));
849 measureUnit.adoptInstead(MeasureUnit::createMilliampere(status));
850 measureUnit.adoptInstead(MeasureUnit::createOhm(status));
851 measureUnit.adoptInstead(MeasureUnit::createVolt(status));
852 measureUnit.adoptInstead(MeasureUnit::createCalorie(status));
853 measureUnit.adoptInstead(MeasureUnit::createFoodcalorie(status));
854 measureUnit.adoptInstead(MeasureUnit::createJoule(status));
855 measureUnit.adoptInstead(MeasureUnit::createKilocalorie(status));
856 measureUnit.adoptInstead(MeasureUnit::createKilojoule(status));
857 measureUnit.adoptInstead(MeasureUnit::createKilowattHour(status));
858 measureUnit.adoptInstead(MeasureUnit::createGigahertz(status));
859 measureUnit.adoptInstead(MeasureUnit::createHertz(status));
860 measureUnit.adoptInstead(MeasureUnit::createKilohertz(status));
861 measureUnit.adoptInstead(MeasureUnit::createMegahertz(status));
862 measureUnit.adoptInstead(MeasureUnit::createAstronomicalUnit(status));
863 measureUnit.adoptInstead(MeasureUnit::createCentimeter(status));
864 measureUnit.adoptInstead(MeasureUnit::createDecimeter(status));
865 measureUnit.adoptInstead(MeasureUnit::createFathom(status));
866 measureUnit.adoptInstead(MeasureUnit::createFoot(status));
867 measureUnit.adoptInstead(MeasureUnit::createFurlong(status));
868 measureUnit.adoptInstead(MeasureUnit::createInch(status));
869 measureUnit.adoptInstead(MeasureUnit::createKilometer(status));
870 measureUnit.adoptInstead(MeasureUnit::createLightYear(status));
871 measureUnit.adoptInstead(MeasureUnit::createMeter(status));
872 measureUnit.adoptInstead(MeasureUnit::createMicrometer(status));
873 measureUnit.adoptInstead(MeasureUnit::createMile(status));
874 measureUnit.adoptInstead(MeasureUnit::createMileScandinavian(status));
875 measureUnit.adoptInstead(MeasureUnit::createMillimeter(status));
876 measureUnit.adoptInstead(MeasureUnit::createNanometer(status));
877 measureUnit.adoptInstead(MeasureUnit::createNauticalMile(status));
878 measureUnit.adoptInstead(MeasureUnit::createParsec(status));
879 measureUnit.adoptInstead(MeasureUnit::createPicometer(status));
880 measureUnit.adoptInstead(MeasureUnit::createYard(status));
881 measureUnit.adoptInstead(MeasureUnit::createLux(status));
882 measureUnit.adoptInstead(MeasureUnit::createCarat(status));
883 measureUnit.adoptInstead(MeasureUnit::createGram(status));
884 measureUnit.adoptInstead(MeasureUnit::createKilogram(status));
885 measureUnit.adoptInstead(MeasureUnit::createMetricTon(status));
886 measureUnit.adoptInstead(MeasureUnit::createMicrogram(status));
887 measureUnit.adoptInstead(MeasureUnit::createMilligram(status));
888 measureUnit.adoptInstead(MeasureUnit::createOunce(status));
889 measureUnit.adoptInstead(MeasureUnit::createOunceTroy(status));
890 measureUnit.adoptInstead(MeasureUnit::createPound(status));
891 measureUnit.adoptInstead(MeasureUnit::createStone(status));
892 measureUnit.adoptInstead(MeasureUnit::createTon(status));
893 measureUnit.adoptInstead(MeasureUnit::createGigawatt(status));
894 measureUnit.adoptInstead(MeasureUnit::createHorsepower(status));
895 measureUnit.adoptInstead(MeasureUnit::createKilowatt(status));
896 measureUnit.adoptInstead(MeasureUnit::createMegawatt(status));
897 measureUnit.adoptInstead(MeasureUnit::createMilliwatt(status));
898 measureUnit.adoptInstead(MeasureUnit::createWatt(status));
899 measureUnit.adoptInstead(MeasureUnit::createHectopascal(status));
900 measureUnit.adoptInstead(MeasureUnit::createInchHg(status));
901 measureUnit.adoptInstead(MeasureUnit::createMillibar(status));
902 measureUnit.adoptInstead(MeasureUnit::createMillimeterOfMercury(status));
903 measureUnit.adoptInstead(MeasureUnit::createPoundPerSquareInch(status));
904 measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status));
905 measureUnit.adoptInstead(MeasureUnit::createKnot(status));
906 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status));
907 measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status));
908 measureUnit.adoptInstead(MeasureUnit::createCelsius(status));
909 measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status));
910 measureUnit.adoptInstead(MeasureUnit::createGenericTemperature(status));
911 measureUnit.adoptInstead(MeasureUnit::createKelvin(status));
912 measureUnit.adoptInstead(MeasureUnit::createAcreFoot(status));
913 measureUnit.adoptInstead(MeasureUnit::createBushel(status));
914 measureUnit.adoptInstead(MeasureUnit::createCentiliter(status));
915 measureUnit.adoptInstead(MeasureUnit::createCubicCentimeter(status));
916 measureUnit.adoptInstead(MeasureUnit::createCubicFoot(status));
917 measureUnit.adoptInstead(MeasureUnit::createCubicInch(status));
918 measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status));
919 measureUnit.adoptInstead(MeasureUnit::createCubicMeter(status));
920 measureUnit.adoptInstead(MeasureUnit::createCubicMile(status));
921 measureUnit.adoptInstead(MeasureUnit::createCubicYard(status));
922 measureUnit.adoptInstead(MeasureUnit::createCup(status));
923 measureUnit.adoptInstead(MeasureUnit::createCupMetric(status));
924 measureUnit.adoptInstead(MeasureUnit::createDeciliter(status));
925 measureUnit.adoptInstead(MeasureUnit::createFluidOunce(status));
926 measureUnit.adoptInstead(MeasureUnit::createGallon(status));
927 measureUnit.adoptInstead(MeasureUnit::createGallonImperial(status));
928 measureUnit.adoptInstead(MeasureUnit::createHectoliter(status));
929 measureUnit.adoptInstead(MeasureUnit::createLiter(status));
930 measureUnit.adoptInstead(MeasureUnit::createMegaliter(status));
931 measureUnit.adoptInstead(MeasureUnit::createMilliliter(status));
932 measureUnit.adoptInstead(MeasureUnit::createPint(status));
933 measureUnit.adoptInstead(MeasureUnit::createPintMetric(status));
934 measureUnit.adoptInstead(MeasureUnit::createQuart(status));
935 measureUnit.adoptInstead(MeasureUnit::createTablespoon(status));
936 measureUnit.adoptInstead(MeasureUnit::createTeaspoon(status));
937 assertSuccess("", status);
938 }
939
TestCompatible59()940 void MeasureFormatTest::TestCompatible59() {
941 UErrorCode status = U_ZERO_ERROR;
942 LocalPointer<MeasureUnit> measureUnit;
943 measureUnit.adoptInstead(MeasureUnit::createGForce(status));
944 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecondSquared(status));
945 measureUnit.adoptInstead(MeasureUnit::createArcMinute(status));
946 measureUnit.adoptInstead(MeasureUnit::createArcSecond(status));
947 measureUnit.adoptInstead(MeasureUnit::createDegree(status));
948 measureUnit.adoptInstead(MeasureUnit::createRadian(status));
949 measureUnit.adoptInstead(MeasureUnit::createRevolutionAngle(status));
950 measureUnit.adoptInstead(MeasureUnit::createAcre(status));
951 measureUnit.adoptInstead(MeasureUnit::createHectare(status));
952 measureUnit.adoptInstead(MeasureUnit::createSquareCentimeter(status));
953 measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status));
954 measureUnit.adoptInstead(MeasureUnit::createSquareInch(status));
955 measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status));
956 measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status));
957 measureUnit.adoptInstead(MeasureUnit::createSquareMile(status));
958 measureUnit.adoptInstead(MeasureUnit::createSquareYard(status));
959 measureUnit.adoptInstead(MeasureUnit::createKarat(status));
960 measureUnit.adoptInstead(MeasureUnit::createMilligramPerDeciliter(status));
961 measureUnit.adoptInstead(MeasureUnit::createMillimolePerLiter(status));
962 measureUnit.adoptInstead(MeasureUnit::createPartPerMillion(status));
963 measureUnit.adoptInstead(MeasureUnit::createLiterPer100Kilometers(status));
964 measureUnit.adoptInstead(MeasureUnit::createLiterPerKilometer(status));
965 measureUnit.adoptInstead(MeasureUnit::createMilePerGallon(status));
966 measureUnit.adoptInstead(MeasureUnit::createMilePerGallonImperial(status));
967 measureUnit.adoptInstead(MeasureUnit::createBit(status));
968 measureUnit.adoptInstead(MeasureUnit::createByte(status));
969 measureUnit.adoptInstead(MeasureUnit::createGigabit(status));
970 measureUnit.adoptInstead(MeasureUnit::createGigabyte(status));
971 measureUnit.adoptInstead(MeasureUnit::createKilobit(status));
972 measureUnit.adoptInstead(MeasureUnit::createKilobyte(status));
973 measureUnit.adoptInstead(MeasureUnit::createMegabit(status));
974 measureUnit.adoptInstead(MeasureUnit::createMegabyte(status));
975 measureUnit.adoptInstead(MeasureUnit::createTerabit(status));
976 measureUnit.adoptInstead(MeasureUnit::createTerabyte(status));
977 measureUnit.adoptInstead(MeasureUnit::createCentury(status));
978 measureUnit.adoptInstead(MeasureUnit::createDay(status));
979 measureUnit.adoptInstead(MeasureUnit::createHour(status));
980 measureUnit.adoptInstead(MeasureUnit::createMicrosecond(status));
981 measureUnit.adoptInstead(MeasureUnit::createMillisecond(status));
982 measureUnit.adoptInstead(MeasureUnit::createMinute(status));
983 measureUnit.adoptInstead(MeasureUnit::createMonth(status));
984 measureUnit.adoptInstead(MeasureUnit::createNanosecond(status));
985 measureUnit.adoptInstead(MeasureUnit::createSecond(status));
986 measureUnit.adoptInstead(MeasureUnit::createWeek(status));
987 measureUnit.adoptInstead(MeasureUnit::createYear(status));
988 measureUnit.adoptInstead(MeasureUnit::createAmpere(status));
989 measureUnit.adoptInstead(MeasureUnit::createMilliampere(status));
990 measureUnit.adoptInstead(MeasureUnit::createOhm(status));
991 measureUnit.adoptInstead(MeasureUnit::createVolt(status));
992 measureUnit.adoptInstead(MeasureUnit::createCalorie(status));
993 measureUnit.adoptInstead(MeasureUnit::createFoodcalorie(status));
994 measureUnit.adoptInstead(MeasureUnit::createJoule(status));
995 measureUnit.adoptInstead(MeasureUnit::createKilocalorie(status));
996 measureUnit.adoptInstead(MeasureUnit::createKilojoule(status));
997 measureUnit.adoptInstead(MeasureUnit::createKilowattHour(status));
998 measureUnit.adoptInstead(MeasureUnit::createGigahertz(status));
999 measureUnit.adoptInstead(MeasureUnit::createHertz(status));
1000 measureUnit.adoptInstead(MeasureUnit::createKilohertz(status));
1001 measureUnit.adoptInstead(MeasureUnit::createMegahertz(status));
1002 measureUnit.adoptInstead(MeasureUnit::createAstronomicalUnit(status));
1003 measureUnit.adoptInstead(MeasureUnit::createCentimeter(status));
1004 measureUnit.adoptInstead(MeasureUnit::createDecimeter(status));
1005 measureUnit.adoptInstead(MeasureUnit::createFathom(status));
1006 measureUnit.adoptInstead(MeasureUnit::createFoot(status));
1007 measureUnit.adoptInstead(MeasureUnit::createFurlong(status));
1008 measureUnit.adoptInstead(MeasureUnit::createInch(status));
1009 measureUnit.adoptInstead(MeasureUnit::createKilometer(status));
1010 measureUnit.adoptInstead(MeasureUnit::createLightYear(status));
1011 measureUnit.adoptInstead(MeasureUnit::createMeter(status));
1012 measureUnit.adoptInstead(MeasureUnit::createMicrometer(status));
1013 measureUnit.adoptInstead(MeasureUnit::createMile(status));
1014 measureUnit.adoptInstead(MeasureUnit::createMileScandinavian(status));
1015 measureUnit.adoptInstead(MeasureUnit::createMillimeter(status));
1016 measureUnit.adoptInstead(MeasureUnit::createNanometer(status));
1017 measureUnit.adoptInstead(MeasureUnit::createNauticalMile(status));
1018 measureUnit.adoptInstead(MeasureUnit::createParsec(status));
1019 measureUnit.adoptInstead(MeasureUnit::createPicometer(status));
1020 measureUnit.adoptInstead(MeasureUnit::createPoint(status));
1021 measureUnit.adoptInstead(MeasureUnit::createYard(status));
1022 measureUnit.adoptInstead(MeasureUnit::createLux(status));
1023 measureUnit.adoptInstead(MeasureUnit::createCarat(status));
1024 measureUnit.adoptInstead(MeasureUnit::createGram(status));
1025 measureUnit.adoptInstead(MeasureUnit::createKilogram(status));
1026 measureUnit.adoptInstead(MeasureUnit::createMetricTon(status));
1027 measureUnit.adoptInstead(MeasureUnit::createMicrogram(status));
1028 measureUnit.adoptInstead(MeasureUnit::createMilligram(status));
1029 measureUnit.adoptInstead(MeasureUnit::createOunce(status));
1030 measureUnit.adoptInstead(MeasureUnit::createOunceTroy(status));
1031 measureUnit.adoptInstead(MeasureUnit::createPound(status));
1032 measureUnit.adoptInstead(MeasureUnit::createStone(status));
1033 measureUnit.adoptInstead(MeasureUnit::createTon(status));
1034 measureUnit.adoptInstead(MeasureUnit::createGigawatt(status));
1035 measureUnit.adoptInstead(MeasureUnit::createHorsepower(status));
1036 measureUnit.adoptInstead(MeasureUnit::createKilowatt(status));
1037 measureUnit.adoptInstead(MeasureUnit::createMegawatt(status));
1038 measureUnit.adoptInstead(MeasureUnit::createMilliwatt(status));
1039 measureUnit.adoptInstead(MeasureUnit::createWatt(status));
1040 measureUnit.adoptInstead(MeasureUnit::createHectopascal(status));
1041 measureUnit.adoptInstead(MeasureUnit::createInchHg(status));
1042 measureUnit.adoptInstead(MeasureUnit::createMillibar(status));
1043 measureUnit.adoptInstead(MeasureUnit::createMillimeterOfMercury(status));
1044 measureUnit.adoptInstead(MeasureUnit::createPoundPerSquareInch(status));
1045 measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status));
1046 measureUnit.adoptInstead(MeasureUnit::createKnot(status));
1047 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status));
1048 measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status));
1049 measureUnit.adoptInstead(MeasureUnit::createCelsius(status));
1050 measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status));
1051 measureUnit.adoptInstead(MeasureUnit::createGenericTemperature(status));
1052 measureUnit.adoptInstead(MeasureUnit::createKelvin(status));
1053 measureUnit.adoptInstead(MeasureUnit::createAcreFoot(status));
1054 measureUnit.adoptInstead(MeasureUnit::createBushel(status));
1055 measureUnit.adoptInstead(MeasureUnit::createCentiliter(status));
1056 measureUnit.adoptInstead(MeasureUnit::createCubicCentimeter(status));
1057 measureUnit.adoptInstead(MeasureUnit::createCubicFoot(status));
1058 measureUnit.adoptInstead(MeasureUnit::createCubicInch(status));
1059 measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status));
1060 measureUnit.adoptInstead(MeasureUnit::createCubicMeter(status));
1061 measureUnit.adoptInstead(MeasureUnit::createCubicMile(status));
1062 measureUnit.adoptInstead(MeasureUnit::createCubicYard(status));
1063 measureUnit.adoptInstead(MeasureUnit::createCup(status));
1064 measureUnit.adoptInstead(MeasureUnit::createCupMetric(status));
1065 measureUnit.adoptInstead(MeasureUnit::createDeciliter(status));
1066 measureUnit.adoptInstead(MeasureUnit::createFluidOunce(status));
1067 measureUnit.adoptInstead(MeasureUnit::createGallon(status));
1068 measureUnit.adoptInstead(MeasureUnit::createGallonImperial(status));
1069 measureUnit.adoptInstead(MeasureUnit::createHectoliter(status));
1070 measureUnit.adoptInstead(MeasureUnit::createLiter(status));
1071 measureUnit.adoptInstead(MeasureUnit::createMegaliter(status));
1072 measureUnit.adoptInstead(MeasureUnit::createMilliliter(status));
1073 measureUnit.adoptInstead(MeasureUnit::createPint(status));
1074 measureUnit.adoptInstead(MeasureUnit::createPintMetric(status));
1075 measureUnit.adoptInstead(MeasureUnit::createQuart(status));
1076 measureUnit.adoptInstead(MeasureUnit::createTablespoon(status));
1077 measureUnit.adoptInstead(MeasureUnit::createTeaspoon(status));
1078 assertSuccess("", status);
1079 }
1080
1081 // Note that TestCompatible60(), TestCompatible61(), TestCompatible62()
1082 // would be the same as TestCompatible59(), no need to add them.
1083
TestCompatible63()1084 void MeasureFormatTest::TestCompatible63() {
1085 UErrorCode status = U_ZERO_ERROR;
1086 LocalPointer<MeasureUnit> measureUnit;
1087 measureUnit.adoptInstead(MeasureUnit::createGForce(status));
1088 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecondSquared(status));
1089 measureUnit.adoptInstead(MeasureUnit::createArcMinute(status));
1090 measureUnit.adoptInstead(MeasureUnit::createArcSecond(status));
1091 measureUnit.adoptInstead(MeasureUnit::createDegree(status));
1092 measureUnit.adoptInstead(MeasureUnit::createRadian(status));
1093 measureUnit.adoptInstead(MeasureUnit::createRevolutionAngle(status));
1094 measureUnit.adoptInstead(MeasureUnit::createAcre(status));
1095 measureUnit.adoptInstead(MeasureUnit::createHectare(status));
1096 measureUnit.adoptInstead(MeasureUnit::createSquareCentimeter(status));
1097 measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status));
1098 measureUnit.adoptInstead(MeasureUnit::createSquareInch(status));
1099 measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status));
1100 measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status));
1101 measureUnit.adoptInstead(MeasureUnit::createSquareMile(status));
1102 measureUnit.adoptInstead(MeasureUnit::createSquareYard(status));
1103 measureUnit.adoptInstead(MeasureUnit::createKarat(status));
1104 measureUnit.adoptInstead(MeasureUnit::createMilligramPerDeciliter(status));
1105 measureUnit.adoptInstead(MeasureUnit::createMillimolePerLiter(status));
1106 measureUnit.adoptInstead(MeasureUnit::createPartPerMillion(status));
1107 measureUnit.adoptInstead(MeasureUnit::createPercent(status));
1108 measureUnit.adoptInstead(MeasureUnit::createPermille(status));
1109 measureUnit.adoptInstead(MeasureUnit::createLiterPer100Kilometers(status));
1110 measureUnit.adoptInstead(MeasureUnit::createLiterPerKilometer(status));
1111 measureUnit.adoptInstead(MeasureUnit::createMilePerGallon(status));
1112 measureUnit.adoptInstead(MeasureUnit::createMilePerGallonImperial(status));
1113 measureUnit.adoptInstead(MeasureUnit::createBit(status));
1114 measureUnit.adoptInstead(MeasureUnit::createByte(status));
1115 measureUnit.adoptInstead(MeasureUnit::createGigabit(status));
1116 measureUnit.adoptInstead(MeasureUnit::createGigabyte(status));
1117 measureUnit.adoptInstead(MeasureUnit::createKilobit(status));
1118 measureUnit.adoptInstead(MeasureUnit::createKilobyte(status));
1119 measureUnit.adoptInstead(MeasureUnit::createMegabit(status));
1120 measureUnit.adoptInstead(MeasureUnit::createMegabyte(status));
1121 measureUnit.adoptInstead(MeasureUnit::createPetabyte(status));
1122 measureUnit.adoptInstead(MeasureUnit::createTerabit(status));
1123 measureUnit.adoptInstead(MeasureUnit::createTerabyte(status));
1124 measureUnit.adoptInstead(MeasureUnit::createCentury(status));
1125 measureUnit.adoptInstead(MeasureUnit::createDay(status));
1126 measureUnit.adoptInstead(MeasureUnit::createHour(status));
1127 measureUnit.adoptInstead(MeasureUnit::createMicrosecond(status));
1128 measureUnit.adoptInstead(MeasureUnit::createMillisecond(status));
1129 measureUnit.adoptInstead(MeasureUnit::createMinute(status));
1130 measureUnit.adoptInstead(MeasureUnit::createMonth(status));
1131 measureUnit.adoptInstead(MeasureUnit::createNanosecond(status));
1132 measureUnit.adoptInstead(MeasureUnit::createSecond(status));
1133 measureUnit.adoptInstead(MeasureUnit::createWeek(status));
1134 measureUnit.adoptInstead(MeasureUnit::createYear(status));
1135 measureUnit.adoptInstead(MeasureUnit::createAmpere(status));
1136 measureUnit.adoptInstead(MeasureUnit::createMilliampere(status));
1137 measureUnit.adoptInstead(MeasureUnit::createOhm(status));
1138 measureUnit.adoptInstead(MeasureUnit::createVolt(status));
1139 measureUnit.adoptInstead(MeasureUnit::createCalorie(status));
1140 measureUnit.adoptInstead(MeasureUnit::createFoodcalorie(status));
1141 measureUnit.adoptInstead(MeasureUnit::createJoule(status));
1142 measureUnit.adoptInstead(MeasureUnit::createKilocalorie(status));
1143 measureUnit.adoptInstead(MeasureUnit::createKilojoule(status));
1144 measureUnit.adoptInstead(MeasureUnit::createKilowattHour(status));
1145 measureUnit.adoptInstead(MeasureUnit::createGigahertz(status));
1146 measureUnit.adoptInstead(MeasureUnit::createHertz(status));
1147 measureUnit.adoptInstead(MeasureUnit::createKilohertz(status));
1148 measureUnit.adoptInstead(MeasureUnit::createMegahertz(status));
1149 measureUnit.adoptInstead(MeasureUnit::createAstronomicalUnit(status));
1150 measureUnit.adoptInstead(MeasureUnit::createCentimeter(status));
1151 measureUnit.adoptInstead(MeasureUnit::createDecimeter(status));
1152 measureUnit.adoptInstead(MeasureUnit::createFathom(status));
1153 measureUnit.adoptInstead(MeasureUnit::createFoot(status));
1154 measureUnit.adoptInstead(MeasureUnit::createFurlong(status));
1155 measureUnit.adoptInstead(MeasureUnit::createInch(status));
1156 measureUnit.adoptInstead(MeasureUnit::createKilometer(status));
1157 measureUnit.adoptInstead(MeasureUnit::createLightYear(status));
1158 measureUnit.adoptInstead(MeasureUnit::createMeter(status));
1159 measureUnit.adoptInstead(MeasureUnit::createMicrometer(status));
1160 measureUnit.adoptInstead(MeasureUnit::createMile(status));
1161 measureUnit.adoptInstead(MeasureUnit::createMileScandinavian(status));
1162 measureUnit.adoptInstead(MeasureUnit::createMillimeter(status));
1163 measureUnit.adoptInstead(MeasureUnit::createNanometer(status));
1164 measureUnit.adoptInstead(MeasureUnit::createNauticalMile(status));
1165 measureUnit.adoptInstead(MeasureUnit::createParsec(status));
1166 measureUnit.adoptInstead(MeasureUnit::createPicometer(status));
1167 measureUnit.adoptInstead(MeasureUnit::createPoint(status));
1168 measureUnit.adoptInstead(MeasureUnit::createYard(status));
1169 measureUnit.adoptInstead(MeasureUnit::createLux(status));
1170 measureUnit.adoptInstead(MeasureUnit::createCarat(status));
1171 measureUnit.adoptInstead(MeasureUnit::createGram(status));
1172 measureUnit.adoptInstead(MeasureUnit::createKilogram(status));
1173 measureUnit.adoptInstead(MeasureUnit::createMetricTon(status));
1174 measureUnit.adoptInstead(MeasureUnit::createMicrogram(status));
1175 measureUnit.adoptInstead(MeasureUnit::createMilligram(status));
1176 measureUnit.adoptInstead(MeasureUnit::createOunce(status));
1177 measureUnit.adoptInstead(MeasureUnit::createOunceTroy(status));
1178 measureUnit.adoptInstead(MeasureUnit::createPound(status));
1179 measureUnit.adoptInstead(MeasureUnit::createStone(status));
1180 measureUnit.adoptInstead(MeasureUnit::createTon(status));
1181 measureUnit.adoptInstead(MeasureUnit::createGigawatt(status));
1182 measureUnit.adoptInstead(MeasureUnit::createHorsepower(status));
1183 measureUnit.adoptInstead(MeasureUnit::createKilowatt(status));
1184 measureUnit.adoptInstead(MeasureUnit::createMegawatt(status));
1185 measureUnit.adoptInstead(MeasureUnit::createMilliwatt(status));
1186 measureUnit.adoptInstead(MeasureUnit::createWatt(status));
1187 measureUnit.adoptInstead(MeasureUnit::createAtmosphere(status));
1188 measureUnit.adoptInstead(MeasureUnit::createHectopascal(status));
1189 measureUnit.adoptInstead(MeasureUnit::createInchHg(status));
1190 measureUnit.adoptInstead(MeasureUnit::createMillibar(status));
1191 measureUnit.adoptInstead(MeasureUnit::createMillimeterOfMercury(status));
1192 measureUnit.adoptInstead(MeasureUnit::createPoundPerSquareInch(status));
1193 measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status));
1194 measureUnit.adoptInstead(MeasureUnit::createKnot(status));
1195 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status));
1196 measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status));
1197 measureUnit.adoptInstead(MeasureUnit::createCelsius(status));
1198 measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status));
1199 measureUnit.adoptInstead(MeasureUnit::createGenericTemperature(status));
1200 measureUnit.adoptInstead(MeasureUnit::createKelvin(status));
1201 measureUnit.adoptInstead(MeasureUnit::createAcreFoot(status));
1202 measureUnit.adoptInstead(MeasureUnit::createBushel(status));
1203 measureUnit.adoptInstead(MeasureUnit::createCentiliter(status));
1204 measureUnit.adoptInstead(MeasureUnit::createCubicCentimeter(status));
1205 measureUnit.adoptInstead(MeasureUnit::createCubicFoot(status));
1206 measureUnit.adoptInstead(MeasureUnit::createCubicInch(status));
1207 measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status));
1208 measureUnit.adoptInstead(MeasureUnit::createCubicMeter(status));
1209 measureUnit.adoptInstead(MeasureUnit::createCubicMile(status));
1210 measureUnit.adoptInstead(MeasureUnit::createCubicYard(status));
1211 measureUnit.adoptInstead(MeasureUnit::createCup(status));
1212 measureUnit.adoptInstead(MeasureUnit::createCupMetric(status));
1213 measureUnit.adoptInstead(MeasureUnit::createDeciliter(status));
1214 measureUnit.adoptInstead(MeasureUnit::createFluidOunce(status));
1215 measureUnit.adoptInstead(MeasureUnit::createGallon(status));
1216 measureUnit.adoptInstead(MeasureUnit::createGallonImperial(status));
1217 measureUnit.adoptInstead(MeasureUnit::createHectoliter(status));
1218 measureUnit.adoptInstead(MeasureUnit::createLiter(status));
1219 measureUnit.adoptInstead(MeasureUnit::createMegaliter(status));
1220 measureUnit.adoptInstead(MeasureUnit::createMilliliter(status));
1221 measureUnit.adoptInstead(MeasureUnit::createPint(status));
1222 measureUnit.adoptInstead(MeasureUnit::createPintMetric(status));
1223 measureUnit.adoptInstead(MeasureUnit::createQuart(status));
1224 measureUnit.adoptInstead(MeasureUnit::createTablespoon(status));
1225 measureUnit.adoptInstead(MeasureUnit::createTeaspoon(status));
1226 assertSuccess("", status);
1227 }
1228
TestCompatible64()1229 void MeasureFormatTest::TestCompatible64() {
1230 UErrorCode status = U_ZERO_ERROR;
1231 LocalPointer<MeasureUnit> measureUnit;
1232 MeasureUnit measureUnitValue;
1233 measureUnit.adoptInstead(MeasureUnit::createGForce(status));
1234 measureUnitValue = MeasureUnit::getGForce();
1235 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecondSquared(status));
1236 measureUnitValue = MeasureUnit::getMeterPerSecondSquared();
1237 measureUnit.adoptInstead(MeasureUnit::createArcMinute(status));
1238 measureUnitValue = MeasureUnit::getArcMinute();
1239 measureUnit.adoptInstead(MeasureUnit::createArcSecond(status));
1240 measureUnitValue = MeasureUnit::getArcSecond();
1241 measureUnit.adoptInstead(MeasureUnit::createDegree(status));
1242 measureUnitValue = MeasureUnit::getDegree();
1243 measureUnit.adoptInstead(MeasureUnit::createRadian(status));
1244 measureUnitValue = MeasureUnit::getRadian();
1245 measureUnit.adoptInstead(MeasureUnit::createRevolutionAngle(status));
1246 measureUnitValue = MeasureUnit::getRevolutionAngle();
1247 measureUnit.adoptInstead(MeasureUnit::createAcre(status));
1248 measureUnitValue = MeasureUnit::getAcre();
1249 measureUnit.adoptInstead(MeasureUnit::createDunam(status));
1250 measureUnitValue = MeasureUnit::getDunam();
1251 measureUnit.adoptInstead(MeasureUnit::createHectare(status));
1252 measureUnitValue = MeasureUnit::getHectare();
1253 measureUnit.adoptInstead(MeasureUnit::createSquareCentimeter(status));
1254 measureUnitValue = MeasureUnit::getSquareCentimeter();
1255 measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status));
1256 measureUnitValue = MeasureUnit::getSquareFoot();
1257 measureUnit.adoptInstead(MeasureUnit::createSquareInch(status));
1258 measureUnitValue = MeasureUnit::getSquareInch();
1259 measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status));
1260 measureUnitValue = MeasureUnit::getSquareKilometer();
1261 measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status));
1262 measureUnitValue = MeasureUnit::getSquareMeter();
1263 measureUnit.adoptInstead(MeasureUnit::createSquareMile(status));
1264 measureUnitValue = MeasureUnit::getSquareMile();
1265 measureUnit.adoptInstead(MeasureUnit::createSquareYard(status));
1266 measureUnitValue = MeasureUnit::getSquareYard();
1267 measureUnit.adoptInstead(MeasureUnit::createKarat(status));
1268 measureUnitValue = MeasureUnit::getKarat();
1269 measureUnit.adoptInstead(MeasureUnit::createMilligramPerDeciliter(status));
1270 measureUnitValue = MeasureUnit::getMilligramPerDeciliter();
1271 measureUnit.adoptInstead(MeasureUnit::createMillimolePerLiter(status));
1272 measureUnitValue = MeasureUnit::getMillimolePerLiter();
1273 measureUnit.adoptInstead(MeasureUnit::createMole(status));
1274 measureUnitValue = MeasureUnit::getMole();
1275 measureUnit.adoptInstead(MeasureUnit::createPartPerMillion(status));
1276 measureUnitValue = MeasureUnit::getPartPerMillion();
1277 measureUnit.adoptInstead(MeasureUnit::createPercent(status));
1278 measureUnitValue = MeasureUnit::getPercent();
1279 measureUnit.adoptInstead(MeasureUnit::createPermille(status));
1280 measureUnitValue = MeasureUnit::getPermille();
1281 measureUnit.adoptInstead(MeasureUnit::createPermyriad(status));
1282 measureUnitValue = MeasureUnit::getPermyriad();
1283 measureUnit.adoptInstead(MeasureUnit::createLiterPer100Kilometers(status));
1284 measureUnitValue = MeasureUnit::getLiterPer100Kilometers();
1285 measureUnit.adoptInstead(MeasureUnit::createLiterPerKilometer(status));
1286 measureUnitValue = MeasureUnit::getLiterPerKilometer();
1287 measureUnit.adoptInstead(MeasureUnit::createMilePerGallon(status));
1288 measureUnitValue = MeasureUnit::getMilePerGallon();
1289 measureUnit.adoptInstead(MeasureUnit::createMilePerGallonImperial(status));
1290 measureUnitValue = MeasureUnit::getMilePerGallonImperial();
1291 measureUnit.adoptInstead(MeasureUnit::createBit(status));
1292 measureUnitValue = MeasureUnit::getBit();
1293 measureUnit.adoptInstead(MeasureUnit::createByte(status));
1294 measureUnitValue = MeasureUnit::getByte();
1295 measureUnit.adoptInstead(MeasureUnit::createGigabit(status));
1296 measureUnitValue = MeasureUnit::getGigabit();
1297 measureUnit.adoptInstead(MeasureUnit::createGigabyte(status));
1298 measureUnitValue = MeasureUnit::getGigabyte();
1299 measureUnit.adoptInstead(MeasureUnit::createKilobit(status));
1300 measureUnitValue = MeasureUnit::getKilobit();
1301 measureUnit.adoptInstead(MeasureUnit::createKilobyte(status));
1302 measureUnitValue = MeasureUnit::getKilobyte();
1303 measureUnit.adoptInstead(MeasureUnit::createMegabit(status));
1304 measureUnitValue = MeasureUnit::getMegabit();
1305 measureUnit.adoptInstead(MeasureUnit::createMegabyte(status));
1306 measureUnitValue = MeasureUnit::getMegabyte();
1307 measureUnit.adoptInstead(MeasureUnit::createPetabyte(status));
1308 measureUnitValue = MeasureUnit::getPetabyte();
1309 measureUnit.adoptInstead(MeasureUnit::createTerabit(status));
1310 measureUnitValue = MeasureUnit::getTerabit();
1311 measureUnit.adoptInstead(MeasureUnit::createTerabyte(status));
1312 measureUnitValue = MeasureUnit::getTerabyte();
1313 measureUnit.adoptInstead(MeasureUnit::createCentury(status));
1314 measureUnitValue = MeasureUnit::getCentury();
1315 measureUnit.adoptInstead(MeasureUnit::createDay(status));
1316 measureUnitValue = MeasureUnit::getDay();
1317 measureUnit.adoptInstead(MeasureUnit::createDayPerson(status));
1318 measureUnitValue = MeasureUnit::getDayPerson();
1319 measureUnit.adoptInstead(MeasureUnit::createHour(status));
1320 measureUnitValue = MeasureUnit::getHour();
1321 measureUnit.adoptInstead(MeasureUnit::createMicrosecond(status));
1322 measureUnitValue = MeasureUnit::getMicrosecond();
1323 measureUnit.adoptInstead(MeasureUnit::createMillisecond(status));
1324 measureUnitValue = MeasureUnit::getMillisecond();
1325 measureUnit.adoptInstead(MeasureUnit::createMinute(status));
1326 measureUnitValue = MeasureUnit::getMinute();
1327 measureUnit.adoptInstead(MeasureUnit::createMonth(status));
1328 measureUnitValue = MeasureUnit::getMonth();
1329 measureUnit.adoptInstead(MeasureUnit::createMonthPerson(status));
1330 measureUnitValue = MeasureUnit::getMonthPerson();
1331 measureUnit.adoptInstead(MeasureUnit::createNanosecond(status));
1332 measureUnitValue = MeasureUnit::getNanosecond();
1333 measureUnit.adoptInstead(MeasureUnit::createSecond(status));
1334 measureUnitValue = MeasureUnit::getSecond();
1335 measureUnit.adoptInstead(MeasureUnit::createWeek(status));
1336 measureUnitValue = MeasureUnit::getWeek();
1337 measureUnit.adoptInstead(MeasureUnit::createWeekPerson(status));
1338 measureUnitValue = MeasureUnit::getWeekPerson();
1339 measureUnit.adoptInstead(MeasureUnit::createYear(status));
1340 measureUnitValue = MeasureUnit::getYear();
1341 measureUnit.adoptInstead(MeasureUnit::createYearPerson(status));
1342 measureUnitValue = MeasureUnit::getYearPerson();
1343 measureUnit.adoptInstead(MeasureUnit::createAmpere(status));
1344 measureUnitValue = MeasureUnit::getAmpere();
1345 measureUnit.adoptInstead(MeasureUnit::createMilliampere(status));
1346 measureUnitValue = MeasureUnit::getMilliampere();
1347 measureUnit.adoptInstead(MeasureUnit::createOhm(status));
1348 measureUnitValue = MeasureUnit::getOhm();
1349 measureUnit.adoptInstead(MeasureUnit::createVolt(status));
1350 measureUnitValue = MeasureUnit::getVolt();
1351 measureUnit.adoptInstead(MeasureUnit::createBritishThermalUnit(status));
1352 measureUnitValue = MeasureUnit::getBritishThermalUnit();
1353 measureUnit.adoptInstead(MeasureUnit::createCalorie(status));
1354 measureUnitValue = MeasureUnit::getCalorie();
1355 measureUnit.adoptInstead(MeasureUnit::createElectronvolt(status));
1356 measureUnitValue = MeasureUnit::getElectronvolt();
1357 measureUnit.adoptInstead(MeasureUnit::createFoodcalorie(status));
1358 measureUnitValue = MeasureUnit::getFoodcalorie();
1359 measureUnit.adoptInstead(MeasureUnit::createJoule(status));
1360 measureUnitValue = MeasureUnit::getJoule();
1361 measureUnit.adoptInstead(MeasureUnit::createKilocalorie(status));
1362 measureUnitValue = MeasureUnit::getKilocalorie();
1363 measureUnit.adoptInstead(MeasureUnit::createKilojoule(status));
1364 measureUnitValue = MeasureUnit::getKilojoule();
1365 measureUnit.adoptInstead(MeasureUnit::createKilowattHour(status));
1366 measureUnitValue = MeasureUnit::getKilowattHour();
1367 measureUnit.adoptInstead(MeasureUnit::createNewton(status));
1368 measureUnitValue = MeasureUnit::getNewton();
1369 measureUnit.adoptInstead(MeasureUnit::createPoundForce(status));
1370 measureUnitValue = MeasureUnit::getPoundForce();
1371 measureUnit.adoptInstead(MeasureUnit::createGigahertz(status));
1372 measureUnitValue = MeasureUnit::getGigahertz();
1373 measureUnit.adoptInstead(MeasureUnit::createHertz(status));
1374 measureUnitValue = MeasureUnit::getHertz();
1375 measureUnit.adoptInstead(MeasureUnit::createKilohertz(status));
1376 measureUnitValue = MeasureUnit::getKilohertz();
1377 measureUnit.adoptInstead(MeasureUnit::createMegahertz(status));
1378 measureUnitValue = MeasureUnit::getMegahertz();
1379 measureUnit.adoptInstead(MeasureUnit::createAstronomicalUnit(status));
1380 measureUnitValue = MeasureUnit::getAstronomicalUnit();
1381 measureUnit.adoptInstead(MeasureUnit::createCentimeter(status));
1382 measureUnitValue = MeasureUnit::getCentimeter();
1383 measureUnit.adoptInstead(MeasureUnit::createDecimeter(status));
1384 measureUnitValue = MeasureUnit::getDecimeter();
1385 measureUnit.adoptInstead(MeasureUnit::createFathom(status));
1386 measureUnitValue = MeasureUnit::getFathom();
1387 measureUnit.adoptInstead(MeasureUnit::createFoot(status));
1388 measureUnitValue = MeasureUnit::getFoot();
1389 measureUnit.adoptInstead(MeasureUnit::createFurlong(status));
1390 measureUnitValue = MeasureUnit::getFurlong();
1391 measureUnit.adoptInstead(MeasureUnit::createInch(status));
1392 measureUnitValue = MeasureUnit::getInch();
1393 measureUnit.adoptInstead(MeasureUnit::createKilometer(status));
1394 measureUnitValue = MeasureUnit::getKilometer();
1395 measureUnit.adoptInstead(MeasureUnit::createLightYear(status));
1396 measureUnitValue = MeasureUnit::getLightYear();
1397 measureUnit.adoptInstead(MeasureUnit::createMeter(status));
1398 measureUnitValue = MeasureUnit::getMeter();
1399 measureUnit.adoptInstead(MeasureUnit::createMicrometer(status));
1400 measureUnitValue = MeasureUnit::getMicrometer();
1401 measureUnit.adoptInstead(MeasureUnit::createMile(status));
1402 measureUnitValue = MeasureUnit::getMile();
1403 measureUnit.adoptInstead(MeasureUnit::createMileScandinavian(status));
1404 measureUnitValue = MeasureUnit::getMileScandinavian();
1405 measureUnit.adoptInstead(MeasureUnit::createMillimeter(status));
1406 measureUnitValue = MeasureUnit::getMillimeter();
1407 measureUnit.adoptInstead(MeasureUnit::createNanometer(status));
1408 measureUnitValue = MeasureUnit::getNanometer();
1409 measureUnit.adoptInstead(MeasureUnit::createNauticalMile(status));
1410 measureUnitValue = MeasureUnit::getNauticalMile();
1411 measureUnit.adoptInstead(MeasureUnit::createParsec(status));
1412 measureUnitValue = MeasureUnit::getParsec();
1413 measureUnit.adoptInstead(MeasureUnit::createPicometer(status));
1414 measureUnitValue = MeasureUnit::getPicometer();
1415 measureUnit.adoptInstead(MeasureUnit::createPoint(status));
1416 measureUnitValue = MeasureUnit::getPoint();
1417 measureUnit.adoptInstead(MeasureUnit::createSolarRadius(status));
1418 measureUnitValue = MeasureUnit::getSolarRadius();
1419 measureUnit.adoptInstead(MeasureUnit::createYard(status));
1420 measureUnitValue = MeasureUnit::getYard();
1421 measureUnit.adoptInstead(MeasureUnit::createLux(status));
1422 measureUnitValue = MeasureUnit::getLux();
1423 measureUnit.adoptInstead(MeasureUnit::createSolarLuminosity(status));
1424 measureUnitValue = MeasureUnit::getSolarLuminosity();
1425 measureUnit.adoptInstead(MeasureUnit::createCarat(status));
1426 measureUnitValue = MeasureUnit::getCarat();
1427 measureUnit.adoptInstead(MeasureUnit::createDalton(status));
1428 measureUnitValue = MeasureUnit::getDalton();
1429 measureUnit.adoptInstead(MeasureUnit::createEarthMass(status));
1430 measureUnitValue = MeasureUnit::getEarthMass();
1431 measureUnit.adoptInstead(MeasureUnit::createGram(status));
1432 measureUnitValue = MeasureUnit::getGram();
1433 measureUnit.adoptInstead(MeasureUnit::createKilogram(status));
1434 measureUnitValue = MeasureUnit::getKilogram();
1435 measureUnit.adoptInstead(MeasureUnit::createMetricTon(status));
1436 measureUnitValue = MeasureUnit::getMetricTon();
1437 measureUnit.adoptInstead(MeasureUnit::createMicrogram(status));
1438 measureUnitValue = MeasureUnit::getMicrogram();
1439 measureUnit.adoptInstead(MeasureUnit::createMilligram(status));
1440 measureUnitValue = MeasureUnit::getMilligram();
1441 measureUnit.adoptInstead(MeasureUnit::createOunce(status));
1442 measureUnitValue = MeasureUnit::getOunce();
1443 measureUnit.adoptInstead(MeasureUnit::createOunceTroy(status));
1444 measureUnitValue = MeasureUnit::getOunceTroy();
1445 measureUnit.adoptInstead(MeasureUnit::createPound(status));
1446 measureUnitValue = MeasureUnit::getPound();
1447 measureUnit.adoptInstead(MeasureUnit::createSolarMass(status));
1448 measureUnitValue = MeasureUnit::getSolarMass();
1449 measureUnit.adoptInstead(MeasureUnit::createStone(status));
1450 measureUnitValue = MeasureUnit::getStone();
1451 measureUnit.adoptInstead(MeasureUnit::createTon(status));
1452 measureUnitValue = MeasureUnit::getTon();
1453 measureUnit.adoptInstead(MeasureUnit::createGigawatt(status));
1454 measureUnitValue = MeasureUnit::getGigawatt();
1455 measureUnit.adoptInstead(MeasureUnit::createHorsepower(status));
1456 measureUnitValue = MeasureUnit::getHorsepower();
1457 measureUnit.adoptInstead(MeasureUnit::createKilowatt(status));
1458 measureUnitValue = MeasureUnit::getKilowatt();
1459 measureUnit.adoptInstead(MeasureUnit::createMegawatt(status));
1460 measureUnitValue = MeasureUnit::getMegawatt();
1461 measureUnit.adoptInstead(MeasureUnit::createMilliwatt(status));
1462 measureUnitValue = MeasureUnit::getMilliwatt();
1463 measureUnit.adoptInstead(MeasureUnit::createWatt(status));
1464 measureUnitValue = MeasureUnit::getWatt();
1465 measureUnit.adoptInstead(MeasureUnit::createAtmosphere(status));
1466 measureUnitValue = MeasureUnit::getAtmosphere();
1467 measureUnit.adoptInstead(MeasureUnit::createHectopascal(status));
1468 measureUnitValue = MeasureUnit::getHectopascal();
1469 measureUnit.adoptInstead(MeasureUnit::createInchHg(status));
1470 measureUnitValue = MeasureUnit::getInchHg();
1471 measureUnit.adoptInstead(MeasureUnit::createKilopascal(status));
1472 measureUnitValue = MeasureUnit::getKilopascal();
1473 measureUnit.adoptInstead(MeasureUnit::createMegapascal(status));
1474 measureUnitValue = MeasureUnit::getMegapascal();
1475 measureUnit.adoptInstead(MeasureUnit::createMillibar(status));
1476 measureUnitValue = MeasureUnit::getMillibar();
1477 measureUnit.adoptInstead(MeasureUnit::createMillimeterOfMercury(status));
1478 measureUnitValue = MeasureUnit::getMillimeterOfMercury();
1479 measureUnit.adoptInstead(MeasureUnit::createPoundPerSquareInch(status));
1480 measureUnitValue = MeasureUnit::getPoundPerSquareInch();
1481 measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status));
1482 measureUnitValue = MeasureUnit::getKilometerPerHour();
1483 measureUnit.adoptInstead(MeasureUnit::createKnot(status));
1484 measureUnitValue = MeasureUnit::getKnot();
1485 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status));
1486 measureUnitValue = MeasureUnit::getMeterPerSecond();
1487 measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status));
1488 measureUnitValue = MeasureUnit::getMilePerHour();
1489 measureUnit.adoptInstead(MeasureUnit::createCelsius(status));
1490 measureUnitValue = MeasureUnit::getCelsius();
1491 measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status));
1492 measureUnitValue = MeasureUnit::getFahrenheit();
1493 measureUnit.adoptInstead(MeasureUnit::createGenericTemperature(status));
1494 measureUnitValue = MeasureUnit::getGenericTemperature();
1495 measureUnit.adoptInstead(MeasureUnit::createKelvin(status));
1496 measureUnitValue = MeasureUnit::getKelvin();
1497 measureUnit.adoptInstead(MeasureUnit::createNewtonMeter(status));
1498 measureUnitValue = MeasureUnit::getNewtonMeter();
1499 measureUnit.adoptInstead(MeasureUnit::createPoundFoot(status));
1500 measureUnitValue = MeasureUnit::getPoundFoot();
1501 measureUnit.adoptInstead(MeasureUnit::createAcreFoot(status));
1502 measureUnitValue = MeasureUnit::getAcreFoot();
1503 measureUnit.adoptInstead(MeasureUnit::createBarrel(status));
1504 measureUnitValue = MeasureUnit::getBarrel();
1505 measureUnit.adoptInstead(MeasureUnit::createBushel(status));
1506 measureUnitValue = MeasureUnit::getBushel();
1507 measureUnit.adoptInstead(MeasureUnit::createCentiliter(status));
1508 measureUnitValue = MeasureUnit::getCentiliter();
1509 measureUnit.adoptInstead(MeasureUnit::createCubicCentimeter(status));
1510 measureUnitValue = MeasureUnit::getCubicCentimeter();
1511 measureUnit.adoptInstead(MeasureUnit::createCubicFoot(status));
1512 measureUnitValue = MeasureUnit::getCubicFoot();
1513 measureUnit.adoptInstead(MeasureUnit::createCubicInch(status));
1514 measureUnitValue = MeasureUnit::getCubicInch();
1515 measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status));
1516 measureUnitValue = MeasureUnit::getCubicKilometer();
1517 measureUnit.adoptInstead(MeasureUnit::createCubicMeter(status));
1518 measureUnitValue = MeasureUnit::getCubicMeter();
1519 measureUnit.adoptInstead(MeasureUnit::createCubicMile(status));
1520 measureUnitValue = MeasureUnit::getCubicMile();
1521 measureUnit.adoptInstead(MeasureUnit::createCubicYard(status));
1522 measureUnitValue = MeasureUnit::getCubicYard();
1523 measureUnit.adoptInstead(MeasureUnit::createCup(status));
1524 measureUnitValue = MeasureUnit::getCup();
1525 measureUnit.adoptInstead(MeasureUnit::createCupMetric(status));
1526 measureUnitValue = MeasureUnit::getCupMetric();
1527 measureUnit.adoptInstead(MeasureUnit::createDeciliter(status));
1528 measureUnitValue = MeasureUnit::getDeciliter();
1529 measureUnit.adoptInstead(MeasureUnit::createFluidOunce(status));
1530 measureUnitValue = MeasureUnit::getFluidOunce();
1531 measureUnit.adoptInstead(MeasureUnit::createFluidOunceImperial(status));
1532 measureUnitValue = MeasureUnit::getFluidOunceImperial();
1533 measureUnit.adoptInstead(MeasureUnit::createGallon(status));
1534 measureUnitValue = MeasureUnit::getGallon();
1535 measureUnit.adoptInstead(MeasureUnit::createGallonImperial(status));
1536 measureUnitValue = MeasureUnit::getGallonImperial();
1537 measureUnit.adoptInstead(MeasureUnit::createHectoliter(status));
1538 measureUnitValue = MeasureUnit::getHectoliter();
1539 measureUnit.adoptInstead(MeasureUnit::createLiter(status));
1540 measureUnitValue = MeasureUnit::getLiter();
1541 measureUnit.adoptInstead(MeasureUnit::createMegaliter(status));
1542 measureUnitValue = MeasureUnit::getMegaliter();
1543 measureUnit.adoptInstead(MeasureUnit::createMilliliter(status));
1544 measureUnitValue = MeasureUnit::getMilliliter();
1545 measureUnit.adoptInstead(MeasureUnit::createPint(status));
1546 measureUnitValue = MeasureUnit::getPint();
1547 measureUnit.adoptInstead(MeasureUnit::createPintMetric(status));
1548 measureUnitValue = MeasureUnit::getPintMetric();
1549 measureUnit.adoptInstead(MeasureUnit::createQuart(status));
1550 measureUnitValue = MeasureUnit::getQuart();
1551 measureUnit.adoptInstead(MeasureUnit::createTablespoon(status));
1552 measureUnitValue = MeasureUnit::getTablespoon();
1553 measureUnit.adoptInstead(MeasureUnit::createTeaspoon(status));
1554 measureUnitValue = MeasureUnit::getTeaspoon();
1555 assertSuccess("", status);
1556 }
1557
TestCompatible65()1558 void MeasureFormatTest::TestCompatible65() {
1559 UErrorCode status = U_ZERO_ERROR;
1560 LocalPointer<MeasureUnit> measureUnit;
1561 MeasureUnit measureUnitValue;
1562 measureUnit.adoptInstead(MeasureUnit::createGForce(status));
1563 measureUnitValue = MeasureUnit::getGForce();
1564 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecondSquared(status));
1565 measureUnitValue = MeasureUnit::getMeterPerSecondSquared();
1566 measureUnit.adoptInstead(MeasureUnit::createArcMinute(status));
1567 measureUnitValue = MeasureUnit::getArcMinute();
1568 measureUnit.adoptInstead(MeasureUnit::createArcSecond(status));
1569 measureUnitValue = MeasureUnit::getArcSecond();
1570 measureUnit.adoptInstead(MeasureUnit::createDegree(status));
1571 measureUnitValue = MeasureUnit::getDegree();
1572 measureUnit.adoptInstead(MeasureUnit::createRadian(status));
1573 measureUnitValue = MeasureUnit::getRadian();
1574 measureUnit.adoptInstead(MeasureUnit::createRevolutionAngle(status));
1575 measureUnitValue = MeasureUnit::getRevolutionAngle();
1576 measureUnit.adoptInstead(MeasureUnit::createAcre(status));
1577 measureUnitValue = MeasureUnit::getAcre();
1578 measureUnit.adoptInstead(MeasureUnit::createDunam(status));
1579 measureUnitValue = MeasureUnit::getDunam();
1580 measureUnit.adoptInstead(MeasureUnit::createHectare(status));
1581 measureUnitValue = MeasureUnit::getHectare();
1582 measureUnit.adoptInstead(MeasureUnit::createSquareCentimeter(status));
1583 measureUnitValue = MeasureUnit::getSquareCentimeter();
1584 measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status));
1585 measureUnitValue = MeasureUnit::getSquareFoot();
1586 measureUnit.adoptInstead(MeasureUnit::createSquareInch(status));
1587 measureUnitValue = MeasureUnit::getSquareInch();
1588 measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status));
1589 measureUnitValue = MeasureUnit::getSquareKilometer();
1590 measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status));
1591 measureUnitValue = MeasureUnit::getSquareMeter();
1592 measureUnit.adoptInstead(MeasureUnit::createSquareMile(status));
1593 measureUnitValue = MeasureUnit::getSquareMile();
1594 measureUnit.adoptInstead(MeasureUnit::createSquareYard(status));
1595 measureUnitValue = MeasureUnit::getSquareYard();
1596 measureUnit.adoptInstead(MeasureUnit::createKarat(status));
1597 measureUnitValue = MeasureUnit::getKarat();
1598 measureUnit.adoptInstead(MeasureUnit::createMilligramPerDeciliter(status));
1599 measureUnitValue = MeasureUnit::getMilligramPerDeciliter();
1600 measureUnit.adoptInstead(MeasureUnit::createMillimolePerLiter(status));
1601 measureUnitValue = MeasureUnit::getMillimolePerLiter();
1602 measureUnit.adoptInstead(MeasureUnit::createMole(status));
1603 measureUnitValue = MeasureUnit::getMole();
1604 measureUnit.adoptInstead(MeasureUnit::createPartPerMillion(status));
1605 measureUnitValue = MeasureUnit::getPartPerMillion();
1606 measureUnit.adoptInstead(MeasureUnit::createPercent(status));
1607 measureUnitValue = MeasureUnit::getPercent();
1608 measureUnit.adoptInstead(MeasureUnit::createPermille(status));
1609 measureUnitValue = MeasureUnit::getPermille();
1610 measureUnit.adoptInstead(MeasureUnit::createPermyriad(status));
1611 measureUnitValue = MeasureUnit::getPermyriad();
1612 measureUnit.adoptInstead(MeasureUnit::createLiterPer100Kilometers(status));
1613 measureUnitValue = MeasureUnit::getLiterPer100Kilometers();
1614 measureUnit.adoptInstead(MeasureUnit::createLiterPerKilometer(status));
1615 measureUnitValue = MeasureUnit::getLiterPerKilometer();
1616 measureUnit.adoptInstead(MeasureUnit::createMilePerGallon(status));
1617 measureUnitValue = MeasureUnit::getMilePerGallon();
1618 measureUnit.adoptInstead(MeasureUnit::createMilePerGallonImperial(status));
1619 measureUnitValue = MeasureUnit::getMilePerGallonImperial();
1620 measureUnit.adoptInstead(MeasureUnit::createBit(status));
1621 measureUnitValue = MeasureUnit::getBit();
1622 measureUnit.adoptInstead(MeasureUnit::createByte(status));
1623 measureUnitValue = MeasureUnit::getByte();
1624 measureUnit.adoptInstead(MeasureUnit::createGigabit(status));
1625 measureUnitValue = MeasureUnit::getGigabit();
1626 measureUnit.adoptInstead(MeasureUnit::createGigabyte(status));
1627 measureUnitValue = MeasureUnit::getGigabyte();
1628 measureUnit.adoptInstead(MeasureUnit::createKilobit(status));
1629 measureUnitValue = MeasureUnit::getKilobit();
1630 measureUnit.adoptInstead(MeasureUnit::createKilobyte(status));
1631 measureUnitValue = MeasureUnit::getKilobyte();
1632 measureUnit.adoptInstead(MeasureUnit::createMegabit(status));
1633 measureUnitValue = MeasureUnit::getMegabit();
1634 measureUnit.adoptInstead(MeasureUnit::createMegabyte(status));
1635 measureUnitValue = MeasureUnit::getMegabyte();
1636 measureUnit.adoptInstead(MeasureUnit::createPetabyte(status));
1637 measureUnitValue = MeasureUnit::getPetabyte();
1638 measureUnit.adoptInstead(MeasureUnit::createTerabit(status));
1639 measureUnitValue = MeasureUnit::getTerabit();
1640 measureUnit.adoptInstead(MeasureUnit::createTerabyte(status));
1641 measureUnitValue = MeasureUnit::getTerabyte();
1642 measureUnit.adoptInstead(MeasureUnit::createCentury(status));
1643 measureUnitValue = MeasureUnit::getCentury();
1644 measureUnit.adoptInstead(MeasureUnit::createDay(status));
1645 measureUnitValue = MeasureUnit::getDay();
1646 measureUnit.adoptInstead(MeasureUnit::createDayPerson(status));
1647 measureUnitValue = MeasureUnit::getDayPerson();
1648 measureUnit.adoptInstead(MeasureUnit::createDecade(status));
1649 measureUnitValue = MeasureUnit::getDecade();
1650 measureUnit.adoptInstead(MeasureUnit::createHour(status));
1651 measureUnitValue = MeasureUnit::getHour();
1652 measureUnit.adoptInstead(MeasureUnit::createMicrosecond(status));
1653 measureUnitValue = MeasureUnit::getMicrosecond();
1654 measureUnit.adoptInstead(MeasureUnit::createMillisecond(status));
1655 measureUnitValue = MeasureUnit::getMillisecond();
1656 measureUnit.adoptInstead(MeasureUnit::createMinute(status));
1657 measureUnitValue = MeasureUnit::getMinute();
1658 measureUnit.adoptInstead(MeasureUnit::createMonth(status));
1659 measureUnitValue = MeasureUnit::getMonth();
1660 measureUnit.adoptInstead(MeasureUnit::createMonthPerson(status));
1661 measureUnitValue = MeasureUnit::getMonthPerson();
1662 measureUnit.adoptInstead(MeasureUnit::createNanosecond(status));
1663 measureUnitValue = MeasureUnit::getNanosecond();
1664 measureUnit.adoptInstead(MeasureUnit::createSecond(status));
1665 measureUnitValue = MeasureUnit::getSecond();
1666 measureUnit.adoptInstead(MeasureUnit::createWeek(status));
1667 measureUnitValue = MeasureUnit::getWeek();
1668 measureUnit.adoptInstead(MeasureUnit::createWeekPerson(status));
1669 measureUnitValue = MeasureUnit::getWeekPerson();
1670 measureUnit.adoptInstead(MeasureUnit::createYear(status));
1671 measureUnitValue = MeasureUnit::getYear();
1672 measureUnit.adoptInstead(MeasureUnit::createYearPerson(status));
1673 measureUnitValue = MeasureUnit::getYearPerson();
1674 measureUnit.adoptInstead(MeasureUnit::createAmpere(status));
1675 measureUnitValue = MeasureUnit::getAmpere();
1676 measureUnit.adoptInstead(MeasureUnit::createMilliampere(status));
1677 measureUnitValue = MeasureUnit::getMilliampere();
1678 measureUnit.adoptInstead(MeasureUnit::createOhm(status));
1679 measureUnitValue = MeasureUnit::getOhm();
1680 measureUnit.adoptInstead(MeasureUnit::createVolt(status));
1681 measureUnitValue = MeasureUnit::getVolt();
1682 measureUnit.adoptInstead(MeasureUnit::createBritishThermalUnit(status));
1683 measureUnitValue = MeasureUnit::getBritishThermalUnit();
1684 measureUnit.adoptInstead(MeasureUnit::createCalorie(status));
1685 measureUnitValue = MeasureUnit::getCalorie();
1686 measureUnit.adoptInstead(MeasureUnit::createElectronvolt(status));
1687 measureUnitValue = MeasureUnit::getElectronvolt();
1688 measureUnit.adoptInstead(MeasureUnit::createFoodcalorie(status));
1689 measureUnitValue = MeasureUnit::getFoodcalorie();
1690 measureUnit.adoptInstead(MeasureUnit::createJoule(status));
1691 measureUnitValue = MeasureUnit::getJoule();
1692 measureUnit.adoptInstead(MeasureUnit::createKilocalorie(status));
1693 measureUnitValue = MeasureUnit::getKilocalorie();
1694 measureUnit.adoptInstead(MeasureUnit::createKilojoule(status));
1695 measureUnitValue = MeasureUnit::getKilojoule();
1696 measureUnit.adoptInstead(MeasureUnit::createKilowattHour(status));
1697 measureUnitValue = MeasureUnit::getKilowattHour();
1698 measureUnit.adoptInstead(MeasureUnit::createThermUs(status));
1699 measureUnitValue = MeasureUnit::getThermUs();
1700 measureUnit.adoptInstead(MeasureUnit::createNewton(status));
1701 measureUnitValue = MeasureUnit::getNewton();
1702 measureUnit.adoptInstead(MeasureUnit::createPoundForce(status));
1703 measureUnitValue = MeasureUnit::getPoundForce();
1704 measureUnit.adoptInstead(MeasureUnit::createGigahertz(status));
1705 measureUnitValue = MeasureUnit::getGigahertz();
1706 measureUnit.adoptInstead(MeasureUnit::createHertz(status));
1707 measureUnitValue = MeasureUnit::getHertz();
1708 measureUnit.adoptInstead(MeasureUnit::createKilohertz(status));
1709 measureUnitValue = MeasureUnit::getKilohertz();
1710 measureUnit.adoptInstead(MeasureUnit::createMegahertz(status));
1711 measureUnitValue = MeasureUnit::getMegahertz();
1712 measureUnit.adoptInstead(MeasureUnit::createDotPerCentimeter(status));
1713 measureUnitValue = MeasureUnit::getDotPerCentimeter();
1714 measureUnit.adoptInstead(MeasureUnit::createDotPerInch(status));
1715 measureUnitValue = MeasureUnit::getDotPerInch();
1716 measureUnit.adoptInstead(MeasureUnit::createEm(status));
1717 measureUnitValue = MeasureUnit::getEm();
1718 measureUnit.adoptInstead(MeasureUnit::createMegapixel(status));
1719 measureUnitValue = MeasureUnit::getMegapixel();
1720 measureUnit.adoptInstead(MeasureUnit::createPixel(status));
1721 measureUnitValue = MeasureUnit::getPixel();
1722 measureUnit.adoptInstead(MeasureUnit::createPixelPerCentimeter(status));
1723 measureUnitValue = MeasureUnit::getPixelPerCentimeter();
1724 measureUnit.adoptInstead(MeasureUnit::createPixelPerInch(status));
1725 measureUnitValue = MeasureUnit::getPixelPerInch();
1726 measureUnit.adoptInstead(MeasureUnit::createAstronomicalUnit(status));
1727 measureUnitValue = MeasureUnit::getAstronomicalUnit();
1728 measureUnit.adoptInstead(MeasureUnit::createCentimeter(status));
1729 measureUnitValue = MeasureUnit::getCentimeter();
1730 measureUnit.adoptInstead(MeasureUnit::createDecimeter(status));
1731 measureUnitValue = MeasureUnit::getDecimeter();
1732 measureUnit.adoptInstead(MeasureUnit::createFathom(status));
1733 measureUnitValue = MeasureUnit::getFathom();
1734 measureUnit.adoptInstead(MeasureUnit::createFoot(status));
1735 measureUnitValue = MeasureUnit::getFoot();
1736 measureUnit.adoptInstead(MeasureUnit::createFurlong(status));
1737 measureUnitValue = MeasureUnit::getFurlong();
1738 measureUnit.adoptInstead(MeasureUnit::createInch(status));
1739 measureUnitValue = MeasureUnit::getInch();
1740 measureUnit.adoptInstead(MeasureUnit::createKilometer(status));
1741 measureUnitValue = MeasureUnit::getKilometer();
1742 measureUnit.adoptInstead(MeasureUnit::createLightYear(status));
1743 measureUnitValue = MeasureUnit::getLightYear();
1744 measureUnit.adoptInstead(MeasureUnit::createMeter(status));
1745 measureUnitValue = MeasureUnit::getMeter();
1746 measureUnit.adoptInstead(MeasureUnit::createMicrometer(status));
1747 measureUnitValue = MeasureUnit::getMicrometer();
1748 measureUnit.adoptInstead(MeasureUnit::createMile(status));
1749 measureUnitValue = MeasureUnit::getMile();
1750 measureUnit.adoptInstead(MeasureUnit::createMileScandinavian(status));
1751 measureUnitValue = MeasureUnit::getMileScandinavian();
1752 measureUnit.adoptInstead(MeasureUnit::createMillimeter(status));
1753 measureUnitValue = MeasureUnit::getMillimeter();
1754 measureUnit.adoptInstead(MeasureUnit::createNanometer(status));
1755 measureUnitValue = MeasureUnit::getNanometer();
1756 measureUnit.adoptInstead(MeasureUnit::createNauticalMile(status));
1757 measureUnitValue = MeasureUnit::getNauticalMile();
1758 measureUnit.adoptInstead(MeasureUnit::createParsec(status));
1759 measureUnitValue = MeasureUnit::getParsec();
1760 measureUnit.adoptInstead(MeasureUnit::createPicometer(status));
1761 measureUnitValue = MeasureUnit::getPicometer();
1762 measureUnit.adoptInstead(MeasureUnit::createPoint(status));
1763 measureUnitValue = MeasureUnit::getPoint();
1764 measureUnit.adoptInstead(MeasureUnit::createSolarRadius(status));
1765 measureUnitValue = MeasureUnit::getSolarRadius();
1766 measureUnit.adoptInstead(MeasureUnit::createYard(status));
1767 measureUnitValue = MeasureUnit::getYard();
1768 measureUnit.adoptInstead(MeasureUnit::createLux(status));
1769 measureUnitValue = MeasureUnit::getLux();
1770 measureUnit.adoptInstead(MeasureUnit::createSolarLuminosity(status));
1771 measureUnitValue = MeasureUnit::getSolarLuminosity();
1772 measureUnit.adoptInstead(MeasureUnit::createCarat(status));
1773 measureUnitValue = MeasureUnit::getCarat();
1774 measureUnit.adoptInstead(MeasureUnit::createDalton(status));
1775 measureUnitValue = MeasureUnit::getDalton();
1776 measureUnit.adoptInstead(MeasureUnit::createEarthMass(status));
1777 measureUnitValue = MeasureUnit::getEarthMass();
1778 measureUnit.adoptInstead(MeasureUnit::createGram(status));
1779 measureUnitValue = MeasureUnit::getGram();
1780 measureUnit.adoptInstead(MeasureUnit::createKilogram(status));
1781 measureUnitValue = MeasureUnit::getKilogram();
1782 measureUnit.adoptInstead(MeasureUnit::createMetricTon(status));
1783 measureUnitValue = MeasureUnit::getMetricTon();
1784 measureUnit.adoptInstead(MeasureUnit::createMicrogram(status));
1785 measureUnitValue = MeasureUnit::getMicrogram();
1786 measureUnit.adoptInstead(MeasureUnit::createMilligram(status));
1787 measureUnitValue = MeasureUnit::getMilligram();
1788 measureUnit.adoptInstead(MeasureUnit::createOunce(status));
1789 measureUnitValue = MeasureUnit::getOunce();
1790 measureUnit.adoptInstead(MeasureUnit::createOunceTroy(status));
1791 measureUnitValue = MeasureUnit::getOunceTroy();
1792 measureUnit.adoptInstead(MeasureUnit::createPound(status));
1793 measureUnitValue = MeasureUnit::getPound();
1794 measureUnit.adoptInstead(MeasureUnit::createSolarMass(status));
1795 measureUnitValue = MeasureUnit::getSolarMass();
1796 measureUnit.adoptInstead(MeasureUnit::createStone(status));
1797 measureUnitValue = MeasureUnit::getStone();
1798 measureUnit.adoptInstead(MeasureUnit::createTon(status));
1799 measureUnitValue = MeasureUnit::getTon();
1800 measureUnit.adoptInstead(MeasureUnit::createGigawatt(status));
1801 measureUnitValue = MeasureUnit::getGigawatt();
1802 measureUnit.adoptInstead(MeasureUnit::createHorsepower(status));
1803 measureUnitValue = MeasureUnit::getHorsepower();
1804 measureUnit.adoptInstead(MeasureUnit::createKilowatt(status));
1805 measureUnitValue = MeasureUnit::getKilowatt();
1806 measureUnit.adoptInstead(MeasureUnit::createMegawatt(status));
1807 measureUnitValue = MeasureUnit::getMegawatt();
1808 measureUnit.adoptInstead(MeasureUnit::createMilliwatt(status));
1809 measureUnitValue = MeasureUnit::getMilliwatt();
1810 measureUnit.adoptInstead(MeasureUnit::createWatt(status));
1811 measureUnitValue = MeasureUnit::getWatt();
1812 measureUnit.adoptInstead(MeasureUnit::createAtmosphere(status));
1813 measureUnitValue = MeasureUnit::getAtmosphere();
1814 measureUnit.adoptInstead(MeasureUnit::createBar(status));
1815 measureUnitValue = MeasureUnit::getBar();
1816 measureUnit.adoptInstead(MeasureUnit::createHectopascal(status));
1817 measureUnitValue = MeasureUnit::getHectopascal();
1818 measureUnit.adoptInstead(MeasureUnit::createInchHg(status));
1819 measureUnitValue = MeasureUnit::getInchHg();
1820 measureUnit.adoptInstead(MeasureUnit::createKilopascal(status));
1821 measureUnitValue = MeasureUnit::getKilopascal();
1822 measureUnit.adoptInstead(MeasureUnit::createMegapascal(status));
1823 measureUnitValue = MeasureUnit::getMegapascal();
1824 measureUnit.adoptInstead(MeasureUnit::createMillibar(status));
1825 measureUnitValue = MeasureUnit::getMillibar();
1826 measureUnit.adoptInstead(MeasureUnit::createMillimeterOfMercury(status));
1827 measureUnitValue = MeasureUnit::getMillimeterOfMercury();
1828 measureUnit.adoptInstead(MeasureUnit::createPascal(status));
1829 measureUnitValue = MeasureUnit::getPascal();
1830 measureUnit.adoptInstead(MeasureUnit::createPoundPerSquareInch(status));
1831 measureUnitValue = MeasureUnit::getPoundPerSquareInch();
1832 measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status));
1833 measureUnitValue = MeasureUnit::getKilometerPerHour();
1834 measureUnit.adoptInstead(MeasureUnit::createKnot(status));
1835 measureUnitValue = MeasureUnit::getKnot();
1836 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status));
1837 measureUnitValue = MeasureUnit::getMeterPerSecond();
1838 measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status));
1839 measureUnitValue = MeasureUnit::getMilePerHour();
1840 measureUnit.adoptInstead(MeasureUnit::createCelsius(status));
1841 measureUnitValue = MeasureUnit::getCelsius();
1842 measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status));
1843 measureUnitValue = MeasureUnit::getFahrenheit();
1844 measureUnit.adoptInstead(MeasureUnit::createGenericTemperature(status));
1845 measureUnitValue = MeasureUnit::getGenericTemperature();
1846 measureUnit.adoptInstead(MeasureUnit::createKelvin(status));
1847 measureUnitValue = MeasureUnit::getKelvin();
1848 measureUnit.adoptInstead(MeasureUnit::createNewtonMeter(status));
1849 measureUnitValue = MeasureUnit::getNewtonMeter();
1850 measureUnit.adoptInstead(MeasureUnit::createPoundFoot(status));
1851 measureUnitValue = MeasureUnit::getPoundFoot();
1852 measureUnit.adoptInstead(MeasureUnit::createAcreFoot(status));
1853 measureUnitValue = MeasureUnit::getAcreFoot();
1854 measureUnit.adoptInstead(MeasureUnit::createBarrel(status));
1855 measureUnitValue = MeasureUnit::getBarrel();
1856 measureUnit.adoptInstead(MeasureUnit::createBushel(status));
1857 measureUnitValue = MeasureUnit::getBushel();
1858 measureUnit.adoptInstead(MeasureUnit::createCentiliter(status));
1859 measureUnitValue = MeasureUnit::getCentiliter();
1860 measureUnit.adoptInstead(MeasureUnit::createCubicCentimeter(status));
1861 measureUnitValue = MeasureUnit::getCubicCentimeter();
1862 measureUnit.adoptInstead(MeasureUnit::createCubicFoot(status));
1863 measureUnitValue = MeasureUnit::getCubicFoot();
1864 measureUnit.adoptInstead(MeasureUnit::createCubicInch(status));
1865 measureUnitValue = MeasureUnit::getCubicInch();
1866 measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status));
1867 measureUnitValue = MeasureUnit::getCubicKilometer();
1868 measureUnit.adoptInstead(MeasureUnit::createCubicMeter(status));
1869 measureUnitValue = MeasureUnit::getCubicMeter();
1870 measureUnit.adoptInstead(MeasureUnit::createCubicMile(status));
1871 measureUnitValue = MeasureUnit::getCubicMile();
1872 measureUnit.adoptInstead(MeasureUnit::createCubicYard(status));
1873 measureUnitValue = MeasureUnit::getCubicYard();
1874 measureUnit.adoptInstead(MeasureUnit::createCup(status));
1875 measureUnitValue = MeasureUnit::getCup();
1876 measureUnit.adoptInstead(MeasureUnit::createCupMetric(status));
1877 measureUnitValue = MeasureUnit::getCupMetric();
1878 measureUnit.adoptInstead(MeasureUnit::createDeciliter(status));
1879 measureUnitValue = MeasureUnit::getDeciliter();
1880 measureUnit.adoptInstead(MeasureUnit::createFluidOunce(status));
1881 measureUnitValue = MeasureUnit::getFluidOunce();
1882 measureUnit.adoptInstead(MeasureUnit::createFluidOunceImperial(status));
1883 measureUnitValue = MeasureUnit::getFluidOunceImperial();
1884 measureUnit.adoptInstead(MeasureUnit::createGallon(status));
1885 measureUnitValue = MeasureUnit::getGallon();
1886 measureUnit.adoptInstead(MeasureUnit::createGallonImperial(status));
1887 measureUnitValue = MeasureUnit::getGallonImperial();
1888 measureUnit.adoptInstead(MeasureUnit::createHectoliter(status));
1889 measureUnitValue = MeasureUnit::getHectoliter();
1890 measureUnit.adoptInstead(MeasureUnit::createLiter(status));
1891 measureUnitValue = MeasureUnit::getLiter();
1892 measureUnit.adoptInstead(MeasureUnit::createMegaliter(status));
1893 measureUnitValue = MeasureUnit::getMegaliter();
1894 measureUnit.adoptInstead(MeasureUnit::createMilliliter(status));
1895 measureUnitValue = MeasureUnit::getMilliliter();
1896 measureUnit.adoptInstead(MeasureUnit::createPint(status));
1897 measureUnitValue = MeasureUnit::getPint();
1898 measureUnit.adoptInstead(MeasureUnit::createPintMetric(status));
1899 measureUnitValue = MeasureUnit::getPintMetric();
1900 measureUnit.adoptInstead(MeasureUnit::createQuart(status));
1901 measureUnitValue = MeasureUnit::getQuart();
1902 measureUnit.adoptInstead(MeasureUnit::createTablespoon(status));
1903 measureUnitValue = MeasureUnit::getTablespoon();
1904 measureUnit.adoptInstead(MeasureUnit::createTeaspoon(status));
1905 measureUnitValue = MeasureUnit::getTeaspoon();
1906 assertSuccess("", status);
1907 }
1908
TestBasic()1909 void MeasureFormatTest::TestBasic() {
1910 UErrorCode status = U_ZERO_ERROR;
1911 MeasureUnit *ptr1 = MeasureUnit::createArcMinute(status);
1912 MeasureUnit *ptr2 = MeasureUnit::createArcMinute(status);
1913 if (!(*ptr1 == *ptr2)) {
1914 errln("Expect == to work.");
1915 }
1916 if (*ptr1 != *ptr2) {
1917 errln("Expect != to work.");
1918 }
1919 MeasureUnit *ptr3 = MeasureUnit::createMeter(status);
1920 if (*ptr1 == *ptr3) {
1921 errln("Expect == to work.");
1922 }
1923 if (!(*ptr1 != *ptr3)) {
1924 errln("Expect != to work.");
1925 }
1926 MeasureUnit *ptr4 = ptr1->clone();
1927 if (*ptr1 != *ptr4) {
1928 errln("Expect clone to work.");
1929 }
1930 MeasureUnit stack;
1931 stack = *ptr1;
1932 if (*ptr1 != stack) {
1933 errln("Expect assignment to work.");
1934 }
1935
1936 delete ptr1;
1937 delete ptr2;
1938 delete ptr3;
1939 delete ptr4;
1940 }
1941
TestGetAvailable()1942 void MeasureFormatTest::TestGetAvailable() {
1943 MeasureUnit *units = NULL;
1944 UErrorCode status = U_ZERO_ERROR;
1945 int32_t totalCount = MeasureUnit::getAvailable(units, 0, status);
1946 while (status == U_BUFFER_OVERFLOW_ERROR) {
1947 status = U_ZERO_ERROR;
1948 delete [] units;
1949 units = new MeasureUnit[totalCount];
1950 totalCount = MeasureUnit::getAvailable(units, totalCount, status);
1951 }
1952 if (U_FAILURE(status)) {
1953 dataerrln("Failure creating format object - %s", u_errorName(status));
1954 delete [] units;
1955 return;
1956 }
1957 if (totalCount < 200) {
1958 errln("Expect at least 200 measure units including currencies.");
1959 }
1960 delete [] units;
1961 StringEnumeration *types = MeasureUnit::getAvailableTypes(status);
1962 if (U_FAILURE(status)) {
1963 dataerrln("Failure getting types - %s", u_errorName(status));
1964 delete types;
1965 return;
1966 }
1967 if (types->count(status) < 10) {
1968 errln("Expect at least 10 distinct unit types.");
1969 }
1970 units = NULL;
1971 int32_t unitCapacity = 0;
1972 int32_t unitCountSum = 0;
1973 for (
1974 const char* type = types->next(NULL, status);
1975 type != NULL;
1976 type = types->next(NULL, status)) {
1977 int32_t unitCount = MeasureUnit::getAvailable(type, units, unitCapacity, status);
1978 while (status == U_BUFFER_OVERFLOW_ERROR) {
1979 status = U_ZERO_ERROR;
1980 delete [] units;
1981 units = new MeasureUnit[unitCount];
1982 unitCapacity = unitCount;
1983 unitCount = MeasureUnit::getAvailable(type, units, unitCapacity, status);
1984 }
1985 if (U_FAILURE(status)) {
1986 dataerrln("Failure getting units - %s", u_errorName(status));
1987 delete [] units;
1988 delete types;
1989 return;
1990 }
1991 if (unitCount < 1) {
1992 errln("Expect at least one unit count per type.");
1993 }
1994 unitCountSum += unitCount;
1995 }
1996 if (unitCountSum != totalCount) {
1997 errln("Expected total unit count to equal sum of unit counts by type.");
1998 }
1999 delete [] units;
2000 delete types;
2001 }
2002
TestExamplesInDocs()2003 void MeasureFormatTest::TestExamplesInDocs() {
2004 UErrorCode status = U_ZERO_ERROR;
2005 MeasureFormat fmtFr(Locale::getFrench(), UMEASFMT_WIDTH_SHORT, status);
2006 MeasureFormat fmtFrFull(
2007 Locale::getFrench(), UMEASFMT_WIDTH_WIDE, status);
2008 MeasureFormat fmtFrNarrow(
2009 Locale::getFrench(), UMEASFMT_WIDTH_NARROW, status);
2010 MeasureFormat fmtEn(Locale::getUS(), UMEASFMT_WIDTH_WIDE, status);
2011 if (!assertSuccess("Error creating formatters", status)) {
2012 return;
2013 }
2014 Measure measureC((double)23, MeasureUnit::createCelsius(status), status);
2015 Measure measureF((double)70, MeasureUnit::createFahrenheit(status), status);
2016 Measure feetAndInches[] = {
2017 Measure((double)70, MeasureUnit::createFoot(status), status),
2018 Measure((double)5.3, MeasureUnit::createInch(status), status)};
2019 Measure footAndInch[] = {
2020 Measure((double)1, MeasureUnit::createFoot(status), status),
2021 Measure((double)1, MeasureUnit::createInch(status), status)};
2022 Measure inchAndFeet[] = {
2023 Measure((double)1, MeasureUnit::createInch(status), status),
2024 Measure((double)2, MeasureUnit::createFoot(status), status)};
2025 if (!assertSuccess("Error creating measurements.", status)) {
2026 return;
2027 }
2028 verifyFormat(
2029 "Celsius",
2030 fmtFr,
2031 &measureC,
2032 1,
2033 "23\\u202F\\u00B0C");
2034 verifyFormatWithPrefix(
2035 "Celsius",
2036 fmtFr,
2037 "Prefix: ",
2038 &measureC,
2039 1,
2040 "Prefix: 23\\u202F\\u00B0C");
2041 verifyFormat(
2042 "Fahrenheit",
2043 fmtFr,
2044 &measureF,
2045 1,
2046 "70\\u202F\\u00B0F");
2047 verifyFormat(
2048 "Feet and inches",
2049 fmtFrFull,
2050 feetAndInches,
2051 UPRV_LENGTHOF(feetAndInches),
2052 "70 pieds et 5,3\\u00A0pouces");
2053 verifyFormatWithPrefix(
2054 "Feet and inches",
2055 fmtFrFull,
2056 "Prefix: ",
2057 feetAndInches,
2058 UPRV_LENGTHOF(feetAndInches),
2059 "Prefix: 70 pieds et 5,3\\u00A0pouces");
2060 verifyFormat(
2061 "Foot and inch",
2062 fmtFrFull,
2063 footAndInch,
2064 UPRV_LENGTHOF(footAndInch),
2065 "1\\u00A0pied et 1\\u00A0pouce");
2066 verifyFormat(
2067 "Foot and inch narrow",
2068 fmtFrNarrow,
2069 footAndInch,
2070 UPRV_LENGTHOF(footAndInch),
2071 "1\\u2032 1\\u2033");
2072 verifyFormat(
2073 "Inch and feet",
2074 fmtEn,
2075 inchAndFeet,
2076 UPRV_LENGTHOF(inchAndFeet),
2077 "1 inch, 2 feet");
2078 }
2079
TestFormatPeriodEn()2080 void MeasureFormatTest::TestFormatPeriodEn() {
2081 UErrorCode status = U_ZERO_ERROR;
2082 Measure t_1y[] = {Measure((double)1, MeasureUnit::createYear(status), status)};
2083 Measure t_5M[] = {Measure((double)5, MeasureUnit::createMonth(status), status)};
2084 Measure t_4d[] = {Measure((double)4, MeasureUnit::createDay(status), status)};
2085 Measure t_2h[] = {Measure((double)2, MeasureUnit::createHour(status), status)};
2086 Measure t_19m[] = {Measure((double)19, MeasureUnit::createMinute(status), status)};
2087 Measure t_1h_23_5s[] = {
2088 Measure((double)1.0, MeasureUnit::createHour(status), status),
2089 Measure((double)23.5, MeasureUnit::createSecond(status), status)
2090 };
2091 Measure t_1h_23_5m[] = {
2092 Measure((double)1.0, MeasureUnit::createHour(status), status),
2093 Measure((double)23.5, MeasureUnit::createMinute(status), status)
2094 };
2095 Measure t_1h_0m_23s[] = {
2096 Measure(
2097 (double)1.0,
2098 TimeUnit::createInstance(
2099 TimeUnit::UTIMEUNIT_HOUR, status),
2100 status),
2101 Measure(
2102 (double)0.0,
2103 TimeUnit::createInstance(
2104 TimeUnit::UTIMEUNIT_MINUTE, status),
2105 status),
2106 Measure(
2107 (double)23.0,
2108 TimeUnit::createInstance(
2109 TimeUnit::UTIMEUNIT_SECOND, status),
2110 status)
2111 };
2112 Measure t_2y_5M_3w_4d[] = {
2113 Measure(2.0, MeasureUnit::createYear(status), status),
2114 Measure(5.0, MeasureUnit::createMonth(status), status),
2115 Measure(3.0, MeasureUnit::createWeek(status), status),
2116 Measure(4.0, MeasureUnit::createDay(status), status)
2117 };
2118 Measure t_1m_59_9996s[] = {
2119 Measure(1.0, MeasureUnit::createMinute(status), status),
2120 Measure(59.9996, MeasureUnit::createSecond(status), status)
2121 };
2122 Measure t_5h_17m[] = {
2123 Measure(5.0, MeasureUnit::createHour(status), status),
2124 Measure(17.0, MeasureUnit::createMinute(status), status)
2125 };
2126 Measure t_neg5h_17m[] = {
2127 Measure(-5.0, MeasureUnit::createHour(status), status),
2128 Measure(17.0, MeasureUnit::createMinute(status), status)
2129 };
2130 Measure t_19m_28s[] = {
2131 Measure(19.0, MeasureUnit::createMinute(status), status),
2132 Measure(28.0, MeasureUnit::createSecond(status), status)
2133 };
2134 Measure t_0h_0m_9s[] = {
2135 Measure(0.0, MeasureUnit::createHour(status), status),
2136 Measure(0.0, MeasureUnit::createMinute(status), status),
2137 Measure(9.0, MeasureUnit::createSecond(status), status)
2138 };
2139 Measure t_0h_0m_17s[] = {
2140 Measure(0.0, MeasureUnit::createHour(status), status),
2141 Measure(0.0, MeasureUnit::createMinute(status), status),
2142 Measure(17.0, MeasureUnit::createSecond(status), status)
2143 };
2144 Measure t_6h_56_92m[] = {
2145 Measure(6.0, MeasureUnit::createHour(status), status),
2146 Measure(56.92, MeasureUnit::createMinute(status), status)
2147 };
2148 Measure t_3h_4s_5m[] = {
2149 Measure(3.0, MeasureUnit::createHour(status), status),
2150 Measure(4.0, MeasureUnit::createSecond(status), status),
2151 Measure(5.0, MeasureUnit::createMinute(status), status)
2152 };
2153 Measure t_6_7h_56_92m[] = {
2154 Measure(6.7, MeasureUnit::createHour(status), status),
2155 Measure(56.92, MeasureUnit::createMinute(status), status)
2156 };
2157
2158 Measure t_3h_5h[] = {
2159 Measure(3.0, MeasureUnit::createHour(status), status),
2160 Measure(5.0, MeasureUnit::createHour(status), status)
2161 };
2162
2163 if (!assertSuccess("Error creating Measure objects", status)) {
2164 return;
2165 }
2166
2167 ExpectedResult fullData[] = {
2168 {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "1 minute, 59.9996 seconds"},
2169 {t_19m, UPRV_LENGTHOF(t_19m), "19 minutes"},
2170 {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "1 hour, 23.5 seconds"},
2171 {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "1 hour, 23.5 minutes"},
2172 {t_1h_0m_23s, UPRV_LENGTHOF(t_1h_0m_23s), "1 hour, 0 minutes, 23 seconds"},
2173 {t_2y_5M_3w_4d, UPRV_LENGTHOF(t_2y_5M_3w_4d), "2 years, 5 months, 3 weeks, 4 days"}};
2174
2175 ExpectedResult abbrevData[] = {
2176 {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "1 min, 59.9996 sec"},
2177 {t_19m, UPRV_LENGTHOF(t_19m), "19 min"},
2178 {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "1 hr, 23.5 sec"},
2179 {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "1 hr, 23.5 min"},
2180 {t_1h_0m_23s, UPRV_LENGTHOF(t_1h_0m_23s), "1 hr, 0 min, 23 sec"},
2181 {t_2y_5M_3w_4d, UPRV_LENGTHOF(t_2y_5M_3w_4d), "2 yrs, 5 mths, 3 wks, 4 days"}};
2182
2183 ExpectedResult narrowData[] = {
2184 {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "1m 59.9996s"},
2185 {t_19m, UPRV_LENGTHOF(t_19m), "19m"},
2186 {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "1h 23.5s"},
2187 {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "1h 23.5m"},
2188 {t_1h_0m_23s, UPRV_LENGTHOF(t_1h_0m_23s), "1h 0m 23s"},
2189 {t_2y_5M_3w_4d, UPRV_LENGTHOF(t_2y_5M_3w_4d), "2y 5m 3w 4d"}};
2190
2191 ExpectedResult numericData[] = {
2192 {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "1:59.9996"},
2193 {t_19m, UPRV_LENGTHOF(t_19m), "19m"},
2194 {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "1:00:23.5"},
2195 {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "1:23.5"},
2196 {t_1h_0m_23s, UPRV_LENGTHOF(t_1h_0m_23s), "1:00:23"},
2197 {t_5h_17m, UPRV_LENGTHOF(t_5h_17m), "5:17"},
2198 {t_neg5h_17m, UPRV_LENGTHOF(t_neg5h_17m), "-5h 17m"},
2199 {t_19m_28s, UPRV_LENGTHOF(t_19m_28s), "19:28"},
2200 {t_2y_5M_3w_4d, UPRV_LENGTHOF(t_2y_5M_3w_4d), "2y 5m 3w 4d"},
2201 {t_0h_0m_9s, UPRV_LENGTHOF(t_0h_0m_9s), "0:00:09"},
2202 {t_6h_56_92m, UPRV_LENGTHOF(t_6h_56_92m), "6:56.92"},
2203 {t_6_7h_56_92m, UPRV_LENGTHOF(t_6_7h_56_92m), "6:56.92"},
2204 {t_3h_4s_5m, UPRV_LENGTHOF(t_3h_4s_5m), "3h 4s 5m"},
2205 {t_3h_5h, UPRV_LENGTHOF(t_3h_5h), "3h 5h"}};
2206
2207 ExpectedResult fullDataDe[] = {
2208 {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "1 Minute, 59,9996 Sekunden"},
2209 {t_19m, UPRV_LENGTHOF(t_19m), "19 Minuten"},
2210 {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "1 Stunde, 23,5 Sekunden"},
2211 {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "1 Stunde, 23,5 Minuten"},
2212 {t_1h_0m_23s, UPRV_LENGTHOF(t_1h_0m_23s), "1 Stunde, 0 Minuten und 23 Sekunden"},
2213 {t_2y_5M_3w_4d, UPRV_LENGTHOF(t_2y_5M_3w_4d), "2 Jahre, 5 Monate, 3 Wochen und 4 Tage"}};
2214
2215 ExpectedResult numericDataDe[] = {
2216 {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "1:59,9996"},
2217 {t_19m, UPRV_LENGTHOF(t_19m), "19 Min."},
2218 {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "1:00:23,5"},
2219 {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "1:23,5"},
2220 {t_1h_0m_23s, UPRV_LENGTHOF(t_1h_0m_23s), "1:00:23"},
2221 {t_5h_17m, UPRV_LENGTHOF(t_5h_17m), "5:17"},
2222 {t_19m_28s, UPRV_LENGTHOF(t_19m_28s), "19:28"},
2223 {t_2y_5M_3w_4d, UPRV_LENGTHOF(t_2y_5M_3w_4d), "2 J, 5 M, 3 W und 4 T"},
2224 {t_0h_0m_17s, UPRV_LENGTHOF(t_0h_0m_17s), "0:00:17"},
2225 {t_6h_56_92m, UPRV_LENGTHOF(t_6h_56_92m), "6:56,92"},
2226 {t_3h_5h, UPRV_LENGTHOF(t_3h_5h), "3 Std., 5 Std."}};
2227
2228 ExpectedResult numericDataBn[] = {
2229 {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "\\u09E7:\\u09EB\\u09EF.\\u09EF\\u09EF\\u09EF\\u09EC"},
2230 {t_19m, UPRV_LENGTHOF(t_19m), "\\u09E7\\u09EF \\u09AE\\u09BF\\u0983"},
2231 {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "\\u09E7:\\u09E6\\u09E6:\\u09E8\\u09E9.\\u09EB"},
2232 {t_1h_0m_23s, UPRV_LENGTHOF(t_1h_0m_23s), "\\u09E7:\\u09E6\\u09E6:\\u09E8\\u09E9"},
2233 {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "\\u09E7:\\u09E8\\u09E9.\\u09EB"},
2234 {t_5h_17m, UPRV_LENGTHOF(t_5h_17m), "\\u09EB:\\u09E7\\u09ED"},
2235 {t_19m_28s, UPRV_LENGTHOF(t_19m_28s), "\\u09E7\\u09EF:\\u09E8\\u09EE"},
2236 {t_2y_5M_3w_4d, UPRV_LENGTHOF(t_2y_5M_3w_4d), "\\u09E8 \\u09AC\\u099B\\u09B0, \\u09EB \\u09AE\\u09BE\\u09B8, \\u09E9 \\u09B8\\u09AA\\u09CD\\u09A4\\u09BE\\u09B9, \\u09EA \\u09A6\\u09BF\\u09A8"},
2237 {t_0h_0m_17s, UPRV_LENGTHOF(t_0h_0m_17s), "\\u09E6:\\u09E6\\u09E6:\\u09E7\\u09ED"},
2238 {t_6h_56_92m, UPRV_LENGTHOF(t_6h_56_92m), "\\u09EC:\\u09EB\\u09EC.\\u09EF\\u09E8"},
2239 {t_3h_5h, UPRV_LENGTHOF(t_3h_5h), "\\u09E9 \\u0998\\u0983, \\u09EB \\u0998\\u0983"}};
2240
2241 ExpectedResult numericDataBnLatn[] = {
2242 {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "1:59.9996"},
2243 {t_19m, UPRV_LENGTHOF(t_19m), "19 \\u09AE\\u09BF\\u0983"},
2244 {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "1:00:23.5"},
2245 {t_1h_0m_23s, UPRV_LENGTHOF(t_1h_0m_23s), "1:00:23"},
2246 {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "1:23.5"},
2247 {t_5h_17m, UPRV_LENGTHOF(t_5h_17m), "5:17"},
2248 {t_19m_28s, UPRV_LENGTHOF(t_19m_28s), "19:28"},
2249 {t_2y_5M_3w_4d, UPRV_LENGTHOF(t_2y_5M_3w_4d), "2 \\u09AC\\u099B\\u09B0, 5 \\u09AE\\u09BE\\u09B8, 3 \\u09B8\\u09AA\\u09CD\\u09A4\\u09BE\\u09B9, 4 \\u09A6\\u09BF\\u09A8"},
2250 {t_0h_0m_17s, UPRV_LENGTHOF(t_0h_0m_17s), "0:00:17"},
2251 {t_6h_56_92m, UPRV_LENGTHOF(t_6h_56_92m), "6:56.92"},
2252 {t_3h_5h, UPRV_LENGTHOF(t_3h_5h), "3 \\u0998\\u0983, 5 \\u0998\\u0983"}};
2253
2254 ExpectedResult fullDataSpellout[] = {
2255 {t_1y, UPRV_LENGTHOF(t_1y), "one year"},
2256 {t_5M, UPRV_LENGTHOF(t_5M), "five months"},
2257 {t_4d, UPRV_LENGTHOF(t_4d), "four days"},
2258 {t_2h, UPRV_LENGTHOF(t_2h), "two hours"},
2259 {t_19m, UPRV_LENGTHOF(t_19m), "nineteen minutes"}};
2260
2261 ExpectedResult fullDataSpelloutFr[] = {
2262 {t_1y, UPRV_LENGTHOF(t_1y), "un\\u00A0an"},
2263 {t_5M, UPRV_LENGTHOF(t_5M), "cinq\\u00A0mois"},
2264 {t_4d, UPRV_LENGTHOF(t_4d), "quatre\\u00A0jours"},
2265 {t_2h, UPRV_LENGTHOF(t_2h), "deux\\u00A0heures"},
2266 {t_19m, UPRV_LENGTHOF(t_19m), "dix-neuf minutes"}};
2267
2268 Locale en(Locale::getEnglish());
2269 LocalPointer<NumberFormat> nf(NumberFormat::createInstance(en, status));
2270 if (U_FAILURE(status)) {
2271 dataerrln("Error creating number format en object - %s", u_errorName(status));
2272 return;
2273 }
2274 nf->setMaximumFractionDigits(4);
2275 MeasureFormat mf(en, UMEASFMT_WIDTH_WIDE, nf->clone(), status);
2276 if (!assertSuccess("Error creating measure format en WIDE", status)) {
2277 return;
2278 }
2279 verifyFormat("en WIDE", mf, fullData, UPRV_LENGTHOF(fullData));
2280
2281 // exercise copy constructor
2282 {
2283 MeasureFormat mf2(mf);
2284 verifyFormat("en WIDE copy", mf2, fullData, UPRV_LENGTHOF(fullData));
2285 }
2286 // exercise clone
2287 {
2288 MeasureFormat *mf3 = mf.clone();
2289 verifyFormat("en WIDE copy", *mf3, fullData, UPRV_LENGTHOF(fullData));
2290 delete mf3;
2291 }
2292 mf = MeasureFormat(en, UMEASFMT_WIDTH_SHORT, nf->clone(), status);
2293 if (!assertSuccess("Error creating measure format en SHORT", status)) {
2294 return;
2295 }
2296 verifyFormat("en SHORT", mf, abbrevData, UPRV_LENGTHOF(abbrevData));
2297 mf = MeasureFormat(en, UMEASFMT_WIDTH_NARROW, nf->clone(), status);
2298 if (!assertSuccess("Error creating measure format en NARROW", status)) {
2299 return;
2300 }
2301 verifyFormat("en NARROW", mf, narrowData, UPRV_LENGTHOF(narrowData));
2302 mf = MeasureFormat(en, UMEASFMT_WIDTH_NUMERIC, nf->clone(), status);
2303 if (!assertSuccess("Error creating measure format en NUMERIC", status)) {
2304 return;
2305 }
2306 verifyFormat("en NUMERIC", mf, numericData, UPRV_LENGTHOF(numericData));
2307
2308 Locale de(Locale::getGerman());
2309 nf.adoptInstead(NumberFormat::createInstance(de, status));
2310 if (!assertSuccess("Error creating number format de object", status)) {
2311 return;
2312 }
2313 nf->setMaximumFractionDigits(4);
2314 mf = MeasureFormat(de, UMEASFMT_WIDTH_WIDE, nf->clone(), status);
2315 if (!assertSuccess("Error creating measure format de WIDE", status)) {
2316 return;
2317 }
2318 verifyFormat("de WIDE", mf, fullDataDe, UPRV_LENGTHOF(fullDataDe));
2319 mf = MeasureFormat(de, UMEASFMT_WIDTH_NUMERIC, nf->clone(), status);
2320 if (!assertSuccess("Error creating measure format de NUMERIC", status)) {
2321 return;
2322 }
2323 verifyFormat("de NUMERIC", mf, numericDataDe, UPRV_LENGTHOF(numericDataDe));
2324
2325 Locale bengali("bn");
2326 nf.adoptInstead(NumberFormat::createInstance(bengali, status));
2327 if (!assertSuccess("Error creating number format de object", status)) {
2328 return;
2329 }
2330 nf->setMaximumFractionDigits(4);
2331 mf = MeasureFormat(bengali, UMEASFMT_WIDTH_NUMERIC, nf->clone(), status);
2332 if (!assertSuccess("Error creating measure format bn NUMERIC", status)) {
2333 return;
2334 }
2335 verifyFormat("bn NUMERIC", mf, numericDataBn, UPRV_LENGTHOF(numericDataBn));
2336
2337 Locale bengaliLatin("bn-u-nu-latn");
2338 nf.adoptInstead(NumberFormat::createInstance(bengaliLatin, status));
2339 if (!assertSuccess("Error creating number format de object", status)) {
2340 return;
2341 }
2342 nf->setMaximumFractionDigits(4);
2343 mf = MeasureFormat(bengaliLatin, UMEASFMT_WIDTH_NUMERIC, nf->clone(), status);
2344 if (!assertSuccess("Error creating measure format bn-u-nu-latn NUMERIC", status)) {
2345 return;
2346 }
2347 verifyFormat("bn-u-nu-latn NUMERIC", mf, numericDataBnLatn, UPRV_LENGTHOF(numericDataBnLatn));
2348
2349 status = U_ZERO_ERROR;
2350 LocalPointer<RuleBasedNumberFormat> rbnf(new RuleBasedNumberFormat(URBNF_SPELLOUT, en, status));
2351 if (U_FAILURE(status)) {
2352 dataerrln("Error creating rbnf en object - %s", u_errorName(status));
2353 return;
2354 }
2355 mf = MeasureFormat(en, UMEASFMT_WIDTH_WIDE, rbnf->clone(), status);
2356 if (!assertSuccess("Error creating measure format en WIDE with rbnf", status)) {
2357 return;
2358 }
2359 verifyFormat("en WIDE rbnf", mf, fullDataSpellout, UPRV_LENGTHOF(fullDataSpellout));
2360
2361 Locale fr(Locale::getFrench());
2362 LocalPointer<RuleBasedNumberFormat> rbnffr(new RuleBasedNumberFormat(URBNF_SPELLOUT, fr, status));
2363 if (U_FAILURE(status)) {
2364 dataerrln("Error creating rbnf fr object - %s", u_errorName(status));
2365 return;
2366 }
2367 mf = MeasureFormat(fr, UMEASFMT_WIDTH_WIDE, rbnffr->clone(), status);
2368 if (!assertSuccess("Error creating measure format fr WIDE with rbnf", status)) {
2369 return;
2370 }
2371 verifyFormat("fr WIDE rbnf", mf, fullDataSpelloutFr, UPRV_LENGTHOF(fullDataSpellout));
2372 }
2373
Test10219FractionalPlurals()2374 void MeasureFormatTest::Test10219FractionalPlurals() {
2375 Locale en(Locale::getEnglish());
2376 double values[] = {1.588, 1.011};
2377 const char *expected[2][3] = {
2378 {"1 minute", "1.5 minutes", "1.58 minutes"},
2379 {"1 minute", "1.0 minutes", "1.01 minutes"}
2380 };
2381 UErrorCode status = U_ZERO_ERROR;
2382 for (int j = 0; j < UPRV_LENGTHOF(values); j++) {
2383 for (int i = 0; i < UPRV_LENGTHOF(expected[j]); i++) {
2384 DecimalFormat *df =
2385 (DecimalFormat *) NumberFormat::createInstance(en, status);
2386 if (U_FAILURE(status)) {
2387 dataerrln("Error creating Number format - %s", u_errorName(status));
2388 return;
2389 }
2390 df->setRoundingMode(DecimalFormat::kRoundDown);
2391 df->setMinimumFractionDigits(i);
2392 df->setMaximumFractionDigits(i);
2393 MeasureFormat mf(en, UMEASFMT_WIDTH_WIDE, df, status);
2394 if (!assertSuccess("Error creating Measure format", status)) {
2395 return;
2396 }
2397 Measure measure(values[j], MeasureUnit::createMinute(status), status);
2398 if (!assertSuccess("Error creating Measure unit", status)) {
2399 return;
2400 }
2401 verifyFormat("Test10219", mf, &measure, 1, expected[j][i]);
2402 }
2403 }
2404 }
2405
toMeasureUnit(MeasureUnit * adopted)2406 static MeasureUnit toMeasureUnit(MeasureUnit *adopted) {
2407 MeasureUnit result(*adopted);
2408 delete adopted;
2409 return result;
2410 }
2411
TestGreek()2412 void MeasureFormatTest::TestGreek() {
2413 Locale locales[] = {Locale("el_GR"), Locale("el")};
2414 UErrorCode status = U_ZERO_ERROR;
2415 MeasureUnit units[] = {
2416 toMeasureUnit(MeasureUnit::createSecond(status)),
2417 toMeasureUnit(MeasureUnit::createMinute(status)),
2418 toMeasureUnit(MeasureUnit::createHour(status)),
2419 toMeasureUnit(MeasureUnit::createDay(status)),
2420 toMeasureUnit(MeasureUnit::createWeek(status)),
2421 toMeasureUnit(MeasureUnit::createMonth(status)),
2422 toMeasureUnit(MeasureUnit::createYear(status))};
2423 if (!assertSuccess("Error creating Measure units", status)) {
2424 return;
2425 }
2426 UMeasureFormatWidth styles[] = {
2427 UMEASFMT_WIDTH_WIDE,
2428 UMEASFMT_WIDTH_SHORT};
2429 int32_t numbers[] = {1, 7};
2430 const char *expected[] = {
2431 // "el_GR" 1 wide
2432 "1 \\u03B4\\u03B5\\u03C5\\u03C4\\u03B5\\u03C1\\u03CC\\u03BB\\u03B5\\u03C0\\u03C4\\u03BF",
2433 "1 \\u03BB\\u03B5\\u03C0\\u03C4\\u03CC",
2434 "1 \\u03CE\\u03C1\\u03B1",
2435 "1 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B1",
2436 "1 \\u03B5\\u03B2\\u03B4\\u03BF\\u03BC\\u03AC\\u03B4\\u03B1",
2437 "1 \\u03BC\\u03AE\\u03BD\\u03B1\\u03C2",
2438 "1 \\u03AD\\u03C4\\u03BF\\u03C2",
2439 // "el_GR" 1 short
2440 "1 \\u03B4\\u03B5\\u03C5\\u03C4.",
2441 "1 \\u03BB\\u03B5\\u03C0.",
2442 "1 \\u03CE\\u03C1\\u03B1",
2443 "1 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B1",
2444 "1 \\u03B5\\u03B2\\u03B4.",
2445 "1 \\u03BC\\u03AE\\u03BD.",
2446 "1 \\u03AD\\u03C4.", // year (one)
2447 // "el_GR" 7 wide
2448 "7 \\u03B4\\u03B5\\u03C5\\u03C4\\u03B5\\u03C1\\u03CC\\u03BB\\u03B5\\u03C0\\u03C4\\u03B1",
2449 "7 \\u03BB\\u03B5\\u03C0\\u03C4\\u03AC",
2450 "7 \\u03CE\\u03C1\\u03B5\\u03C2",
2451 "7 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B5\\u03C2",
2452 "7 \\u03B5\\u03B2\\u03B4\\u03BF\\u03BC\\u03AC\\u03B4\\u03B5\\u03C2",
2453 "7 \\u03BC\\u03AE\\u03BD\\u03B5\\u03C2",
2454 "7 \\u03AD\\u03C4\\u03B7",
2455 // "el_GR" 7 short
2456 "7 \\u03B4\\u03B5\\u03C5\\u03C4.",
2457 "7 \\u03BB\\u03B5\\u03C0.",
2458 "7 \\u03CE\\u03C1.", // hour (other)
2459 "7 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B5\\u03C2",
2460 "7 \\u03B5\\u03B2\\u03B4.",
2461 "7 \\u03BC\\u03AE\\u03BD.",
2462 "7 \\u03AD\\u03C4.", // year (other)
2463
2464 // "el" 1 wide
2465 "1 \\u03B4\\u03B5\\u03C5\\u03C4\\u03B5\\u03C1\\u03CC\\u03BB\\u03B5\\u03C0\\u03C4\\u03BF",
2466 "1 \\u03BB\\u03B5\\u03C0\\u03C4\\u03CC",
2467 "1 \\u03CE\\u03C1\\u03B1",
2468 "1 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B1",
2469 "1 \\u03B5\\u03B2\\u03B4\\u03BF\\u03BC\\u03AC\\u03B4\\u03B1",
2470 "1 \\u03BC\\u03AE\\u03BD\\u03B1\\u03C2",
2471 "1 \\u03AD\\u03C4\\u03BF\\u03C2",
2472 // "el" 1 short
2473 "1 \\u03B4\\u03B5\\u03C5\\u03C4.",
2474 "1 \\u03BB\\u03B5\\u03C0.",
2475 "1 \\u03CE\\u03C1\\u03B1",
2476 "1 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B1",
2477 "1 \\u03B5\\u03B2\\u03B4.",
2478 "1 \\u03BC\\u03AE\\u03BD.",
2479 "1 \\u03AD\\u03C4.", // year (one)
2480 // "el" 7 wide
2481 "7 \\u03B4\\u03B5\\u03C5\\u03C4\\u03B5\\u03C1\\u03CC\\u03BB\\u03B5\\u03C0\\u03C4\\u03B1",
2482 "7 \\u03BB\\u03B5\\u03C0\\u03C4\\u03AC",
2483 "7 \\u03CE\\u03C1\\u03B5\\u03C2",
2484 "7 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B5\\u03C2",
2485 "7 \\u03B5\\u03B2\\u03B4\\u03BF\\u03BC\\u03AC\\u03B4\\u03B5\\u03C2",
2486 "7 \\u03BC\\u03AE\\u03BD\\u03B5\\u03C2",
2487 "7 \\u03AD\\u03C4\\u03B7",
2488 // "el" 7 short
2489 "7 \\u03B4\\u03B5\\u03C5\\u03C4.",
2490 "7 \\u03BB\\u03B5\\u03C0.",
2491 "7 \\u03CE\\u03C1.", // hour (other)
2492 "7 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B5\\u03C2",
2493 "7 \\u03B5\\u03B2\\u03B4.",
2494 "7 \\u03BC\\u03AE\\u03BD.",
2495 "7 \\u03AD\\u03C4."}; // year (other)
2496
2497 int32_t counter = 0;
2498 for (int32_t locIndex = 0; locIndex < UPRV_LENGTHOF(locales); ++locIndex ) {
2499 for( int32_t numIndex = 0; numIndex < UPRV_LENGTHOF(numbers); ++numIndex ) {
2500 for ( int32_t styleIndex = 0; styleIndex < UPRV_LENGTHOF(styles); ++styleIndex ) {
2501 for ( int32_t unitIndex = 0; unitIndex < UPRV_LENGTHOF(units); ++unitIndex ) {
2502 Measure measure(numbers[numIndex], new MeasureUnit(units[unitIndex]), status);
2503 if (!assertSuccess("Error creating Measure", status)) {
2504 return;
2505 }
2506 MeasureFormat fmt(locales[locIndex], styles[styleIndex], status);
2507 if (!assertSuccess("Error creating Measure format", status)) {
2508 return;
2509 }
2510 verifyFormat("TestGreek", fmt, &measure, 1, expected[counter]);
2511 ++counter;
2512 }
2513 }
2514 }
2515 }
2516 }
2517
TestFormatSingleArg()2518 void MeasureFormatTest::TestFormatSingleArg() {
2519 UErrorCode status = U_ZERO_ERROR;
2520 MeasureFormat fmt("en", UMEASFMT_WIDTH_WIDE, status);
2521 if (!assertSuccess("Error creating formatter", status)) {
2522 return;
2523 }
2524 UnicodeString buffer;
2525 FieldPosition pos(FieldPosition::DONT_CARE);
2526 fmt.format(
2527 new Measure(3.5, MeasureUnit::createFoot(status), status),
2528 buffer,
2529 pos,
2530 status);
2531 if (!assertSuccess("Error formatting", status)) {
2532 return;
2533 }
2534 assertEquals(
2535 "TestFormatSingleArg",
2536 UnicodeString("3.5 feet"),
2537 buffer);
2538 }
2539
TestFormatMeasuresZeroArg()2540 void MeasureFormatTest::TestFormatMeasuresZeroArg() {
2541 UErrorCode status = U_ZERO_ERROR;
2542 MeasureFormat fmt("en", UMEASFMT_WIDTH_WIDE, status);
2543 verifyFormat("TestFormatMeasuresZeroArg", fmt, NULL, 0, "");
2544 }
2545
TestSimplePer()2546 void MeasureFormatTest::TestSimplePer() {
2547 Locale en("en");
2548 UErrorCode status = U_ZERO_ERROR;
2549 LocalPointer<MeasureUnit> second(MeasureUnit::createSecond(status));
2550 LocalPointer<MeasureUnit> minute(MeasureUnit::createMinute(status));
2551 LocalPointer<MeasureUnit> pound(MeasureUnit::createPound(status));
2552 if (!assertSuccess("", status)) {
2553 return;
2554 }
2555
2556 helperTestSimplePer(
2557 en, UMEASFMT_WIDTH_WIDE,
2558 1.0, *pound, *second, "1 pound per second");
2559 helperTestSimplePer(
2560 en, UMEASFMT_WIDTH_WIDE,
2561 2.0, *pound, *second, "2 pounds per second");
2562 helperTestSimplePer(
2563 en, UMEASFMT_WIDTH_WIDE,
2564 1.0, *pound, *minute, "1 pound per minute");
2565 helperTestSimplePer(
2566 en, UMEASFMT_WIDTH_WIDE,
2567 2.0, *pound, *minute, "2 pounds per minute");
2568
2569 helperTestSimplePer(
2570 en, UMEASFMT_WIDTH_SHORT, 1.0, *pound, *second, "1 lb/s");
2571 helperTestSimplePer(
2572 en, UMEASFMT_WIDTH_SHORT, 2.0, *pound, *second, "2 lb/s");
2573 helperTestSimplePer(
2574 en, UMEASFMT_WIDTH_SHORT, 1.0, *pound, *minute, "1 lb/min");
2575 helperTestSimplePer(
2576 en, UMEASFMT_WIDTH_SHORT, 2.0, *pound, *minute, "2 lb/min");
2577
2578 helperTestSimplePer(
2579 en, UMEASFMT_WIDTH_NARROW, 1.0, *pound, *second, "1#/s");
2580 helperTestSimplePer(
2581 en, UMEASFMT_WIDTH_NARROW, 2.0, *pound, *second, "2#/s");
2582 helperTestSimplePer(
2583 en, UMEASFMT_WIDTH_NARROW, 1.0, *pound, *minute, "1#/min");
2584 helperTestSimplePer(
2585 en, UMEASFMT_WIDTH_NARROW, 2.0, *pound, *minute, "2#/min");
2586
2587 helperTestSimplePer(
2588 en, UMEASFMT_WIDTH_SHORT,
2589 23.3, *pound, *second, "23.3 lb/s",
2590 NumberFormat::kDecimalSeparatorField,
2591 2, 3);
2592
2593 helperTestSimplePer(
2594 en, UMEASFMT_WIDTH_SHORT,
2595 23.3, *pound, *second, "23.3 lb/s",
2596 NumberFormat::kIntegerField,
2597 0, 2);
2598
2599 helperTestSimplePer(
2600 en, UMEASFMT_WIDTH_SHORT,
2601 23.3, *pound, *minute, "23.3 lb/min",
2602 NumberFormat::kDecimalSeparatorField,
2603 2, 3);
2604
2605 helperTestSimplePer(
2606 en, UMEASFMT_WIDTH_SHORT,
2607 23.3, *pound, *minute, "23.3 lb/min",
2608 NumberFormat::kIntegerField,
2609 0, 2);
2610 }
2611
TestNumeratorPlurals()2612 void MeasureFormatTest::TestNumeratorPlurals() {
2613 Locale pl("pl");
2614 UErrorCode status = U_ZERO_ERROR;
2615 LocalPointer<MeasureUnit> second(MeasureUnit::createSecond(status));
2616 LocalPointer<MeasureUnit> foot(MeasureUnit::createFoot(status));
2617 if (!assertSuccess("", status)) {
2618 return;
2619 }
2620
2621 helperTestSimplePer(
2622 pl,
2623 UMEASFMT_WIDTH_WIDE,
2624 1.0, *foot, *second, "1 stopa na sekund\\u0119");
2625 helperTestSimplePer(
2626 pl,
2627 UMEASFMT_WIDTH_WIDE,
2628 2.0, *foot, *second, "2 stopy na sekund\\u0119");
2629 helperTestSimplePer(
2630 pl,
2631 UMEASFMT_WIDTH_WIDE,
2632 5.0, *foot, *second, "5 st\\u00f3p na sekund\\u0119");
2633 helperTestSimplePer(
2634 pl, UMEASFMT_WIDTH_WIDE,
2635 1.5, *foot, *second, "1,5 stopy na sekund\\u0119");
2636 }
2637
helperTestSimplePer(const Locale & locale,UMeasureFormatWidth width,double value,const MeasureUnit & unit,const MeasureUnit & perUnit,const char * expected)2638 void MeasureFormatTest::helperTestSimplePer(
2639 const Locale &locale,
2640 UMeasureFormatWidth width,
2641 double value,
2642 const MeasureUnit &unit,
2643 const MeasureUnit &perUnit,
2644 const char *expected) {
2645 helperTestSimplePer(
2646 locale,
2647 width,
2648 value,
2649 unit,
2650 perUnit,
2651 expected,
2652 FieldPosition::DONT_CARE,
2653 0,
2654 0);
2655 }
2656
helperTestSimplePer(const Locale & locale,UMeasureFormatWidth width,double value,const MeasureUnit & unit,const MeasureUnit & perUnit,const char * expected,int32_t field,int32_t expected_start,int32_t expected_end)2657 void MeasureFormatTest::helperTestSimplePer(
2658 const Locale &locale,
2659 UMeasureFormatWidth width,
2660 double value,
2661 const MeasureUnit &unit,
2662 const MeasureUnit &perUnit,
2663 const char *expected,
2664 int32_t field,
2665 int32_t expected_start,
2666 int32_t expected_end) {
2667 UErrorCode status = U_ZERO_ERROR;
2668 FieldPosition pos(field);
2669 MeasureFormat fmt(locale, width, status);
2670 if (!assertSuccess("Error creating format object", status)) {
2671 return;
2672 }
2673 Measure measure(value, unit.clone(), status);
2674 if (!assertSuccess("Error creating measure object", status)) {
2675 return;
2676 }
2677 UnicodeString prefix("prefix: ");
2678 UnicodeString buffer(prefix);
2679 fmt.formatMeasurePerUnit(
2680 measure,
2681 perUnit,
2682 buffer,
2683 pos,
2684 status);
2685 if (!assertSuccess("Error formatting measures with per", status)) {
2686 return;
2687 }
2688 UnicodeString uexpected(expected);
2689 uexpected = prefix + uexpected;
2690 assertEquals(
2691 "TestSimplePer",
2692 uexpected.unescape(),
2693 buffer);
2694 if (field != FieldPosition::DONT_CARE) {
2695 assertEquals(
2696 "Start", expected_start, pos.getBeginIndex() - prefix.length());
2697 assertEquals(
2698 "End", expected_end, pos.getEndIndex() - prefix.length());
2699 }
2700 }
2701
TestMultiples()2702 void MeasureFormatTest::TestMultiples() {
2703 Locale ru("ru");
2704 Locale en("en");
2705 helperTestMultiples(en, UMEASFMT_WIDTH_WIDE, "2 miles, 1 foot, 2.3 inches");
2706 helperTestMultiples(en, UMEASFMT_WIDTH_SHORT, "2 mi, 1 ft, 2.3 in");
2707 helperTestMultiples(en, UMEASFMT_WIDTH_NARROW, "2mi 1\\u2032 2.3\\u2033");
2708 helperTestMultiples(ru, UMEASFMT_WIDTH_WIDE, "2 \\u043C\\u0438\\u043B\\u0438 1 \\u0444\\u0443\\u0442 2,3 \\u0434\\u044E\\u0439\\u043C\\u0430");
2709 helperTestMultiples(ru, UMEASFMT_WIDTH_SHORT, "2 \\u043C\\u0438\\u043B\\u0438 1 \\u0444\\u0442 2,3 \\u0434\\u044E\\u0439\\u043C.");
2710 helperTestMultiples(ru, UMEASFMT_WIDTH_NARROW, "2 \\u043C\\u0438\\u043B\\u044C 1 \\u0444\\u0442 2,3 \\u0434\\u044E\\u0439\\u043C\\u0430");
2711 }
2712
helperTestMultiples(const Locale & locale,UMeasureFormatWidth width,const char * expected)2713 void MeasureFormatTest::helperTestMultiples(
2714 const Locale &locale,
2715 UMeasureFormatWidth width,
2716 const char *expected) {
2717 UErrorCode status = U_ZERO_ERROR;
2718 FieldPosition pos(FieldPosition::DONT_CARE);
2719 MeasureFormat fmt(locale, width, status);
2720 if (!assertSuccess("Error creating format object", status)) {
2721 return;
2722 }
2723 Measure measures[] = {
2724 Measure(2.0, MeasureUnit::createMile(status), status),
2725 Measure(1.0, MeasureUnit::createFoot(status), status),
2726 Measure(2.3, MeasureUnit::createInch(status), status)};
2727 if (!assertSuccess("Error creating measures", status)) {
2728 return;
2729 }
2730 UnicodeString buffer;
2731 fmt.formatMeasures(measures, UPRV_LENGTHOF(measures), buffer, pos, status);
2732 if (!assertSuccess("Error formatting measures", status)) {
2733 return;
2734 }
2735 assertEquals("TestMultiples", UnicodeString(expected).unescape(), buffer);
2736 }
2737
TestManyLocaleDurations()2738 void MeasureFormatTest::TestManyLocaleDurations() {
2739 UErrorCode status = U_ZERO_ERROR;
2740 Measure measures[] = {
2741 Measure(5.0, MeasureUnit::createHour(status), status),
2742 Measure(37.0, MeasureUnit::createMinute(status), status)};
2743 if (!assertSuccess("Error creating measures", status)) {
2744 return;
2745 }
2746 helperTestManyLocaleDurations("da", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5 t og 37 m");
2747 helperTestManyLocaleDurations("da", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5.37");
2748 helperTestManyLocaleDurations("de", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5 Std., 37 Min.");
2749 helperTestManyLocaleDurations("de", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
2750 helperTestManyLocaleDurations("en", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5h 37m");
2751 helperTestManyLocaleDurations("en", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
2752 helperTestManyLocaleDurations("en_GB", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5h 37m");
2753 helperTestManyLocaleDurations("en_GB", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
2754 helperTestManyLocaleDurations("es", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5 h 37 min");
2755 helperTestManyLocaleDurations("es", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
2756 helperTestManyLocaleDurations("fi", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5t 37min");
2757 helperTestManyLocaleDurations("fi", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5.37");
2758 helperTestManyLocaleDurations("fr", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5h 37min");
2759 helperTestManyLocaleDurations("fr", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
2760 helperTestManyLocaleDurations("is", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5 klst. og 37 m\\u00EDn.");
2761 helperTestManyLocaleDurations("is", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
2762 helperTestManyLocaleDurations("ja", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5h37m");
2763 helperTestManyLocaleDurations("ja", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
2764 helperTestManyLocaleDurations("nb", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5t, 37m");
2765 helperTestManyLocaleDurations("nb", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
2766 helperTestManyLocaleDurations("nl", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5 u, 37 m");
2767 helperTestManyLocaleDurations("nl", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
2768 helperTestManyLocaleDurations("nn", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5t og 37m");
2769 helperTestManyLocaleDurations("nn", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
2770 helperTestManyLocaleDurations("sv", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5h 37m");
2771 helperTestManyLocaleDurations("sv", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
2772 helperTestManyLocaleDurations("zh", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5\\u5C0F\\u65F637\\u5206\\u949F");
2773 helperTestManyLocaleDurations("zh", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
2774 }
2775
helperTestManyLocaleDurations(const char * localeID,UMeasureFormatWidth width,const Measure * measures,int32_t measureCount,const char * expected)2776 void MeasureFormatTest::helperTestManyLocaleDurations( const char *localeID,
2777 UMeasureFormatWidth width,
2778 const Measure *measures,
2779 int32_t measureCount,
2780 const char *expected) {
2781 UErrorCode status = U_ZERO_ERROR;
2782 MeasureFormat fmt(Locale(localeID), width, status);
2783 if (U_FAILURE(status)) {
2784 errln("Could not create MeasureFormat for locale %s, width %d, status: %s", localeID, (int)width, u_errorName(status));
2785 return;
2786 }
2787 UnicodeString buffer;
2788 FieldPosition pos(FieldPosition::DONT_CARE);
2789 fmt.formatMeasures(measures, measureCount, buffer, pos, status);
2790 if (U_FAILURE(status)) {
2791 errln("MeasureFormat::formatMeasures failed for locale %s, width %d, status: %s", localeID, (int)width, u_errorName(status));
2792 return;
2793 }
2794 UnicodeString expStr(UnicodeString(expected).unescape());
2795 if (buffer != expStr) {
2796 errln("MeasureFormat::formatMeasures for locale " + UnicodeString(localeID) + ", width " + width + ", expected \"" + expStr + "\", got \"" + buffer + "\"");
2797 }
2798 }
2799
TestGram()2800 void MeasureFormatTest::TestGram() {
2801 UErrorCode status = U_ZERO_ERROR;
2802 MeasureFormat fmt("en", UMEASFMT_WIDTH_SHORT, status);
2803 if (!assertSuccess("Error creating format object", status)) {
2804 return;
2805 }
2806 Measure gram((double)1, MeasureUnit::createGram(status), status);
2807 Measure gforce((double)1, MeasureUnit::createGForce(status), status);
2808 if (!assertSuccess("Error creating measures", status)) {
2809 return;
2810 }
2811 verifyFormat("TestGram", fmt, &gram, 1, "1 g");
2812 verifyFormat("TestGram", fmt, &gforce, 1, "1 G");
2813 }
2814
TestCurrencies()2815 void MeasureFormatTest::TestCurrencies() {
2816 UChar USD[4] = {};
2817 u_uastrcpy(USD, "USD");
2818 UErrorCode status = U_ZERO_ERROR;
2819 CurrencyUnit USD_unit(USD, status);
2820 assertEquals("Currency Unit", USD, USD_unit.getISOCurrency());
2821 if (!assertSuccess("Error creating CurrencyUnit", status)) {
2822 return;
2823 }
2824 CurrencyAmount USD_1(1.0, USD, status);
2825 assertEquals("Currency Code", USD, USD_1.getISOCurrency());
2826 CurrencyAmount USD_2(2.0, USD, status);
2827 CurrencyAmount USD_NEG_1(-1.0, USD, status);
2828 if (!assertSuccess("Error creating currencies", status)) {
2829 return;
2830 }
2831 Locale en("en");
2832 MeasureFormat fmt(en, UMEASFMT_WIDTH_WIDE, status);
2833 if (!assertSuccess("Error creating format object", status)) {
2834 return;
2835 }
2836 verifyFormat("TestCurrenciesWide", fmt, &USD_NEG_1, 1, "-1.00 US dollars");
2837 verifyFormat("TestCurrenciesWide", fmt, &USD_1, 1, "1.00 US dollars");
2838 verifyFormat("TestCurrenciesWide", fmt, &USD_2, 1, "2.00 US dollars");
2839 fmt = MeasureFormat(en, UMEASFMT_WIDTH_SHORT, status);
2840 if (!assertSuccess("Error creating format object", status)) {
2841 return;
2842 }
2843 verifyFormat("TestCurrenciesShort", fmt, &USD_NEG_1, 1, "-USD\\u00A01.00");
2844 verifyFormat("TestCurrenciesShort", fmt, &USD_1, 1, "USD\\u00A01.00");
2845 verifyFormat("TestCurrenciesShort", fmt, &USD_2, 1, "USD\\u00A02.00");
2846 fmt = MeasureFormat(en, UMEASFMT_WIDTH_NARROW, status);
2847 if (!assertSuccess("Error creating format object", status)) {
2848 return;
2849 }
2850 verifyFormat("TestCurrenciesNarrow", fmt, &USD_NEG_1, 1, "-$1.00");
2851 verifyFormat("TestCurrenciesNarrow", fmt, &USD_1, 1, "$1.00");
2852 verifyFormat("TestCurrenciesNarrow", fmt, &USD_2, 1, "$2.00");
2853 fmt = MeasureFormat(en, UMEASFMT_WIDTH_NUMERIC, status);
2854 if (!assertSuccess("Error creating format object", status)) {
2855 return;
2856 }
2857 verifyFormat("TestCurrenciesNumeric", fmt, &USD_NEG_1, 1, "-$1.00");
2858 verifyFormat("TestCurrenciesNumeric", fmt, &USD_1, 1, "$1.00");
2859 verifyFormat("TestCurrenciesNumeric", fmt, &USD_2, 1, "$2.00");
2860 }
2861
TestDisplayNames()2862 void MeasureFormatTest::TestDisplayNames() {
2863 UErrorCode status = U_ZERO_ERROR;
2864 helperTestDisplayName( MeasureUnit::createYear(status), "en", UMEASFMT_WIDTH_WIDE, "years" );
2865 helperTestDisplayName( MeasureUnit::createYear(status), "ja", UMEASFMT_WIDTH_WIDE, "\\u5E74" );
2866 helperTestDisplayName( MeasureUnit::createYear(status), "es", UMEASFMT_WIDTH_WIDE, "a\\u00F1os" );
2867 helperTestDisplayName( MeasureUnit::createYear(status), "pt", UMEASFMT_WIDTH_WIDE, "anos" );
2868 helperTestDisplayName( MeasureUnit::createYear(status), "pt-PT", UMEASFMT_WIDTH_WIDE, "anos" );
2869 helperTestDisplayName( MeasureUnit::createAmpere(status), "en", UMEASFMT_WIDTH_WIDE, "amperes" );
2870 helperTestDisplayName( MeasureUnit::createAmpere(status), "ja", UMEASFMT_WIDTH_WIDE, "\\u30A2\\u30F3\\u30DA\\u30A2" );
2871 helperTestDisplayName( MeasureUnit::createAmpere(status), "es", UMEASFMT_WIDTH_WIDE, "amperios" );
2872 helperTestDisplayName( MeasureUnit::createAmpere(status), "pt", UMEASFMT_WIDTH_WIDE, "amperes" );
2873 helperTestDisplayName( MeasureUnit::createAmpere(status), "pt-PT", UMEASFMT_WIDTH_WIDE, "amperes" );
2874 helperTestDisplayName( MeasureUnit::createMeterPerSecondSquared(status), "pt", UMEASFMT_WIDTH_WIDE, "metros por segundo ao quadrado" );
2875 helperTestDisplayName( MeasureUnit::createMeterPerSecondSquared(status), "pt-PT", UMEASFMT_WIDTH_WIDE, "metros por segundo quadrado" );
2876 helperTestDisplayName( MeasureUnit::createSquareKilometer(status), "pt", UMEASFMT_WIDTH_NARROW, "km\\u00B2" );
2877 helperTestDisplayName( MeasureUnit::createSquareKilometer(status), "pt", UMEASFMT_WIDTH_SHORT, "km\\u00B2" );
2878 helperTestDisplayName( MeasureUnit::createSquareKilometer(status), "pt", UMEASFMT_WIDTH_WIDE, "quil\\u00F4metros quadrados" );
2879 helperTestDisplayName( MeasureUnit::createSecond(status), "pt-PT", UMEASFMT_WIDTH_NARROW, "s" );
2880 helperTestDisplayName( MeasureUnit::createSecond(status), "pt-PT", UMEASFMT_WIDTH_SHORT, "s" );
2881 helperTestDisplayName( MeasureUnit::createSecond(status), "pt-PT", UMEASFMT_WIDTH_WIDE, "segundos" );
2882 helperTestDisplayName( MeasureUnit::createSecond(status), "pt", UMEASFMT_WIDTH_NARROW, "seg" );
2883 helperTestDisplayName( MeasureUnit::createSecond(status), "pt", UMEASFMT_WIDTH_SHORT, "seg" );
2884 helperTestDisplayName( MeasureUnit::createSecond(status), "pt", UMEASFMT_WIDTH_WIDE, "segundos" );
2885 assertSuccess("Error creating measure units", status);
2886 }
2887
helperTestDisplayName(const MeasureUnit * unit,const char * localeID,UMeasureFormatWidth width,const char * expected)2888 void MeasureFormatTest::helperTestDisplayName(const MeasureUnit *unit,
2889 const char *localeID,
2890 UMeasureFormatWidth width,
2891 const char *expected) {
2892 UErrorCode status = U_ZERO_ERROR;
2893 MeasureFormat fmt(Locale(localeID), width, status);
2894 if (U_FAILURE(status)) {
2895 errln("Could not create MeasureFormat for locale %s, width %d, status: %s",
2896 localeID, (int)width, u_errorName(status));
2897 return;
2898 }
2899
2900 UnicodeString dnam = fmt.getUnitDisplayName(*unit, status);
2901 if (U_FAILURE(status)) {
2902 errln("MeasureFormat::getUnitDisplayName failed for unit %s-%s, locale %s, width %d, status: %s",
2903 unit->getType(), unit->getSubtype(), localeID, (int)width, u_errorName(status));
2904 return;
2905 }
2906
2907 UnicodeString expStr(UnicodeString(expected).unescape());
2908 if (dnam != expStr) {
2909 errln("MeasureFormat::getUnitDisplayName for unit %s-%s, locale %s, width %d: expected \"%s\", got \"%s\"",
2910 unit->getType(), unit->getSubtype(), localeID, (int)width, CStr(expStr)(), CStr(dnam)());
2911 }
2912
2913 // Delete the measure unit
2914 delete unit;
2915 }
2916
TestFieldPosition()2917 void MeasureFormatTest::TestFieldPosition() {
2918 UErrorCode status = U_ZERO_ERROR;
2919 MeasureFormat fmt("en", UMEASFMT_WIDTH_SHORT, status);
2920 if (!assertSuccess("Error creating format object", status)) {
2921 return;
2922 }
2923 Measure measure(43.5, MeasureUnit::createFoot(status), status);
2924 if (!assertSuccess("Error creating measure object 1", status)) {
2925 return;
2926 }
2927 UnicodeString prefix("123456: ");
2928 verifyFieldPosition(
2929 "",
2930 fmt,
2931 prefix,
2932 &measure,
2933 1,
2934 NumberFormat::kDecimalSeparatorField,
2935 10,
2936 11);
2937 measure = Measure(43.0, MeasureUnit::createFoot(status), status);
2938 if (!assertSuccess("Error creating measure object 2", status)) {
2939 return;
2940 }
2941 verifyFieldPosition(
2942 "",
2943 fmt,
2944 prefix,
2945 &measure,
2946 1,
2947 NumberFormat::kDecimalSeparatorField,
2948 0,
2949 0);
2950 }
2951
TestFieldPositionMultiple()2952 void MeasureFormatTest::TestFieldPositionMultiple() {
2953 UErrorCode status = U_ZERO_ERROR;
2954 MeasureFormat fmt("en", UMEASFMT_WIDTH_SHORT, status);
2955 if (!assertSuccess("Error creating format object", status)) {
2956 return;
2957 }
2958 Measure first[] = {
2959 Measure((double)354, MeasureUnit::createMeter(status), status),
2960 Measure((double)23, MeasureUnit::createCentimeter(status), status)};
2961 Measure second[] = {
2962 Measure((double)354, MeasureUnit::createMeter(status), status),
2963 Measure((double)23, MeasureUnit::createCentimeter(status), status),
2964 Measure((double)5.4, MeasureUnit::createMillimeter(status), status)};
2965 Measure third[] = {
2966 Measure((double)3, MeasureUnit::createMeter(status), status),
2967 Measure((double)23, MeasureUnit::createCentimeter(status), status),
2968 Measure((double)5, MeasureUnit::createMillimeter(status), status)};
2969 if (!assertSuccess("Error creating measure objects", status)) {
2970 return;
2971 }
2972 UnicodeString prefix("123456: ");
2973 verifyFieldPosition(
2974 "Integer",
2975 fmt,
2976 prefix,
2977 first,
2978 UPRV_LENGTHOF(first),
2979 NumberFormat::kIntegerField,
2980 8,
2981 11);
2982 verifyFieldPosition(
2983 "Decimal separator",
2984 fmt,
2985 prefix,
2986 second,
2987 UPRV_LENGTHOF(second),
2988 NumberFormat::kDecimalSeparatorField,
2989 23,
2990 24);
2991 verifyFieldPosition(
2992 "no decimal separator",
2993 fmt,
2994 prefix,
2995 third,
2996 UPRV_LENGTHOF(third),
2997 NumberFormat::kDecimalSeparatorField,
2998 0,
2999 0);
3000 }
3001
TestBadArg()3002 void MeasureFormatTest::TestBadArg() {
3003 UErrorCode status = U_ZERO_ERROR;
3004 MeasureFormat fmt("en", UMEASFMT_WIDTH_SHORT, status);
3005 if (!assertSuccess("Error creating format object", status)) {
3006 return;
3007 }
3008 FieldPosition pos(FieldPosition::DONT_CARE);
3009 UnicodeString buffer;
3010 fmt.format(
3011 9.3,
3012 buffer,
3013 pos,
3014 status);
3015 if (status != U_ILLEGAL_ARGUMENT_ERROR) {
3016 errln("Expected ILLEGAL_ARGUMENT_ERROR");
3017 }
3018 }
3019
TestEquality()3020 void MeasureFormatTest::TestEquality() {
3021 UErrorCode status = U_ZERO_ERROR;
3022 NumberFormat* nfeq = NumberFormat::createInstance("en", status);
3023 NumberFormat* nfne = NumberFormat::createInstance("fr", status);
3024 MeasureFormat fmt("en", UMEASFMT_WIDTH_SHORT, status);
3025 MeasureFormat fmtEq2("en", UMEASFMT_WIDTH_SHORT, nfeq, status);
3026 MeasureFormat fmtne1("en", UMEASFMT_WIDTH_WIDE, status);
3027 MeasureFormat fmtne2("fr", UMEASFMT_WIDTH_SHORT, status);
3028 MeasureFormat fmtne3("en", UMEASFMT_WIDTH_SHORT, nfne, status);
3029 if (U_FAILURE(status)) {
3030 dataerrln("Error creating MeasureFormats - %s", u_errorName(status));
3031 return;
3032 }
3033 MeasureFormat fmtEq(fmt);
3034 assertTrue("Equal", fmt == fmtEq);
3035 assertTrue("Equal2", fmt == fmtEq2);
3036 assertFalse("Equal Neg", fmt != fmtEq);
3037 assertTrue("Not Equal 1", fmt != fmtne1);
3038 assertFalse("Not Equal Neg 1", fmt == fmtne1);
3039 assertTrue("Not Equal 2", fmt != fmtne2);
3040 assertTrue("Not Equal 3", fmt != fmtne3);
3041 }
3042
TestGroupingSeparator()3043 void MeasureFormatTest::TestGroupingSeparator() {
3044 UErrorCode status = U_ZERO_ERROR;
3045 Locale en("en");
3046 MeasureFormat fmt(en, UMEASFMT_WIDTH_SHORT, status);
3047 if (!assertSuccess("Error creating format object", status)) {
3048 return;
3049 }
3050 Measure ms[] = {
3051 Measure((int32_t)INT32_MAX, MeasureUnit::createYear(status), status),
3052 Measure((int32_t)INT32_MIN, MeasureUnit::createMonth(status), status),
3053 Measure(-987.0, MeasureUnit::createDay(status), status),
3054 Measure(1362.0, MeasureUnit::createHour(status), status),
3055 Measure(987.0, MeasureUnit::createMinute(status), status)};
3056 FieldPosition pos(NumberFormat::kGroupingSeparatorField);
3057 UnicodeString appendTo;
3058 fmt.formatMeasures(ms, 5, appendTo, pos, status);
3059 if (!assertSuccess("Error formatting", status)) {
3060 return;
3061 }
3062 assertEquals(
3063 "grouping separator",
3064 "2,147,483,647 yrs, -2,147,483,648 mths, -987 days, 1,362 hr, 987 min",
3065 appendTo);
3066 assertEquals("begin index", 1, pos.getBeginIndex());
3067 assertEquals("end index", 2, pos.getEndIndex());
3068 }
3069
TestDoubleZero()3070 void MeasureFormatTest::TestDoubleZero() {
3071 UErrorCode status = U_ZERO_ERROR;
3072 Measure measures[] = {
3073 Measure(4.7, MeasureUnit::createHour(status), status),
3074 Measure(23.0, MeasureUnit::createMinute(status), status),
3075 Measure(16.0, MeasureUnit::createSecond(status), status)};
3076 Locale en("en");
3077 NumberFormat *nf = NumberFormat::createInstance(en, status);
3078 MeasureFormat fmt("en", UMEASFMT_WIDTH_WIDE, nf, status);
3079 UnicodeString appendTo;
3080 FieldPosition pos(FieldPosition::DONT_CARE);
3081 if (U_FAILURE(status)) {
3082 dataerrln("Error creating formatter - %s", u_errorName(status));
3083 return;
3084 }
3085 nf->setMinimumFractionDigits(2);
3086 nf->setMaximumFractionDigits(2);
3087 fmt.formatMeasures(measures, UPRV_LENGTHOF(measures), appendTo, pos, status);
3088 if (!assertSuccess("Error formatting", status)) {
3089 return;
3090 }
3091 assertEquals(
3092 "TestDoubleZero",
3093 UnicodeString("4 hours, 23 minutes, 16.00 seconds"),
3094 appendTo);
3095 measures[0] = Measure(-4.7, MeasureUnit::createHour(status), status);
3096 appendTo.remove();
3097 fmt.formatMeasures(measures, UPRV_LENGTHOF(measures), appendTo, pos, status);
3098 if (!assertSuccess("Error formatting", status)) {
3099 return;
3100 }
3101 assertEquals(
3102 "TestDoubleZero",
3103 UnicodeString("-4 hours, 23 minutes, 16.00 seconds"),
3104 appendTo);
3105 }
3106
TestUnitPerUnitResolution()3107 void MeasureFormatTest::TestUnitPerUnitResolution() {
3108 UErrorCode status = U_ZERO_ERROR;
3109 Locale en("en");
3110 MeasureFormat fmt("en", UMEASFMT_WIDTH_SHORT, status);
3111 Measure measure(50.0, MeasureUnit::createPound(status), status);
3112 LocalPointer<MeasureUnit> sqInch(MeasureUnit::createSquareInch(status));
3113 if (!assertSuccess("Create of format unit and per unit", status)) {
3114 return;
3115 }
3116 FieldPosition pos(FieldPosition::DONT_CARE);
3117 UnicodeString actual;
3118 fmt.formatMeasurePerUnit(
3119 measure,
3120 *sqInch,
3121 actual,
3122 pos,
3123 status);
3124 assertEquals("", "50 psi", actual);
3125 }
3126
TestIndividualPluralFallback()3127 void MeasureFormatTest::TestIndividualPluralFallback() {
3128 // See ticket #11986 "incomplete fallback in MeasureFormat".
3129 // In CLDR 28, fr_CA temperature-generic/short has only the "one" form,
3130 // and falls back to fr for the "other" form.
3131 IcuTestErrorCode errorCode(*this, "TestIndividualPluralFallback");
3132 MeasureFormat mf("fr_CA", UMEASFMT_WIDTH_SHORT, errorCode);
3133 LocalPointer<Measure> twoDeg(
3134 new Measure(2.0, MeasureUnit::createGenericTemperature(errorCode), errorCode), errorCode);
3135 UnicodeString expected = UNICODE_STRING_SIMPLE("2\\u00B0").unescape();
3136 UnicodeString actual;
3137 assertEquals("2 deg temp in fr_CA", expected, mf.format(twoDeg.orphan(), actual, errorCode), TRUE);
3138 }
3139
Test20332_PersonUnits()3140 void MeasureFormatTest::Test20332_PersonUnits() {
3141 IcuTestErrorCode status(*this, "Test20332_PersonUnits");
3142 const struct TestCase {
3143 const char* locale;
3144 MeasureUnit* unitToAdopt;
3145 UMeasureFormatWidth width;
3146 const char* expected;
3147 } cases[] = {
3148 {"en-us", MeasureUnit::createYearPerson(status), UMEASFMT_WIDTH_NARROW, "25y"},
3149 {"en-us", MeasureUnit::createYearPerson(status), UMEASFMT_WIDTH_SHORT, "25 yrs"},
3150 {"en-us", MeasureUnit::createYearPerson(status), UMEASFMT_WIDTH_WIDE, "25 years"},
3151 {"en-us", MeasureUnit::createMonthPerson(status), UMEASFMT_WIDTH_NARROW, "25m"},
3152 {"en-us", MeasureUnit::createMonthPerson(status), UMEASFMT_WIDTH_SHORT, "25 mths"},
3153 {"en-us", MeasureUnit::createMonthPerson(status), UMEASFMT_WIDTH_WIDE, "25 months"},
3154 {"en-us", MeasureUnit::createWeekPerson(status), UMEASFMT_WIDTH_NARROW, "25w"},
3155 {"en-us", MeasureUnit::createWeekPerson(status), UMEASFMT_WIDTH_SHORT, "25 wks"},
3156 {"en-us", MeasureUnit::createWeekPerson(status), UMEASFMT_WIDTH_WIDE, "25 weeks"},
3157 {"en-us", MeasureUnit::createDayPerson(status), UMEASFMT_WIDTH_NARROW, "25d"},
3158 {"en-us", MeasureUnit::createDayPerson(status), UMEASFMT_WIDTH_SHORT, "25 days"},
3159 {"en-us", MeasureUnit::createDayPerson(status), UMEASFMT_WIDTH_WIDE, "25 days"}
3160 };
3161 for (const auto& cas : cases) {
3162 MeasureFormat mf(cas.locale, cas.width, status);
3163 if (status.errIfFailureAndReset()) { return; }
3164 Measure measure(25, cas.unitToAdopt, status);
3165 if (status.errIfFailureAndReset()) { return; }
3166 verifyFormat(cas.locale, mf, &measure, 1, cas.expected);
3167 }
3168 }
3169
TestNumericTime()3170 void MeasureFormatTest::TestNumericTime() {
3171 IcuTestErrorCode status(*this, "TestNumericTime");
3172
3173 MeasureFormat fmt("en", UMEASFMT_WIDTH_NUMERIC, status);
3174
3175 Measure hours(112, MeasureUnit::createHour(status), status);
3176 Measure minutes(113, MeasureUnit::createMinute(status), status);
3177 Measure seconds(114, MeasureUnit::createSecond(status), status);
3178 Measure fhours(112.8765, MeasureUnit::createHour(status), status);
3179 Measure fminutes(113.8765, MeasureUnit::createMinute(status), status);
3180 Measure fseconds(114.8765, MeasureUnit::createSecond(status), status);
3181 if (status.errDataIfFailureAndReset(WHERE)) return;
3182
3183 verifyFormat("hours", fmt, &hours, 1, "112h");
3184 verifyFormat("minutes", fmt, &minutes, 1, "113m");
3185 verifyFormat("seconds", fmt, &seconds, 1, "114s");
3186
3187 verifyFormat("fhours", fmt, &fhours, 1, "112.876h");
3188 verifyFormat("fminutes", fmt, &fminutes, 1, "113.876m");
3189 verifyFormat("fseconds", fmt, &fseconds, 1, "114.876s");
3190
3191 Measure hoursMinutes[2] = {hours, minutes};
3192 verifyFormat("hoursMinutes", fmt, hoursMinutes, 2, "112:113");
3193 Measure hoursSeconds[2] = {hours, seconds};
3194 verifyFormat("hoursSeconds", fmt, hoursSeconds, 2, "112:00:114");
3195 Measure minutesSeconds[2] = {minutes, seconds};
3196 verifyFormat("minutesSeconds", fmt, minutesSeconds, 2, "113:114");
3197
3198 Measure hoursFminutes[2] = {hours, fminutes};
3199 verifyFormat("hoursFminutes", fmt, hoursFminutes, 2, "112:113.876");
3200 Measure hoursFseconds[2] = {hours, fseconds};
3201 verifyFormat("hoursFseconds", fmt, hoursFseconds, 2, "112:00:114.876");
3202 Measure minutesFseconds[2] = {minutes, fseconds};
3203 verifyFormat("hoursMminutesFsecondsinutes", fmt, minutesFseconds, 2, "113:114.876");
3204
3205 Measure fhoursMinutes[2] = {fhours, minutes};
3206 verifyFormat("fhoursMinutes", fmt, fhoursMinutes, 2, "112:113");
3207 Measure fhoursSeconds[2] = {fhours, seconds};
3208 verifyFormat("fhoursSeconds", fmt, fhoursSeconds, 2, "112:00:114");
3209 Measure fminutesSeconds[2] = {fminutes, seconds};
3210 verifyFormat("fminutesSeconds", fmt, fminutesSeconds, 2, "113:114");
3211
3212 Measure fhoursFminutes[2] = {fhours, fminutes};
3213 verifyFormat("fhoursFminutes", fmt, fhoursFminutes, 2, "112:113.876");
3214 Measure fhoursFseconds[2] = {fhours, fseconds};
3215 verifyFormat("fhoursFseconds", fmt, fhoursFseconds, 2, "112:00:114.876");
3216 Measure fminutesFseconds[2] = {fminutes, fseconds};
3217 verifyFormat("fminutesFseconds", fmt, fminutesFseconds, 2, "113:114.876");
3218
3219 Measure hoursMinutesSeconds[3] = {hours, minutes, seconds};
3220 verifyFormat("hoursMinutesSeconds", fmt, hoursMinutesSeconds, 3, "112:113:114");
3221 Measure fhoursFminutesFseconds[3] = {fhours, fminutes, fseconds};
3222 verifyFormat("fhoursFminutesFseconds", fmt, fhoursFminutesFseconds, 3, "112:113:114.876");
3223 }
3224
TestNumericTimeSomeSpecialFormats()3225 void MeasureFormatTest::TestNumericTimeSomeSpecialFormats() {
3226 IcuTestErrorCode status(*this, "TestNumericTimeSomeSpecialFormats");
3227
3228 Measure fhours(2.8765432, MeasureUnit::createHour(status), status);
3229 Measure fminutes(3.8765432, MeasureUnit::createMinute(status), status);
3230 if (status.errDataIfFailureAndReset(WHERE)) return;
3231
3232 Measure fhoursFminutes[2] = {fhours, fminutes};
3233
3234 // Latvian is one of the very few locales 0-padding the hour
3235 MeasureFormat fmtLt("lt", UMEASFMT_WIDTH_NUMERIC, status);
3236 if (status.errDataIfFailureAndReset(WHERE)) return;
3237 verifyFormat("Latvian fhoursFminutes", fmtLt, fhoursFminutes, 2, "02:03,877");
3238
3239 // Danish is one of the very few locales using '.' as separator
3240 MeasureFormat fmtDa("da", UMEASFMT_WIDTH_NUMERIC, status);
3241 verifyFormat("Danish fhoursFminutes", fmtDa, fhoursFminutes, 2, "2.03,877");
3242 }
3243
TestIdentifiers()3244 void MeasureFormatTest::TestIdentifiers() {
3245 IcuTestErrorCode status(*this, "TestIdentifiers");
3246 struct TestCase {
3247 const char* id;
3248 const char* normalized;
3249 } cases[] = {
3250 // Correctly normalized identifiers should not change
3251 {"", ""},
3252 {"square-meter-per-square-meter", "square-meter-per-square-meter"},
3253 {"kilogram-meter-per-square-meter-square-second",
3254 "kilogram-meter-per-square-meter-square-second"},
3255 {"square-mile-and-square-foot", "square-mile-and-square-foot"},
3256 {"square-foot-and-square-mile", "square-foot-and-square-mile"},
3257 {"per-cubic-centimeter", "per-cubic-centimeter"},
3258 {"per-kilometer", "per-kilometer"},
3259
3260 // Normalization of power and per
3261 {"p2-foot-and-p2-mile", "square-foot-and-square-mile"},
3262 {"gram-square-gram-per-dekagram", "cubic-gram-per-dekagram"},
3263 {"kilogram-per-meter-per-second", "kilogram-per-meter-second"},
3264
3265 // TODO(ICU-20920): Add more test cases once the proper ranking is available.
3266 };
3267 for (const auto &cas : cases) {
3268 status.setScope(cas.id);
3269 MeasureUnit unit = MeasureUnit::forIdentifier(cas.id, status);
3270 status.errIfFailureAndReset();
3271 const char* actual = unit.getIdentifier();
3272 assertEquals(cas.id, cas.normalized, actual);
3273 status.errIfFailureAndReset();
3274 }
3275 }
3276
TestInvalidIdentifiers()3277 void MeasureFormatTest::TestInvalidIdentifiers() {
3278 IcuTestErrorCode status(*this, "TestInvalidIdentifiers");
3279
3280 const char *const inputs[] = {
3281 "kilo",
3282 "kilokilo",
3283 "onekilo",
3284 "meterkilo",
3285 "meter-kilo",
3286 "k",
3287 "meter-",
3288 "meter+",
3289 "-meter",
3290 "+meter",
3291 "-kilometer",
3292 "+kilometer",
3293 "-p2-meter",
3294 "+p2-meter",
3295 "+",
3296 "-",
3297 "-mile",
3298 "-and-mile",
3299 "-per-mile",
3300 "one",
3301 "one-one",
3302 "one-per-mile",
3303 "one-per-cubic-centimeter",
3304 "square--per-meter",
3305 "metersecond", // Must have compound part in between single units
3306
3307 // Negative powers not supported in mixed units yet. TODO(CLDR-13701).
3308 "per-hour-and-hertz",
3309 "hertz-and-per-hour",
3310
3311 // Compound units not supported in mixed units yet. TODO(CLDR-13700).
3312 "kilonewton-meter-and-newton-meter",
3313 };
3314
3315 for (const auto& input : inputs) {
3316 status.setScope(input);
3317 MeasureUnit::forIdentifier(input, status);
3318 status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
3319 }
3320 }
3321
TestCompoundUnitOperations()3322 void MeasureFormatTest::TestCompoundUnitOperations() {
3323 IcuTestErrorCode status(*this, "TestCompoundUnitOperations");
3324
3325 MeasureUnit::forIdentifier("kilometer-per-second-joule", status);
3326
3327 MeasureUnit kilometer = MeasureUnit::getKilometer();
3328 MeasureUnit cubicMeter = MeasureUnit::getCubicMeter();
3329 MeasureUnit meter = kilometer.withSIPrefix(UMEASURE_SI_PREFIX_ONE, status);
3330 MeasureUnit centimeter1 = kilometer.withSIPrefix(UMEASURE_SI_PREFIX_CENTI, status);
3331 MeasureUnit centimeter2 = meter.withSIPrefix(UMEASURE_SI_PREFIX_CENTI, status);
3332 MeasureUnit cubicDecimeter = cubicMeter.withSIPrefix(UMEASURE_SI_PREFIX_DECI, status);
3333
3334 verifySingleUnit(kilometer, UMEASURE_SI_PREFIX_KILO, 1, "kilometer");
3335 verifySingleUnit(meter, UMEASURE_SI_PREFIX_ONE, 1, "meter");
3336 verifySingleUnit(centimeter1, UMEASURE_SI_PREFIX_CENTI, 1, "centimeter");
3337 verifySingleUnit(centimeter2, UMEASURE_SI_PREFIX_CENTI, 1, "centimeter");
3338 verifySingleUnit(cubicDecimeter, UMEASURE_SI_PREFIX_DECI, 3, "cubic-decimeter");
3339
3340 assertTrue("centimeter equality", centimeter1 == centimeter2);
3341 assertTrue("kilometer inequality", centimeter1 != kilometer);
3342
3343 MeasureUnit squareMeter = meter.withDimensionality(2, status);
3344 MeasureUnit overCubicCentimeter = centimeter1.withDimensionality(-3, status);
3345 MeasureUnit quarticKilometer = kilometer.withDimensionality(4, status);
3346 MeasureUnit overQuarticKilometer1 = kilometer.withDimensionality(-4, status);
3347
3348 verifySingleUnit(squareMeter, UMEASURE_SI_PREFIX_ONE, 2, "square-meter");
3349 verifySingleUnit(overCubicCentimeter, UMEASURE_SI_PREFIX_CENTI, -3, "per-cubic-centimeter");
3350 verifySingleUnit(quarticKilometer, UMEASURE_SI_PREFIX_KILO, 4, "p4-kilometer");
3351 verifySingleUnit(overQuarticKilometer1, UMEASURE_SI_PREFIX_KILO, -4, "per-p4-kilometer");
3352
3353 assertTrue("power inequality", quarticKilometer != overQuarticKilometer1);
3354
3355 MeasureUnit overQuarticKilometer2 = quarticKilometer.reciprocal(status);
3356 MeasureUnit overQuarticKilometer3 = kilometer.product(kilometer, status)
3357 .product(kilometer, status)
3358 .product(kilometer, status)
3359 .reciprocal(status);
3360 MeasureUnit overQuarticKilometer4 = meter.withDimensionality(4, status)
3361 .reciprocal(status)
3362 .withSIPrefix(UMEASURE_SI_PREFIX_KILO, status);
3363
3364 verifySingleUnit(overQuarticKilometer2, UMEASURE_SI_PREFIX_KILO, -4, "per-p4-kilometer");
3365 verifySingleUnit(overQuarticKilometer3, UMEASURE_SI_PREFIX_KILO, -4, "per-p4-kilometer");
3366 verifySingleUnit(overQuarticKilometer4, UMEASURE_SI_PREFIX_KILO, -4, "per-p4-kilometer");
3367
3368 assertTrue("reciprocal equality", overQuarticKilometer1 == overQuarticKilometer2);
3369 assertTrue("reciprocal equality", overQuarticKilometer1 == overQuarticKilometer3);
3370 assertTrue("reciprocal equality", overQuarticKilometer1 == overQuarticKilometer4);
3371
3372 MeasureUnit kiloSquareSecond = MeasureUnit::getSecond()
3373 .withDimensionality(2, status).withSIPrefix(UMEASURE_SI_PREFIX_KILO, status);
3374 MeasureUnit meterSecond = meter.product(kiloSquareSecond, status);
3375 MeasureUnit cubicMeterSecond1 = meter.withDimensionality(3, status).product(kiloSquareSecond, status);
3376 MeasureUnit centimeterSecond1 = meter.withSIPrefix(UMEASURE_SI_PREFIX_CENTI, status).product(kiloSquareSecond, status);
3377 MeasureUnit secondCubicMeter = kiloSquareSecond.product(meter.withDimensionality(3, status), status);
3378 MeasureUnit secondCentimeter = kiloSquareSecond.product(meter.withSIPrefix(UMEASURE_SI_PREFIX_CENTI, status), status);
3379 MeasureUnit secondCentimeterPerKilometer = secondCentimeter.product(kilometer.reciprocal(status), status);
3380
3381 verifySingleUnit(kiloSquareSecond, UMEASURE_SI_PREFIX_KILO, 2, "square-kilosecond");
3382 const char* meterSecondSub[] = {"meter", "square-kilosecond"};
3383 verifyCompoundUnit(meterSecond, "meter-square-kilosecond",
3384 meterSecondSub, UPRV_LENGTHOF(meterSecondSub));
3385 const char* cubicMeterSecond1Sub[] = {"cubic-meter", "square-kilosecond"};
3386 verifyCompoundUnit(cubicMeterSecond1, "cubic-meter-square-kilosecond",
3387 cubicMeterSecond1Sub, UPRV_LENGTHOF(cubicMeterSecond1Sub));
3388 const char* centimeterSecond1Sub[] = {"centimeter", "square-kilosecond"};
3389 verifyCompoundUnit(centimeterSecond1, "centimeter-square-kilosecond",
3390 centimeterSecond1Sub, UPRV_LENGTHOF(centimeterSecond1Sub));
3391 const char* secondCubicMeterSub[] = {"cubic-meter", "square-kilosecond"};
3392 verifyCompoundUnit(secondCubicMeter, "cubic-meter-square-kilosecond",
3393 secondCubicMeterSub, UPRV_LENGTHOF(secondCubicMeterSub));
3394 const char* secondCentimeterSub[] = {"centimeter", "square-kilosecond"};
3395 verifyCompoundUnit(secondCentimeter, "centimeter-square-kilosecond",
3396 secondCentimeterSub, UPRV_LENGTHOF(secondCentimeterSub));
3397 const char* secondCentimeterPerKilometerSub[] = {"centimeter", "square-kilosecond", "per-kilometer"};
3398 verifyCompoundUnit(secondCentimeterPerKilometer, "centimeter-square-kilosecond-per-kilometer",
3399 secondCentimeterPerKilometerSub, UPRV_LENGTHOF(secondCentimeterPerKilometerSub));
3400
3401 assertTrue("reordering equality", cubicMeterSecond1 == secondCubicMeter);
3402 assertTrue("additional simple units inequality", secondCubicMeter != secondCentimeter);
3403
3404 // Don't allow get/set power or SI prefix on compound units
3405 status.errIfFailureAndReset();
3406 meterSecond.getDimensionality(status);
3407 status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
3408 meterSecond.withDimensionality(3, status);
3409 status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
3410 meterSecond.getSIPrefix(status);
3411 status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
3412 meterSecond.withSIPrefix(UMEASURE_SI_PREFIX_CENTI, status);
3413 status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
3414
3415 // Test that StringPiece does not overflow
3416 MeasureUnit centimeter3 = MeasureUnit::forIdentifier({secondCentimeter.getIdentifier(), 10}, status);
3417 verifySingleUnit(centimeter3, UMEASURE_SI_PREFIX_CENTI, 1, "centimeter");
3418 assertTrue("string piece equality", centimeter1 == centimeter3);
3419
3420 MeasureUnit footInch = MeasureUnit::forIdentifier("foot-and-inch", status);
3421 MeasureUnit inchFoot = MeasureUnit::forIdentifier("inch-and-foot", status);
3422
3423 const char* footInchSub[] = {"foot", "inch"};
3424 verifyMixedUnit(footInch, "foot-and-inch",
3425 footInchSub, UPRV_LENGTHOF(footInchSub));
3426 const char* inchFootSub[] = {"inch", "foot"};
3427 verifyMixedUnit(inchFoot, "inch-and-foot",
3428 inchFootSub, UPRV_LENGTHOF(inchFootSub));
3429
3430 assertTrue("order matters inequality", footInch != inchFoot);
3431
3432 MeasureUnit dimensionless;
3433 MeasureUnit dimensionless2 = MeasureUnit::forIdentifier("", status);
3434 status.errIfFailureAndReset("Dimensionless MeasureUnit.");
3435 assertTrue("dimensionless equality", dimensionless == dimensionless2);
3436
3437 // We support starting from an "identity" MeasureUnit and then combining it
3438 // with others via product:
3439 MeasureUnit kilometer2 = dimensionless.product(kilometer, status);
3440 status.errIfFailureAndReset("dimensionless.product(kilometer, status)");
3441 verifySingleUnit(kilometer2, UMEASURE_SI_PREFIX_KILO, 1, "kilometer");
3442 assertTrue("kilometer equality", kilometer == kilometer2);
3443
3444 // Test out-of-range powers
3445 MeasureUnit power15 = MeasureUnit::forIdentifier("p15-kilometer", status);
3446 verifySingleUnit(power15, UMEASURE_SI_PREFIX_KILO, 15, "p15-kilometer");
3447 status.errIfFailureAndReset();
3448 MeasureUnit power16a = MeasureUnit::forIdentifier("p16-kilometer", status);
3449 status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
3450 MeasureUnit power16b = power15.product(kilometer, status);
3451 status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
3452 MeasureUnit powerN15 = MeasureUnit::forIdentifier("per-p15-kilometer", status);
3453 verifySingleUnit(powerN15, UMEASURE_SI_PREFIX_KILO, -15, "per-p15-kilometer");
3454 status.errIfFailureAndReset();
3455 MeasureUnit powerN16a = MeasureUnit::forIdentifier("per-p16-kilometer", status);
3456 status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
3457 MeasureUnit powerN16b = powerN15.product(overQuarticKilometer1, status);
3458 status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
3459 }
3460
TestDimensionlessBehaviour()3461 void MeasureFormatTest::TestDimensionlessBehaviour() {
3462 IcuTestErrorCode status(*this, "TestDimensionlessBehaviour");
3463 MeasureUnit dimensionless;
3464 MeasureUnit modified;
3465
3466 // At the time of writing, each of the seven groups below caused
3467 // Parser::from("") to be called:
3468
3469 // splitToSingleUnits
3470 int32_t count;
3471 LocalArray<MeasureUnit> singles = dimensionless.splitToSingleUnits(count, status);
3472 status.errIfFailureAndReset("dimensionless.splitToSingleUnits(...)");
3473 assertEquals("no singles in dimensionless", 0, count);
3474
3475 // product(dimensionless)
3476 MeasureUnit mile = MeasureUnit::getMile();
3477 mile = mile.product(dimensionless, status);
3478 status.errIfFailureAndReset("mile.product(dimensionless, ...)");
3479 verifySingleUnit(mile, UMEASURE_SI_PREFIX_ONE, 1, "mile");
3480
3481 // dimensionless.getSIPrefix()
3482 UMeasureSIPrefix siPrefix = dimensionless.getSIPrefix(status);
3483 status.errIfFailureAndReset("dimensionless.getSIPrefix(...)");
3484 assertEquals("dimensionless SIPrefix", UMEASURE_SI_PREFIX_ONE, siPrefix);
3485
3486 // dimensionless.withSIPrefix()
3487 modified = dimensionless.withSIPrefix(UMEASURE_SI_PREFIX_KILO, status);
3488 status.errIfFailureAndReset("dimensionless.withSIPrefix(...)");
3489 singles = modified.splitToSingleUnits(count, status);
3490 assertEquals("no singles in modified", 0, count);
3491 siPrefix = modified.getSIPrefix(status);
3492 status.errIfFailureAndReset("modified.getSIPrefix(...)");
3493 assertEquals("modified SIPrefix", UMEASURE_SI_PREFIX_ONE, siPrefix);
3494
3495 // dimensionless.getComplexity()
3496 UMeasureUnitComplexity complexity = dimensionless.getComplexity(status);
3497 status.errIfFailureAndReset("dimensionless.getComplexity(...)");
3498 assertEquals("dimensionless complexity", UMEASURE_UNIT_SINGLE, complexity);
3499
3500 // Dimensionality is mostly meaningless for dimensionless units, but it's
3501 // still considered a SINGLE unit, so this code doesn't throw errors:
3502
3503 // dimensionless.getDimensionality()
3504 int32_t dimensionality = dimensionless.getDimensionality(status);
3505 status.errIfFailureAndReset("dimensionless.getDimensionality(...)");
3506 assertEquals("dimensionless dimensionality", 0, dimensionality);
3507
3508 // dimensionless.withDimensionality()
3509 dimensionless.withDimensionality(-1, status);
3510 status.errIfFailureAndReset("dimensionless.withDimensionality(...)");
3511 dimensionality = dimensionless.getDimensionality(status);
3512 status.errIfFailureAndReset("dimensionless.getDimensionality(...)");
3513 assertEquals("dimensionless dimensionality", 0, dimensionality);
3514 }
3515
3516 // ICU-21060
Test21060_AddressSanitizerProblem()3517 void MeasureFormatTest::Test21060_AddressSanitizerProblem() {
3518 IcuTestErrorCode status(*this, "Test21060_AddressSanitizerProblem");
3519
3520 MeasureUnit first = MeasureUnit::forIdentifier("", status);
3521 status.errIfFailureAndReset();
3522
3523 // Experimentally, a compound unit like "kilogram-meter" failed. A single
3524 // unit like "kilogram" or "meter" did not fail, did not trigger the
3525 // problem.
3526 MeasureUnit crux = MeasureUnit::forIdentifier("per-meter", status);
3527
3528 // Heap allocation of a new CharString for first.identifier happens here:
3529 first = first.product(crux, status);
3530
3531 // Constructing second from first's identifier resulted in a failure later,
3532 // as second held a reference to a substring of first's identifier:
3533 MeasureUnit second = MeasureUnit::forIdentifier(first.getIdentifier(), status);
3534
3535 // Heap is freed here, as an old first.identifier CharString is deallocated
3536 // and a new CharString is allocated:
3537 first = first.product(crux, status);
3538
3539 // Proving we've had no failure yet:
3540 status.errIfFailureAndReset();
3541
3542 // heap-use-after-free failure happened here, since a SingleUnitImpl had
3543 // held onto a StringPiece pointing at a substring of an identifier that was
3544 // freed above:
3545 second = second.product(crux, status);
3546
3547 status.errIfFailureAndReset();
3548 }
3549
3550
verifyFieldPosition(const char * description,const MeasureFormat & fmt,const UnicodeString & prefix,const Measure * measures,int32_t measureCount,NumberFormat::EAlignmentFields field,int32_t start,int32_t end)3551 void MeasureFormatTest::verifyFieldPosition(
3552 const char *description,
3553 const MeasureFormat &fmt,
3554 const UnicodeString &prefix,
3555 const Measure *measures,
3556 int32_t measureCount,
3557 NumberFormat::EAlignmentFields field,
3558 int32_t start,
3559 int32_t end) {
3560 // 8 char lead
3561 UnicodeString result(prefix);
3562 FieldPosition pos(field);
3563 UErrorCode status = U_ZERO_ERROR;
3564 CharString ch;
3565 const char *descPrefix = ch.append(description, status)
3566 .append(": ", status).data();
3567 CharString beginIndex;
3568 beginIndex.append(descPrefix, status).append("beginIndex", status);
3569 CharString endIndex;
3570 endIndex.append(descPrefix, status).append("endIndex", status);
3571 fmt.formatMeasures(measures, measureCount, result, pos, status);
3572 if (!assertSuccess("Error formatting", status)) {
3573 return;
3574 }
3575 assertEquals(beginIndex.data(), start, pos.getBeginIndex());
3576 assertEquals(endIndex.data(), end, pos.getEndIndex());
3577 }
3578
verifyFormat(const char * description,const MeasureFormat & fmt,const Measure * measures,int32_t measureCount,const char * expected)3579 void MeasureFormatTest::verifyFormat(
3580 const char *description,
3581 const MeasureFormat &fmt,
3582 const Measure *measures,
3583 int32_t measureCount,
3584 const char *expected) {
3585 verifyFormatWithPrefix(
3586 description,
3587 fmt,
3588 "",
3589 measures,
3590 measureCount,
3591 expected);
3592 }
3593
verifyFormatWithPrefix(const char * description,const MeasureFormat & fmt,const UnicodeString & prefix,const Measure * measures,int32_t measureCount,const char * expected)3594 void MeasureFormatTest::verifyFormatWithPrefix(
3595 const char *description,
3596 const MeasureFormat &fmt,
3597 const UnicodeString &prefix,
3598 const Measure *measures,
3599 int32_t measureCount,
3600 const char *expected) {
3601 UnicodeString result(prefix);
3602 FieldPosition pos(FieldPosition::DONT_CARE);
3603 UErrorCode status = U_ZERO_ERROR;
3604 fmt.formatMeasures(measures, measureCount, result, pos, status);
3605 if (!assertSuccess("Error formatting", status)) {
3606 return;
3607 }
3608 assertEquals(description, ctou(expected), result);
3609 }
3610
verifyFormat(const char * description,const MeasureFormat & fmt,const ExpectedResult * expectedResults,int32_t count)3611 void MeasureFormatTest::verifyFormat(
3612 const char *description,
3613 const MeasureFormat &fmt,
3614 const ExpectedResult *expectedResults,
3615 int32_t count) {
3616 for (int32_t i = 0; i < count; ++i) {
3617 verifyFormat(description, fmt, expectedResults[i].measures, expectedResults[i].count, expectedResults[i].expected);
3618 }
3619 }
3620
verifySingleUnit(const MeasureUnit & unit,UMeasureSIPrefix siPrefix,int8_t power,const char * identifier)3621 void MeasureFormatTest::verifySingleUnit(
3622 const MeasureUnit& unit,
3623 UMeasureSIPrefix siPrefix,
3624 int8_t power,
3625 const char* identifier) {
3626 IcuTestErrorCode status(*this, "verifySingleUnit");
3627 UnicodeString uid(identifier, -1, US_INV);
3628 assertEquals(uid + ": SI prefix",
3629 siPrefix,
3630 unit.getSIPrefix(status));
3631 status.errIfFailureAndReset("%s: SI prefix", identifier);
3632 assertEquals(uid + ": Power",
3633 static_cast<int32_t>(power),
3634 static_cast<int32_t>(unit.getDimensionality(status)));
3635 status.errIfFailureAndReset("%s: Power", identifier);
3636 assertEquals(uid + ": Identifier",
3637 identifier,
3638 unit.getIdentifier());
3639 status.errIfFailureAndReset("%s: Identifier", identifier);
3640 assertTrue(uid + ": Constructor",
3641 unit == MeasureUnit::forIdentifier(identifier, status));
3642 status.errIfFailureAndReset("%s: Constructor", identifier);
3643 assertEquals(uid + ": Complexity",
3644 UMEASURE_UNIT_SINGLE,
3645 unit.getComplexity(status));
3646 status.errIfFailureAndReset("%s: Complexity", identifier);
3647 }
3648
verifyCompoundUnit(const MeasureUnit & unit,const char * identifier,const char ** subIdentifiers,int32_t subIdentifierCount)3649 void MeasureFormatTest::verifyCompoundUnit(
3650 const MeasureUnit& unit,
3651 const char* identifier,
3652 const char** subIdentifiers,
3653 int32_t subIdentifierCount) {
3654 IcuTestErrorCode status(*this, "verifyCompoundUnit");
3655 UnicodeString uid(identifier, -1, US_INV);
3656 assertEquals(uid + ": Identifier",
3657 identifier,
3658 unit.getIdentifier());
3659 status.errIfFailureAndReset("%s: Identifier", identifier);
3660 assertTrue(uid + ": Constructor",
3661 unit == MeasureUnit::forIdentifier(identifier, status));
3662 status.errIfFailureAndReset("%s: Constructor", identifier);
3663 assertEquals(uid + ": Complexity",
3664 UMEASURE_UNIT_COMPOUND,
3665 unit.getComplexity(status));
3666 status.errIfFailureAndReset("%s: Complexity", identifier);
3667
3668 int32_t length;
3669 LocalArray<MeasureUnit> subUnits = unit.splitToSingleUnits(length, status);
3670 assertEquals(uid + ": Length", subIdentifierCount, length);
3671 for (int32_t i = 0;; i++) {
3672 if (i >= subIdentifierCount || i >= length) break;
3673 assertEquals(uid + ": Sub-unit #" + Int64ToUnicodeString(i),
3674 subIdentifiers[i],
3675 subUnits[i].getIdentifier());
3676 assertEquals(uid + ": Sub-unit Complexity",
3677 UMEASURE_UNIT_SINGLE,
3678 subUnits[i].getComplexity(status));
3679 }
3680 }
3681
verifyMixedUnit(const MeasureUnit & unit,const char * identifier,const char ** subIdentifiers,int32_t subIdentifierCount)3682 void MeasureFormatTest::verifyMixedUnit(
3683 const MeasureUnit& unit,
3684 const char* identifier,
3685 const char** subIdentifiers,
3686 int32_t subIdentifierCount) {
3687 IcuTestErrorCode status(*this, "verifyMixedUnit");
3688 UnicodeString uid(identifier, -1, US_INV);
3689 assertEquals(uid + ": Identifier",
3690 identifier,
3691 unit.getIdentifier());
3692 status.errIfFailureAndReset("%s: Identifier", identifier);
3693 assertTrue(uid + ": Constructor",
3694 unit == MeasureUnit::forIdentifier(identifier, status));
3695 status.errIfFailureAndReset("%s: Constructor", identifier);
3696 assertEquals(uid + ": Complexity",
3697 UMEASURE_UNIT_MIXED,
3698 unit.getComplexity(status));
3699 status.errIfFailureAndReset("%s: Complexity", identifier);
3700
3701 int32_t length;
3702 LocalArray<MeasureUnit> subUnits = unit.splitToSingleUnits(length, status);
3703 assertEquals(uid + ": Length", subIdentifierCount, length);
3704 for (int32_t i = 0;; i++) {
3705 if (i >= subIdentifierCount || i >= length) break;
3706 assertEquals(uid + ": Sub-unit #" + Int64ToUnicodeString(i),
3707 subIdentifiers[i],
3708 subUnits[i].getIdentifier());
3709 }
3710 }
3711
createMeasureFormatTest()3712 extern IntlTest *createMeasureFormatTest() {
3713 return new MeasureFormatTest();
3714 }
3715
3716 #endif
3717
3718