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 32 struct ExpectedResult { 33 const Measure *measures; 34 int32_t count; 35 const char *expected; 36 }; 37 38 class MeasureFormatTest : public IntlTest { 39 public: 40 MeasureFormatTest() { 41 } 42 43 void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0); 44 private: 45 void TestBasic(); 46 void TestCompatible53(); 47 void TestCompatible54(); 48 void TestCompatible55(); 49 void TestCompatible56(); 50 void TestCompatible57(); 51 void TestCompatible58(); 52 void TestCompatible59(); 53 void TestGetAvailable(); 54 void TestExamplesInDocs(); 55 void TestFormatPeriodEn(); 56 void Test10219FractionalPlurals(); 57 void TestGreek(); 58 void TestFormatSingleArg(); 59 void TestFormatMeasuresZeroArg(); 60 void TestSimplePer(); 61 void TestNumeratorPlurals(); 62 void TestMultiples(); 63 void TestManyLocaleDurations(); 64 void TestGram(); 65 void TestCurrencies(); 66 void TestDisplayNames(); 67 void TestFieldPosition(); 68 void TestFieldPositionMultiple(); 69 void TestBadArg(); 70 void TestEquality(); 71 void TestGroupingSeparator(); 72 void TestDoubleZero(); 73 void TestUnitPerUnitResolution(); 74 void TestIndividualPluralFallback(); 75 void verifyFormat( 76 const char *description, 77 const MeasureFormat &fmt, 78 const Measure *measures, 79 int32_t measureCount, 80 const char *expected); 81 void verifyFormatWithPrefix( 82 const char *description, 83 const MeasureFormat &fmt, 84 const UnicodeString &prefix, 85 const Measure *measures, 86 int32_t measureCount, 87 const char *expected); 88 void verifyFormat( 89 const char *description, 90 const MeasureFormat &fmt, 91 const ExpectedResult *expectedResults, 92 int32_t count); 93 void helperTestSimplePer( 94 const Locale &locale, 95 UMeasureFormatWidth width, 96 double value, 97 const MeasureUnit &unit, 98 const MeasureUnit &perUnit, 99 const char *expected); 100 void helperTestSimplePer( 101 const Locale &locale, 102 UMeasureFormatWidth width, 103 double value, 104 const MeasureUnit &unit, 105 const MeasureUnit &perUnit, 106 const char *expected, 107 int32_t field, 108 int32_t expected_start, 109 int32_t expected_end); 110 void helperTestMultiples( 111 const Locale &locale, 112 UMeasureFormatWidth width, 113 const char *expected); 114 void helperTestManyLocaleDurations( 115 const char *localeID, 116 UMeasureFormatWidth width, 117 const Measure *measures, 118 int32_t measureCount, 119 const char *expected); 120 void helperTestDisplayName( 121 const MeasureUnit *unit, 122 const char *localeID, 123 UMeasureFormatWidth width, 124 const char *expected); 125 void verifyFieldPosition( 126 const char *description, 127 const MeasureFormat &fmt, 128 const UnicodeString &prefix, 129 const Measure *measures, 130 int32_t measureCount, 131 NumberFormat::EAlignmentFields field, 132 int32_t start, 133 int32_t end); 134 }; 135 136 void MeasureFormatTest::runIndexedTest( 137 int32_t index, UBool exec, const char *&name, char *) { 138 if (exec) { 139 logln("TestSuite MeasureFormatTest: "); 140 } 141 TESTCASE_AUTO_BEGIN; 142 TESTCASE_AUTO(TestBasic); 143 TESTCASE_AUTO(TestCompatible53); 144 TESTCASE_AUTO(TestCompatible54); 145 TESTCASE_AUTO(TestCompatible55); 146 TESTCASE_AUTO(TestCompatible56); 147 TESTCASE_AUTO(TestCompatible57); 148 TESTCASE_AUTO(TestCompatible58); 149 TESTCASE_AUTO(TestCompatible59); 150 TESTCASE_AUTO(TestGetAvailable); 151 TESTCASE_AUTO(TestExamplesInDocs); 152 TESTCASE_AUTO(TestFormatPeriodEn); 153 TESTCASE_AUTO(Test10219FractionalPlurals); 154 TESTCASE_AUTO(TestGreek); 155 TESTCASE_AUTO(TestFormatSingleArg); 156 TESTCASE_AUTO(TestFormatMeasuresZeroArg); 157 TESTCASE_AUTO(TestSimplePer); 158 TESTCASE_AUTO(TestNumeratorPlurals); 159 TESTCASE_AUTO(TestMultiples); 160 TESTCASE_AUTO(TestManyLocaleDurations); 161 TESTCASE_AUTO(TestGram); 162 TESTCASE_AUTO(TestCurrencies); 163 TESTCASE_AUTO(TestDisplayNames); 164 TESTCASE_AUTO(TestFieldPosition); 165 TESTCASE_AUTO(TestFieldPositionMultiple); 166 TESTCASE_AUTO(TestBadArg); 167 TESTCASE_AUTO(TestEquality); 168 TESTCASE_AUTO(TestGroupingSeparator); 169 TESTCASE_AUTO(TestDoubleZero); 170 TESTCASE_AUTO(TestUnitPerUnitResolution); 171 TESTCASE_AUTO(TestIndividualPluralFallback); 172 TESTCASE_AUTO_END; 173 } 174 175 void MeasureFormatTest::TestCompatible53() { 176 UErrorCode status = U_ZERO_ERROR; 177 LocalPointer<MeasureUnit> measureUnit; 178 measureUnit.adoptInstead(MeasureUnit::createGForce(status)); 179 measureUnit.adoptInstead(MeasureUnit::createArcMinute(status)); 180 measureUnit.adoptInstead(MeasureUnit::createArcSecond(status)); 181 measureUnit.adoptInstead(MeasureUnit::createDegree(status)); 182 measureUnit.adoptInstead(MeasureUnit::createAcre(status)); 183 measureUnit.adoptInstead(MeasureUnit::createHectare(status)); 184 measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status)); 185 measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status)); 186 measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status)); 187 measureUnit.adoptInstead(MeasureUnit::createSquareMile(status)); 188 measureUnit.adoptInstead(MeasureUnit::createDay(status)); 189 measureUnit.adoptInstead(MeasureUnit::createHour(status)); 190 measureUnit.adoptInstead(MeasureUnit::createMillisecond(status)); 191 measureUnit.adoptInstead(MeasureUnit::createMinute(status)); 192 measureUnit.adoptInstead(MeasureUnit::createMonth(status)); 193 measureUnit.adoptInstead(MeasureUnit::createSecond(status)); 194 measureUnit.adoptInstead(MeasureUnit::createWeek(status)); 195 measureUnit.adoptInstead(MeasureUnit::createYear(status)); 196 measureUnit.adoptInstead(MeasureUnit::createCentimeter(status)); 197 measureUnit.adoptInstead(MeasureUnit::createFoot(status)); 198 measureUnit.adoptInstead(MeasureUnit::createInch(status)); 199 measureUnit.adoptInstead(MeasureUnit::createKilometer(status)); 200 measureUnit.adoptInstead(MeasureUnit::createLightYear(status)); 201 measureUnit.adoptInstead(MeasureUnit::createMeter(status)); 202 measureUnit.adoptInstead(MeasureUnit::createMile(status)); 203 measureUnit.adoptInstead(MeasureUnit::createMillimeter(status)); 204 measureUnit.adoptInstead(MeasureUnit::createPicometer(status)); 205 measureUnit.adoptInstead(MeasureUnit::createYard(status)); 206 measureUnit.adoptInstead(MeasureUnit::createGram(status)); 207 measureUnit.adoptInstead(MeasureUnit::createKilogram(status)); 208 measureUnit.adoptInstead(MeasureUnit::createOunce(status)); 209 measureUnit.adoptInstead(MeasureUnit::createPound(status)); 210 measureUnit.adoptInstead(MeasureUnit::createHorsepower(status)); 211 measureUnit.adoptInstead(MeasureUnit::createKilowatt(status)); 212 measureUnit.adoptInstead(MeasureUnit::createWatt(status)); 213 measureUnit.adoptInstead(MeasureUnit::createHectopascal(status)); 214 measureUnit.adoptInstead(MeasureUnit::createInchHg(status)); 215 measureUnit.adoptInstead(MeasureUnit::createMillibar(status)); 216 measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status)); 217 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status)); 218 measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status)); 219 measureUnit.adoptInstead(MeasureUnit::createCelsius(status)); 220 measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status)); 221 measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status)); 222 measureUnit.adoptInstead(MeasureUnit::createCubicMile(status)); 223 measureUnit.adoptInstead(MeasureUnit::createLiter(status)); 224 assertSuccess("", status); 225 } 226 227 void MeasureFormatTest::TestCompatible54() { 228 UErrorCode status = U_ZERO_ERROR; 229 LocalPointer<MeasureUnit> measureUnit; 230 measureUnit.adoptInstead(MeasureUnit::createGForce(status)); 231 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecondSquared(status)); 232 measureUnit.adoptInstead(MeasureUnit::createArcMinute(status)); 233 measureUnit.adoptInstead(MeasureUnit::createArcSecond(status)); 234 measureUnit.adoptInstead(MeasureUnit::createDegree(status)); 235 measureUnit.adoptInstead(MeasureUnit::createRadian(status)); 236 measureUnit.adoptInstead(MeasureUnit::createAcre(status)); 237 measureUnit.adoptInstead(MeasureUnit::createHectare(status)); 238 measureUnit.adoptInstead(MeasureUnit::createSquareCentimeter(status)); 239 measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status)); 240 measureUnit.adoptInstead(MeasureUnit::createSquareInch(status)); 241 measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status)); 242 measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status)); 243 measureUnit.adoptInstead(MeasureUnit::createSquareMile(status)); 244 measureUnit.adoptInstead(MeasureUnit::createSquareYard(status)); 245 measureUnit.adoptInstead(MeasureUnit::createLiterPerKilometer(status)); 246 measureUnit.adoptInstead(MeasureUnit::createMilePerGallon(status)); 247 measureUnit.adoptInstead(MeasureUnit::createBit(status)); 248 measureUnit.adoptInstead(MeasureUnit::createByte(status)); 249 measureUnit.adoptInstead(MeasureUnit::createGigabit(status)); 250 measureUnit.adoptInstead(MeasureUnit::createGigabyte(status)); 251 measureUnit.adoptInstead(MeasureUnit::createKilobit(status)); 252 measureUnit.adoptInstead(MeasureUnit::createKilobyte(status)); 253 measureUnit.adoptInstead(MeasureUnit::createMegabit(status)); 254 measureUnit.adoptInstead(MeasureUnit::createMegabyte(status)); 255 measureUnit.adoptInstead(MeasureUnit::createTerabit(status)); 256 measureUnit.adoptInstead(MeasureUnit::createTerabyte(status)); 257 measureUnit.adoptInstead(MeasureUnit::createDay(status)); 258 measureUnit.adoptInstead(MeasureUnit::createHour(status)); 259 measureUnit.adoptInstead(MeasureUnit::createMicrosecond(status)); 260 measureUnit.adoptInstead(MeasureUnit::createMillisecond(status)); 261 measureUnit.adoptInstead(MeasureUnit::createMinute(status)); 262 measureUnit.adoptInstead(MeasureUnit::createMonth(status)); 263 measureUnit.adoptInstead(MeasureUnit::createNanosecond(status)); 264 measureUnit.adoptInstead(MeasureUnit::createSecond(status)); 265 measureUnit.adoptInstead(MeasureUnit::createWeek(status)); 266 measureUnit.adoptInstead(MeasureUnit::createYear(status)); 267 measureUnit.adoptInstead(MeasureUnit::createAmpere(status)); 268 measureUnit.adoptInstead(MeasureUnit::createMilliampere(status)); 269 measureUnit.adoptInstead(MeasureUnit::createOhm(status)); 270 measureUnit.adoptInstead(MeasureUnit::createVolt(status)); 271 measureUnit.adoptInstead(MeasureUnit::createCalorie(status)); 272 measureUnit.adoptInstead(MeasureUnit::createFoodcalorie(status)); 273 measureUnit.adoptInstead(MeasureUnit::createJoule(status)); 274 measureUnit.adoptInstead(MeasureUnit::createKilocalorie(status)); 275 measureUnit.adoptInstead(MeasureUnit::createKilojoule(status)); 276 measureUnit.adoptInstead(MeasureUnit::createKilowattHour(status)); 277 measureUnit.adoptInstead(MeasureUnit::createGigahertz(status)); 278 measureUnit.adoptInstead(MeasureUnit::createHertz(status)); 279 measureUnit.adoptInstead(MeasureUnit::createKilohertz(status)); 280 measureUnit.adoptInstead(MeasureUnit::createMegahertz(status)); 281 measureUnit.adoptInstead(MeasureUnit::createAstronomicalUnit(status)); 282 measureUnit.adoptInstead(MeasureUnit::createCentimeter(status)); 283 measureUnit.adoptInstead(MeasureUnit::createDecimeter(status)); 284 measureUnit.adoptInstead(MeasureUnit::createFathom(status)); 285 measureUnit.adoptInstead(MeasureUnit::createFoot(status)); 286 measureUnit.adoptInstead(MeasureUnit::createFurlong(status)); 287 measureUnit.adoptInstead(MeasureUnit::createInch(status)); 288 measureUnit.adoptInstead(MeasureUnit::createKilometer(status)); 289 measureUnit.adoptInstead(MeasureUnit::createLightYear(status)); 290 measureUnit.adoptInstead(MeasureUnit::createMeter(status)); 291 measureUnit.adoptInstead(MeasureUnit::createMicrometer(status)); 292 measureUnit.adoptInstead(MeasureUnit::createMile(status)); 293 measureUnit.adoptInstead(MeasureUnit::createMillimeter(status)); 294 measureUnit.adoptInstead(MeasureUnit::createNanometer(status)); 295 measureUnit.adoptInstead(MeasureUnit::createNauticalMile(status)); 296 measureUnit.adoptInstead(MeasureUnit::createParsec(status)); 297 measureUnit.adoptInstead(MeasureUnit::createPicometer(status)); 298 measureUnit.adoptInstead(MeasureUnit::createYard(status)); 299 measureUnit.adoptInstead(MeasureUnit::createLux(status)); 300 measureUnit.adoptInstead(MeasureUnit::createCarat(status)); 301 measureUnit.adoptInstead(MeasureUnit::createGram(status)); 302 measureUnit.adoptInstead(MeasureUnit::createKilogram(status)); 303 measureUnit.adoptInstead(MeasureUnit::createMetricTon(status)); 304 measureUnit.adoptInstead(MeasureUnit::createMicrogram(status)); 305 measureUnit.adoptInstead(MeasureUnit::createMilligram(status)); 306 measureUnit.adoptInstead(MeasureUnit::createOunce(status)); 307 measureUnit.adoptInstead(MeasureUnit::createOunceTroy(status)); 308 measureUnit.adoptInstead(MeasureUnit::createPound(status)); 309 measureUnit.adoptInstead(MeasureUnit::createStone(status)); 310 measureUnit.adoptInstead(MeasureUnit::createTon(status)); 311 measureUnit.adoptInstead(MeasureUnit::createGigawatt(status)); 312 measureUnit.adoptInstead(MeasureUnit::createHorsepower(status)); 313 measureUnit.adoptInstead(MeasureUnit::createKilowatt(status)); 314 measureUnit.adoptInstead(MeasureUnit::createMegawatt(status)); 315 measureUnit.adoptInstead(MeasureUnit::createMilliwatt(status)); 316 measureUnit.adoptInstead(MeasureUnit::createWatt(status)); 317 measureUnit.adoptInstead(MeasureUnit::createHectopascal(status)); 318 measureUnit.adoptInstead(MeasureUnit::createInchHg(status)); 319 measureUnit.adoptInstead(MeasureUnit::createMillibar(status)); 320 measureUnit.adoptInstead(MeasureUnit::createMillimeterOfMercury(status)); 321 measureUnit.adoptInstead(MeasureUnit::createPoundPerSquareInch(status)); 322 measureUnit.adoptInstead(MeasureUnit::createKarat(status)); 323 measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status)); 324 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status)); 325 measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status)); 326 measureUnit.adoptInstead(MeasureUnit::createCelsius(status)); 327 measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status)); 328 measureUnit.adoptInstead(MeasureUnit::createKelvin(status)); 329 measureUnit.adoptInstead(MeasureUnit::createAcreFoot(status)); 330 measureUnit.adoptInstead(MeasureUnit::createBushel(status)); 331 measureUnit.adoptInstead(MeasureUnit::createCentiliter(status)); 332 measureUnit.adoptInstead(MeasureUnit::createCubicCentimeter(status)); 333 measureUnit.adoptInstead(MeasureUnit::createCubicFoot(status)); 334 measureUnit.adoptInstead(MeasureUnit::createCubicInch(status)); 335 measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status)); 336 measureUnit.adoptInstead(MeasureUnit::createCubicMeter(status)); 337 measureUnit.adoptInstead(MeasureUnit::createCubicMile(status)); 338 measureUnit.adoptInstead(MeasureUnit::createCubicYard(status)); 339 measureUnit.adoptInstead(MeasureUnit::createCup(status)); 340 measureUnit.adoptInstead(MeasureUnit::createDeciliter(status)); 341 measureUnit.adoptInstead(MeasureUnit::createFluidOunce(status)); 342 measureUnit.adoptInstead(MeasureUnit::createGallon(status)); 343 measureUnit.adoptInstead(MeasureUnit::createHectoliter(status)); 344 measureUnit.adoptInstead(MeasureUnit::createLiter(status)); 345 measureUnit.adoptInstead(MeasureUnit::createMegaliter(status)); 346 measureUnit.adoptInstead(MeasureUnit::createMilliliter(status)); 347 measureUnit.adoptInstead(MeasureUnit::createPint(status)); 348 measureUnit.adoptInstead(MeasureUnit::createQuart(status)); 349 measureUnit.adoptInstead(MeasureUnit::createTablespoon(status)); 350 measureUnit.adoptInstead(MeasureUnit::createTeaspoon(status)); 351 assertSuccess("", status); 352 } 353 354 void MeasureFormatTest::TestCompatible55() { 355 UErrorCode status = U_ZERO_ERROR; 356 LocalPointer<MeasureUnit> measureUnit; 357 measureUnit.adoptInstead(MeasureUnit::createGForce(status)); 358 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecondSquared(status)); 359 measureUnit.adoptInstead(MeasureUnit::createArcMinute(status)); 360 measureUnit.adoptInstead(MeasureUnit::createArcSecond(status)); 361 measureUnit.adoptInstead(MeasureUnit::createDegree(status)); 362 measureUnit.adoptInstead(MeasureUnit::createRadian(status)); 363 measureUnit.adoptInstead(MeasureUnit::createAcre(status)); 364 measureUnit.adoptInstead(MeasureUnit::createHectare(status)); 365 measureUnit.adoptInstead(MeasureUnit::createSquareCentimeter(status)); 366 measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status)); 367 measureUnit.adoptInstead(MeasureUnit::createSquareInch(status)); 368 measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status)); 369 measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status)); 370 measureUnit.adoptInstead(MeasureUnit::createSquareMile(status)); 371 measureUnit.adoptInstead(MeasureUnit::createSquareYard(status)); 372 measureUnit.adoptInstead(MeasureUnit::createLiterPerKilometer(status)); 373 measureUnit.adoptInstead(MeasureUnit::createMilePerGallon(status)); 374 measureUnit.adoptInstead(MeasureUnit::createBit(status)); 375 measureUnit.adoptInstead(MeasureUnit::createByte(status)); 376 measureUnit.adoptInstead(MeasureUnit::createGigabit(status)); 377 measureUnit.adoptInstead(MeasureUnit::createGigabyte(status)); 378 measureUnit.adoptInstead(MeasureUnit::createKilobit(status)); 379 measureUnit.adoptInstead(MeasureUnit::createKilobyte(status)); 380 measureUnit.adoptInstead(MeasureUnit::createMegabit(status)); 381 measureUnit.adoptInstead(MeasureUnit::createMegabyte(status)); 382 measureUnit.adoptInstead(MeasureUnit::createTerabit(status)); 383 measureUnit.adoptInstead(MeasureUnit::createTerabyte(status)); 384 measureUnit.adoptInstead(MeasureUnit::createDay(status)); 385 measureUnit.adoptInstead(MeasureUnit::createHour(status)); 386 measureUnit.adoptInstead(MeasureUnit::createMicrosecond(status)); 387 measureUnit.adoptInstead(MeasureUnit::createMillisecond(status)); 388 measureUnit.adoptInstead(MeasureUnit::createMinute(status)); 389 measureUnit.adoptInstead(MeasureUnit::createMonth(status)); 390 measureUnit.adoptInstead(MeasureUnit::createNanosecond(status)); 391 measureUnit.adoptInstead(MeasureUnit::createSecond(status)); 392 measureUnit.adoptInstead(MeasureUnit::createWeek(status)); 393 measureUnit.adoptInstead(MeasureUnit::createYear(status)); 394 measureUnit.adoptInstead(MeasureUnit::createAmpere(status)); 395 measureUnit.adoptInstead(MeasureUnit::createMilliampere(status)); 396 measureUnit.adoptInstead(MeasureUnit::createOhm(status)); 397 measureUnit.adoptInstead(MeasureUnit::createVolt(status)); 398 measureUnit.adoptInstead(MeasureUnit::createCalorie(status)); 399 measureUnit.adoptInstead(MeasureUnit::createFoodcalorie(status)); 400 measureUnit.adoptInstead(MeasureUnit::createJoule(status)); 401 measureUnit.adoptInstead(MeasureUnit::createKilocalorie(status)); 402 measureUnit.adoptInstead(MeasureUnit::createKilojoule(status)); 403 measureUnit.adoptInstead(MeasureUnit::createKilowattHour(status)); 404 measureUnit.adoptInstead(MeasureUnit::createGigahertz(status)); 405 measureUnit.adoptInstead(MeasureUnit::createHertz(status)); 406 measureUnit.adoptInstead(MeasureUnit::createKilohertz(status)); 407 measureUnit.adoptInstead(MeasureUnit::createMegahertz(status)); 408 measureUnit.adoptInstead(MeasureUnit::createAstronomicalUnit(status)); 409 measureUnit.adoptInstead(MeasureUnit::createCentimeter(status)); 410 measureUnit.adoptInstead(MeasureUnit::createDecimeter(status)); 411 measureUnit.adoptInstead(MeasureUnit::createFathom(status)); 412 measureUnit.adoptInstead(MeasureUnit::createFoot(status)); 413 measureUnit.adoptInstead(MeasureUnit::createFurlong(status)); 414 measureUnit.adoptInstead(MeasureUnit::createInch(status)); 415 measureUnit.adoptInstead(MeasureUnit::createKilometer(status)); 416 measureUnit.adoptInstead(MeasureUnit::createLightYear(status)); 417 measureUnit.adoptInstead(MeasureUnit::createMeter(status)); 418 measureUnit.adoptInstead(MeasureUnit::createMicrometer(status)); 419 measureUnit.adoptInstead(MeasureUnit::createMile(status)); 420 measureUnit.adoptInstead(MeasureUnit::createMillimeter(status)); 421 measureUnit.adoptInstead(MeasureUnit::createNanometer(status)); 422 measureUnit.adoptInstead(MeasureUnit::createNauticalMile(status)); 423 measureUnit.adoptInstead(MeasureUnit::createParsec(status)); 424 measureUnit.adoptInstead(MeasureUnit::createPicometer(status)); 425 measureUnit.adoptInstead(MeasureUnit::createYard(status)); 426 measureUnit.adoptInstead(MeasureUnit::createLux(status)); 427 measureUnit.adoptInstead(MeasureUnit::createCarat(status)); 428 measureUnit.adoptInstead(MeasureUnit::createGram(status)); 429 measureUnit.adoptInstead(MeasureUnit::createKilogram(status)); 430 measureUnit.adoptInstead(MeasureUnit::createMetricTon(status)); 431 measureUnit.adoptInstead(MeasureUnit::createMicrogram(status)); 432 measureUnit.adoptInstead(MeasureUnit::createMilligram(status)); 433 measureUnit.adoptInstead(MeasureUnit::createOunce(status)); 434 measureUnit.adoptInstead(MeasureUnit::createOunceTroy(status)); 435 measureUnit.adoptInstead(MeasureUnit::createPound(status)); 436 measureUnit.adoptInstead(MeasureUnit::createStone(status)); 437 measureUnit.adoptInstead(MeasureUnit::createTon(status)); 438 measureUnit.adoptInstead(MeasureUnit::createGigawatt(status)); 439 measureUnit.adoptInstead(MeasureUnit::createHorsepower(status)); 440 measureUnit.adoptInstead(MeasureUnit::createKilowatt(status)); 441 measureUnit.adoptInstead(MeasureUnit::createMegawatt(status)); 442 measureUnit.adoptInstead(MeasureUnit::createMilliwatt(status)); 443 measureUnit.adoptInstead(MeasureUnit::createWatt(status)); 444 measureUnit.adoptInstead(MeasureUnit::createHectopascal(status)); 445 measureUnit.adoptInstead(MeasureUnit::createInchHg(status)); 446 measureUnit.adoptInstead(MeasureUnit::createMillibar(status)); 447 measureUnit.adoptInstead(MeasureUnit::createMillimeterOfMercury(status)); 448 measureUnit.adoptInstead(MeasureUnit::createPoundPerSquareInch(status)); 449 measureUnit.adoptInstead(MeasureUnit::createKarat(status)); 450 measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status)); 451 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status)); 452 measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status)); 453 measureUnit.adoptInstead(MeasureUnit::createCelsius(status)); 454 measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status)); 455 measureUnit.adoptInstead(MeasureUnit::createGenericTemperature(status)); 456 measureUnit.adoptInstead(MeasureUnit::createKelvin(status)); 457 measureUnit.adoptInstead(MeasureUnit::createAcreFoot(status)); 458 measureUnit.adoptInstead(MeasureUnit::createBushel(status)); 459 measureUnit.adoptInstead(MeasureUnit::createCentiliter(status)); 460 measureUnit.adoptInstead(MeasureUnit::createCubicCentimeter(status)); 461 measureUnit.adoptInstead(MeasureUnit::createCubicFoot(status)); 462 measureUnit.adoptInstead(MeasureUnit::createCubicInch(status)); 463 measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status)); 464 measureUnit.adoptInstead(MeasureUnit::createCubicMeter(status)); 465 measureUnit.adoptInstead(MeasureUnit::createCubicMile(status)); 466 measureUnit.adoptInstead(MeasureUnit::createCubicYard(status)); 467 measureUnit.adoptInstead(MeasureUnit::createCup(status)); 468 measureUnit.adoptInstead(MeasureUnit::createDeciliter(status)); 469 measureUnit.adoptInstead(MeasureUnit::createFluidOunce(status)); 470 measureUnit.adoptInstead(MeasureUnit::createGallon(status)); 471 measureUnit.adoptInstead(MeasureUnit::createHectoliter(status)); 472 measureUnit.adoptInstead(MeasureUnit::createLiter(status)); 473 measureUnit.adoptInstead(MeasureUnit::createMegaliter(status)); 474 measureUnit.adoptInstead(MeasureUnit::createMilliliter(status)); 475 measureUnit.adoptInstead(MeasureUnit::createPint(status)); 476 measureUnit.adoptInstead(MeasureUnit::createQuart(status)); 477 measureUnit.adoptInstead(MeasureUnit::createTablespoon(status)); 478 measureUnit.adoptInstead(MeasureUnit::createTeaspoon(status)); 479 assertSuccess("", status); 480 } 481 482 void MeasureFormatTest::TestCompatible56() { 483 UErrorCode status = U_ZERO_ERROR; 484 LocalPointer<MeasureUnit> measureUnit; 485 measureUnit.adoptInstead(MeasureUnit::createGForce(status)); 486 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecondSquared(status)); 487 measureUnit.adoptInstead(MeasureUnit::createArcMinute(status)); 488 measureUnit.adoptInstead(MeasureUnit::createArcSecond(status)); 489 measureUnit.adoptInstead(MeasureUnit::createDegree(status)); 490 measureUnit.adoptInstead(MeasureUnit::createRadian(status)); 491 measureUnit.adoptInstead(MeasureUnit::createRevolutionAngle(status)); 492 measureUnit.adoptInstead(MeasureUnit::createAcre(status)); 493 measureUnit.adoptInstead(MeasureUnit::createHectare(status)); 494 measureUnit.adoptInstead(MeasureUnit::createSquareCentimeter(status)); 495 measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status)); 496 measureUnit.adoptInstead(MeasureUnit::createSquareInch(status)); 497 measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status)); 498 measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status)); 499 measureUnit.adoptInstead(MeasureUnit::createSquareMile(status)); 500 measureUnit.adoptInstead(MeasureUnit::createSquareYard(status)); 501 measureUnit.adoptInstead(MeasureUnit::createLiterPer100Kilometers(status)); 502 measureUnit.adoptInstead(MeasureUnit::createLiterPerKilometer(status)); 503 measureUnit.adoptInstead(MeasureUnit::createMilePerGallon(status)); 504 measureUnit.adoptInstead(MeasureUnit::createBit(status)); 505 measureUnit.adoptInstead(MeasureUnit::createByte(status)); 506 measureUnit.adoptInstead(MeasureUnit::createGigabit(status)); 507 measureUnit.adoptInstead(MeasureUnit::createGigabyte(status)); 508 measureUnit.adoptInstead(MeasureUnit::createKilobit(status)); 509 measureUnit.adoptInstead(MeasureUnit::createKilobyte(status)); 510 measureUnit.adoptInstead(MeasureUnit::createMegabit(status)); 511 measureUnit.adoptInstead(MeasureUnit::createMegabyte(status)); 512 measureUnit.adoptInstead(MeasureUnit::createTerabit(status)); 513 measureUnit.adoptInstead(MeasureUnit::createTerabyte(status)); 514 measureUnit.adoptInstead(MeasureUnit::createCentury(status)); 515 measureUnit.adoptInstead(MeasureUnit::createDay(status)); 516 measureUnit.adoptInstead(MeasureUnit::createHour(status)); 517 measureUnit.adoptInstead(MeasureUnit::createMicrosecond(status)); 518 measureUnit.adoptInstead(MeasureUnit::createMillisecond(status)); 519 measureUnit.adoptInstead(MeasureUnit::createMinute(status)); 520 measureUnit.adoptInstead(MeasureUnit::createMonth(status)); 521 measureUnit.adoptInstead(MeasureUnit::createNanosecond(status)); 522 measureUnit.adoptInstead(MeasureUnit::createSecond(status)); 523 measureUnit.adoptInstead(MeasureUnit::createWeek(status)); 524 measureUnit.adoptInstead(MeasureUnit::createYear(status)); 525 measureUnit.adoptInstead(MeasureUnit::createAmpere(status)); 526 measureUnit.adoptInstead(MeasureUnit::createMilliampere(status)); 527 measureUnit.adoptInstead(MeasureUnit::createOhm(status)); 528 measureUnit.adoptInstead(MeasureUnit::createVolt(status)); 529 measureUnit.adoptInstead(MeasureUnit::createCalorie(status)); 530 measureUnit.adoptInstead(MeasureUnit::createFoodcalorie(status)); 531 measureUnit.adoptInstead(MeasureUnit::createJoule(status)); 532 measureUnit.adoptInstead(MeasureUnit::createKilocalorie(status)); 533 measureUnit.adoptInstead(MeasureUnit::createKilojoule(status)); 534 measureUnit.adoptInstead(MeasureUnit::createKilowattHour(status)); 535 measureUnit.adoptInstead(MeasureUnit::createGigahertz(status)); 536 measureUnit.adoptInstead(MeasureUnit::createHertz(status)); 537 measureUnit.adoptInstead(MeasureUnit::createKilohertz(status)); 538 measureUnit.adoptInstead(MeasureUnit::createMegahertz(status)); 539 measureUnit.adoptInstead(MeasureUnit::createAstronomicalUnit(status)); 540 measureUnit.adoptInstead(MeasureUnit::createCentimeter(status)); 541 measureUnit.adoptInstead(MeasureUnit::createDecimeter(status)); 542 measureUnit.adoptInstead(MeasureUnit::createFathom(status)); 543 measureUnit.adoptInstead(MeasureUnit::createFoot(status)); 544 measureUnit.adoptInstead(MeasureUnit::createFurlong(status)); 545 measureUnit.adoptInstead(MeasureUnit::createInch(status)); 546 measureUnit.adoptInstead(MeasureUnit::createKilometer(status)); 547 measureUnit.adoptInstead(MeasureUnit::createLightYear(status)); 548 measureUnit.adoptInstead(MeasureUnit::createMeter(status)); 549 measureUnit.adoptInstead(MeasureUnit::createMicrometer(status)); 550 measureUnit.adoptInstead(MeasureUnit::createMile(status)); 551 measureUnit.adoptInstead(MeasureUnit::createMileScandinavian(status)); 552 measureUnit.adoptInstead(MeasureUnit::createMillimeter(status)); 553 measureUnit.adoptInstead(MeasureUnit::createNanometer(status)); 554 measureUnit.adoptInstead(MeasureUnit::createNauticalMile(status)); 555 measureUnit.adoptInstead(MeasureUnit::createParsec(status)); 556 measureUnit.adoptInstead(MeasureUnit::createPicometer(status)); 557 measureUnit.adoptInstead(MeasureUnit::createYard(status)); 558 measureUnit.adoptInstead(MeasureUnit::createLux(status)); 559 measureUnit.adoptInstead(MeasureUnit::createCarat(status)); 560 measureUnit.adoptInstead(MeasureUnit::createGram(status)); 561 measureUnit.adoptInstead(MeasureUnit::createKilogram(status)); 562 measureUnit.adoptInstead(MeasureUnit::createMetricTon(status)); 563 measureUnit.adoptInstead(MeasureUnit::createMicrogram(status)); 564 measureUnit.adoptInstead(MeasureUnit::createMilligram(status)); 565 measureUnit.adoptInstead(MeasureUnit::createOunce(status)); 566 measureUnit.adoptInstead(MeasureUnit::createOunceTroy(status)); 567 measureUnit.adoptInstead(MeasureUnit::createPound(status)); 568 measureUnit.adoptInstead(MeasureUnit::createStone(status)); 569 measureUnit.adoptInstead(MeasureUnit::createTon(status)); 570 measureUnit.adoptInstead(MeasureUnit::createGigawatt(status)); 571 measureUnit.adoptInstead(MeasureUnit::createHorsepower(status)); 572 measureUnit.adoptInstead(MeasureUnit::createKilowatt(status)); 573 measureUnit.adoptInstead(MeasureUnit::createMegawatt(status)); 574 measureUnit.adoptInstead(MeasureUnit::createMilliwatt(status)); 575 measureUnit.adoptInstead(MeasureUnit::createWatt(status)); 576 measureUnit.adoptInstead(MeasureUnit::createHectopascal(status)); 577 measureUnit.adoptInstead(MeasureUnit::createInchHg(status)); 578 measureUnit.adoptInstead(MeasureUnit::createMillibar(status)); 579 measureUnit.adoptInstead(MeasureUnit::createMillimeterOfMercury(status)); 580 measureUnit.adoptInstead(MeasureUnit::createPoundPerSquareInch(status)); 581 measureUnit.adoptInstead(MeasureUnit::createKarat(status)); 582 measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status)); 583 measureUnit.adoptInstead(MeasureUnit::createKnot(status)); 584 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status)); 585 measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status)); 586 measureUnit.adoptInstead(MeasureUnit::createCelsius(status)); 587 measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status)); 588 measureUnit.adoptInstead(MeasureUnit::createGenericTemperature(status)); 589 measureUnit.adoptInstead(MeasureUnit::createKelvin(status)); 590 measureUnit.adoptInstead(MeasureUnit::createAcreFoot(status)); 591 measureUnit.adoptInstead(MeasureUnit::createBushel(status)); 592 measureUnit.adoptInstead(MeasureUnit::createCentiliter(status)); 593 measureUnit.adoptInstead(MeasureUnit::createCubicCentimeter(status)); 594 measureUnit.adoptInstead(MeasureUnit::createCubicFoot(status)); 595 measureUnit.adoptInstead(MeasureUnit::createCubicInch(status)); 596 measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status)); 597 measureUnit.adoptInstead(MeasureUnit::createCubicMeter(status)); 598 measureUnit.adoptInstead(MeasureUnit::createCubicMile(status)); 599 measureUnit.adoptInstead(MeasureUnit::createCubicYard(status)); 600 measureUnit.adoptInstead(MeasureUnit::createCup(status)); 601 measureUnit.adoptInstead(MeasureUnit::createCupMetric(status)); 602 measureUnit.adoptInstead(MeasureUnit::createDeciliter(status)); 603 measureUnit.adoptInstead(MeasureUnit::createFluidOunce(status)); 604 measureUnit.adoptInstead(MeasureUnit::createGallon(status)); 605 measureUnit.adoptInstead(MeasureUnit::createHectoliter(status)); 606 measureUnit.adoptInstead(MeasureUnit::createLiter(status)); 607 measureUnit.adoptInstead(MeasureUnit::createMegaliter(status)); 608 measureUnit.adoptInstead(MeasureUnit::createMilliliter(status)); 609 measureUnit.adoptInstead(MeasureUnit::createPint(status)); 610 measureUnit.adoptInstead(MeasureUnit::createPintMetric(status)); 611 measureUnit.adoptInstead(MeasureUnit::createQuart(status)); 612 measureUnit.adoptInstead(MeasureUnit::createTablespoon(status)); 613 measureUnit.adoptInstead(MeasureUnit::createTeaspoon(status)); 614 assertSuccess("", status); 615 } 616 617 void MeasureFormatTest::TestCompatible57() { 618 UErrorCode status = U_ZERO_ERROR; 619 LocalPointer<MeasureUnit> measureUnit; 620 measureUnit.adoptInstead(MeasureUnit::createGForce(status)); 621 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecondSquared(status)); 622 measureUnit.adoptInstead(MeasureUnit::createArcMinute(status)); 623 measureUnit.adoptInstead(MeasureUnit::createArcSecond(status)); 624 measureUnit.adoptInstead(MeasureUnit::createDegree(status)); 625 measureUnit.adoptInstead(MeasureUnit::createRadian(status)); 626 measureUnit.adoptInstead(MeasureUnit::createRevolutionAngle(status)); 627 measureUnit.adoptInstead(MeasureUnit::createAcre(status)); 628 measureUnit.adoptInstead(MeasureUnit::createHectare(status)); 629 measureUnit.adoptInstead(MeasureUnit::createSquareCentimeter(status)); 630 measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status)); 631 measureUnit.adoptInstead(MeasureUnit::createSquareInch(status)); 632 measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status)); 633 measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status)); 634 measureUnit.adoptInstead(MeasureUnit::createSquareMile(status)); 635 measureUnit.adoptInstead(MeasureUnit::createSquareYard(status)); 636 measureUnit.adoptInstead(MeasureUnit::createKarat(status)); 637 measureUnit.adoptInstead(MeasureUnit::createMilligramPerDeciliter(status)); 638 measureUnit.adoptInstead(MeasureUnit::createMillimolePerLiter(status)); 639 measureUnit.adoptInstead(MeasureUnit::createPartPerMillion(status)); 640 measureUnit.adoptInstead(MeasureUnit::createLiterPer100Kilometers(status)); 641 measureUnit.adoptInstead(MeasureUnit::createLiterPerKilometer(status)); 642 measureUnit.adoptInstead(MeasureUnit::createMilePerGallon(status)); 643 measureUnit.adoptInstead(MeasureUnit::createMilePerGallonImperial(status)); 644 measureUnit.adoptInstead(MeasureUnit::createBit(status)); 645 measureUnit.adoptInstead(MeasureUnit::createByte(status)); 646 measureUnit.adoptInstead(MeasureUnit::createGigabit(status)); 647 measureUnit.adoptInstead(MeasureUnit::createGigabyte(status)); 648 measureUnit.adoptInstead(MeasureUnit::createKilobit(status)); 649 measureUnit.adoptInstead(MeasureUnit::createKilobyte(status)); 650 measureUnit.adoptInstead(MeasureUnit::createMegabit(status)); 651 measureUnit.adoptInstead(MeasureUnit::createMegabyte(status)); 652 measureUnit.adoptInstead(MeasureUnit::createTerabit(status)); 653 measureUnit.adoptInstead(MeasureUnit::createTerabyte(status)); 654 measureUnit.adoptInstead(MeasureUnit::createCentury(status)); 655 measureUnit.adoptInstead(MeasureUnit::createDay(status)); 656 measureUnit.adoptInstead(MeasureUnit::createHour(status)); 657 measureUnit.adoptInstead(MeasureUnit::createMicrosecond(status)); 658 measureUnit.adoptInstead(MeasureUnit::createMillisecond(status)); 659 measureUnit.adoptInstead(MeasureUnit::createMinute(status)); 660 measureUnit.adoptInstead(MeasureUnit::createMonth(status)); 661 measureUnit.adoptInstead(MeasureUnit::createNanosecond(status)); 662 measureUnit.adoptInstead(MeasureUnit::createSecond(status)); 663 measureUnit.adoptInstead(MeasureUnit::createWeek(status)); 664 measureUnit.adoptInstead(MeasureUnit::createYear(status)); 665 measureUnit.adoptInstead(MeasureUnit::createAmpere(status)); 666 measureUnit.adoptInstead(MeasureUnit::createMilliampere(status)); 667 measureUnit.adoptInstead(MeasureUnit::createOhm(status)); 668 measureUnit.adoptInstead(MeasureUnit::createVolt(status)); 669 measureUnit.adoptInstead(MeasureUnit::createCalorie(status)); 670 measureUnit.adoptInstead(MeasureUnit::createFoodcalorie(status)); 671 measureUnit.adoptInstead(MeasureUnit::createJoule(status)); 672 measureUnit.adoptInstead(MeasureUnit::createKilocalorie(status)); 673 measureUnit.adoptInstead(MeasureUnit::createKilojoule(status)); 674 measureUnit.adoptInstead(MeasureUnit::createKilowattHour(status)); 675 measureUnit.adoptInstead(MeasureUnit::createGigahertz(status)); 676 measureUnit.adoptInstead(MeasureUnit::createHertz(status)); 677 measureUnit.adoptInstead(MeasureUnit::createKilohertz(status)); 678 measureUnit.adoptInstead(MeasureUnit::createMegahertz(status)); 679 measureUnit.adoptInstead(MeasureUnit::createAstronomicalUnit(status)); 680 measureUnit.adoptInstead(MeasureUnit::createCentimeter(status)); 681 measureUnit.adoptInstead(MeasureUnit::createDecimeter(status)); 682 measureUnit.adoptInstead(MeasureUnit::createFathom(status)); 683 measureUnit.adoptInstead(MeasureUnit::createFoot(status)); 684 measureUnit.adoptInstead(MeasureUnit::createFurlong(status)); 685 measureUnit.adoptInstead(MeasureUnit::createInch(status)); 686 measureUnit.adoptInstead(MeasureUnit::createKilometer(status)); 687 measureUnit.adoptInstead(MeasureUnit::createLightYear(status)); 688 measureUnit.adoptInstead(MeasureUnit::createMeter(status)); 689 measureUnit.adoptInstead(MeasureUnit::createMicrometer(status)); 690 measureUnit.adoptInstead(MeasureUnit::createMile(status)); 691 measureUnit.adoptInstead(MeasureUnit::createMileScandinavian(status)); 692 measureUnit.adoptInstead(MeasureUnit::createMillimeter(status)); 693 measureUnit.adoptInstead(MeasureUnit::createNanometer(status)); 694 measureUnit.adoptInstead(MeasureUnit::createNauticalMile(status)); 695 measureUnit.adoptInstead(MeasureUnit::createParsec(status)); 696 measureUnit.adoptInstead(MeasureUnit::createPicometer(status)); 697 measureUnit.adoptInstead(MeasureUnit::createYard(status)); 698 measureUnit.adoptInstead(MeasureUnit::createLux(status)); 699 measureUnit.adoptInstead(MeasureUnit::createCarat(status)); 700 measureUnit.adoptInstead(MeasureUnit::createGram(status)); 701 measureUnit.adoptInstead(MeasureUnit::createKilogram(status)); 702 measureUnit.adoptInstead(MeasureUnit::createMetricTon(status)); 703 measureUnit.adoptInstead(MeasureUnit::createMicrogram(status)); 704 measureUnit.adoptInstead(MeasureUnit::createMilligram(status)); 705 measureUnit.adoptInstead(MeasureUnit::createOunce(status)); 706 measureUnit.adoptInstead(MeasureUnit::createOunceTroy(status)); 707 measureUnit.adoptInstead(MeasureUnit::createPound(status)); 708 measureUnit.adoptInstead(MeasureUnit::createStone(status)); 709 measureUnit.adoptInstead(MeasureUnit::createTon(status)); 710 measureUnit.adoptInstead(MeasureUnit::createGigawatt(status)); 711 measureUnit.adoptInstead(MeasureUnit::createHorsepower(status)); 712 measureUnit.adoptInstead(MeasureUnit::createKilowatt(status)); 713 measureUnit.adoptInstead(MeasureUnit::createMegawatt(status)); 714 measureUnit.adoptInstead(MeasureUnit::createMilliwatt(status)); 715 measureUnit.adoptInstead(MeasureUnit::createWatt(status)); 716 measureUnit.adoptInstead(MeasureUnit::createHectopascal(status)); 717 measureUnit.adoptInstead(MeasureUnit::createInchHg(status)); 718 measureUnit.adoptInstead(MeasureUnit::createMillibar(status)); 719 measureUnit.adoptInstead(MeasureUnit::createMillimeterOfMercury(status)); 720 measureUnit.adoptInstead(MeasureUnit::createPoundPerSquareInch(status)); 721 measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status)); 722 measureUnit.adoptInstead(MeasureUnit::createKnot(status)); 723 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status)); 724 measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status)); 725 measureUnit.adoptInstead(MeasureUnit::createCelsius(status)); 726 measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status)); 727 measureUnit.adoptInstead(MeasureUnit::createGenericTemperature(status)); 728 measureUnit.adoptInstead(MeasureUnit::createKelvin(status)); 729 measureUnit.adoptInstead(MeasureUnit::createAcreFoot(status)); 730 measureUnit.adoptInstead(MeasureUnit::createBushel(status)); 731 measureUnit.adoptInstead(MeasureUnit::createCentiliter(status)); 732 measureUnit.adoptInstead(MeasureUnit::createCubicCentimeter(status)); 733 measureUnit.adoptInstead(MeasureUnit::createCubicFoot(status)); 734 measureUnit.adoptInstead(MeasureUnit::createCubicInch(status)); 735 measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status)); 736 measureUnit.adoptInstead(MeasureUnit::createCubicMeter(status)); 737 measureUnit.adoptInstead(MeasureUnit::createCubicMile(status)); 738 measureUnit.adoptInstead(MeasureUnit::createCubicYard(status)); 739 measureUnit.adoptInstead(MeasureUnit::createCup(status)); 740 measureUnit.adoptInstead(MeasureUnit::createCupMetric(status)); 741 measureUnit.adoptInstead(MeasureUnit::createDeciliter(status)); 742 measureUnit.adoptInstead(MeasureUnit::createFluidOunce(status)); 743 measureUnit.adoptInstead(MeasureUnit::createGallon(status)); 744 measureUnit.adoptInstead(MeasureUnit::createGallonImperial(status)); 745 measureUnit.adoptInstead(MeasureUnit::createHectoliter(status)); 746 measureUnit.adoptInstead(MeasureUnit::createLiter(status)); 747 measureUnit.adoptInstead(MeasureUnit::createMegaliter(status)); 748 measureUnit.adoptInstead(MeasureUnit::createMilliliter(status)); 749 measureUnit.adoptInstead(MeasureUnit::createPint(status)); 750 measureUnit.adoptInstead(MeasureUnit::createPintMetric(status)); 751 measureUnit.adoptInstead(MeasureUnit::createQuart(status)); 752 measureUnit.adoptInstead(MeasureUnit::createTablespoon(status)); 753 measureUnit.adoptInstead(MeasureUnit::createTeaspoon(status)); 754 assertSuccess("", status); 755 } 756 757 void MeasureFormatTest::TestCompatible58() { 758 UErrorCode status = U_ZERO_ERROR; 759 LocalPointer<MeasureUnit> measureUnit; 760 measureUnit.adoptInstead(MeasureUnit::createGForce(status)); 761 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecondSquared(status)); 762 measureUnit.adoptInstead(MeasureUnit::createArcMinute(status)); 763 measureUnit.adoptInstead(MeasureUnit::createArcSecond(status)); 764 measureUnit.adoptInstead(MeasureUnit::createDegree(status)); 765 measureUnit.adoptInstead(MeasureUnit::createRadian(status)); 766 measureUnit.adoptInstead(MeasureUnit::createRevolutionAngle(status)); 767 measureUnit.adoptInstead(MeasureUnit::createAcre(status)); 768 measureUnit.adoptInstead(MeasureUnit::createHectare(status)); 769 measureUnit.adoptInstead(MeasureUnit::createSquareCentimeter(status)); 770 measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status)); 771 measureUnit.adoptInstead(MeasureUnit::createSquareInch(status)); 772 measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status)); 773 measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status)); 774 measureUnit.adoptInstead(MeasureUnit::createSquareMile(status)); 775 measureUnit.adoptInstead(MeasureUnit::createSquareYard(status)); 776 measureUnit.adoptInstead(MeasureUnit::createKarat(status)); 777 measureUnit.adoptInstead(MeasureUnit::createMilligramPerDeciliter(status)); 778 measureUnit.adoptInstead(MeasureUnit::createMillimolePerLiter(status)); 779 measureUnit.adoptInstead(MeasureUnit::createPartPerMillion(status)); 780 measureUnit.adoptInstead(MeasureUnit::createLiterPer100Kilometers(status)); 781 measureUnit.adoptInstead(MeasureUnit::createLiterPerKilometer(status)); 782 measureUnit.adoptInstead(MeasureUnit::createMilePerGallon(status)); 783 measureUnit.adoptInstead(MeasureUnit::createMilePerGallonImperial(status)); 784 // measureUnit.adoptInstead(MeasureUnit::createEast(status)); 785 // measureUnit.adoptInstead(MeasureUnit::createNorth(status)); 786 // measureUnit.adoptInstead(MeasureUnit::createSouth(status)); 787 // measureUnit.adoptInstead(MeasureUnit::createWest(status)); 788 measureUnit.adoptInstead(MeasureUnit::createBit(status)); 789 measureUnit.adoptInstead(MeasureUnit::createByte(status)); 790 measureUnit.adoptInstead(MeasureUnit::createGigabit(status)); 791 measureUnit.adoptInstead(MeasureUnit::createGigabyte(status)); 792 measureUnit.adoptInstead(MeasureUnit::createKilobit(status)); 793 measureUnit.adoptInstead(MeasureUnit::createKilobyte(status)); 794 measureUnit.adoptInstead(MeasureUnit::createMegabit(status)); 795 measureUnit.adoptInstead(MeasureUnit::createMegabyte(status)); 796 measureUnit.adoptInstead(MeasureUnit::createTerabit(status)); 797 measureUnit.adoptInstead(MeasureUnit::createTerabyte(status)); 798 measureUnit.adoptInstead(MeasureUnit::createCentury(status)); 799 measureUnit.adoptInstead(MeasureUnit::createDay(status)); 800 measureUnit.adoptInstead(MeasureUnit::createHour(status)); 801 measureUnit.adoptInstead(MeasureUnit::createMicrosecond(status)); 802 measureUnit.adoptInstead(MeasureUnit::createMillisecond(status)); 803 measureUnit.adoptInstead(MeasureUnit::createMinute(status)); 804 measureUnit.adoptInstead(MeasureUnit::createMonth(status)); 805 measureUnit.adoptInstead(MeasureUnit::createNanosecond(status)); 806 measureUnit.adoptInstead(MeasureUnit::createSecond(status)); 807 measureUnit.adoptInstead(MeasureUnit::createWeek(status)); 808 measureUnit.adoptInstead(MeasureUnit::createYear(status)); 809 measureUnit.adoptInstead(MeasureUnit::createAmpere(status)); 810 measureUnit.adoptInstead(MeasureUnit::createMilliampere(status)); 811 measureUnit.adoptInstead(MeasureUnit::createOhm(status)); 812 measureUnit.adoptInstead(MeasureUnit::createVolt(status)); 813 measureUnit.adoptInstead(MeasureUnit::createCalorie(status)); 814 measureUnit.adoptInstead(MeasureUnit::createFoodcalorie(status)); 815 measureUnit.adoptInstead(MeasureUnit::createJoule(status)); 816 measureUnit.adoptInstead(MeasureUnit::createKilocalorie(status)); 817 measureUnit.adoptInstead(MeasureUnit::createKilojoule(status)); 818 measureUnit.adoptInstead(MeasureUnit::createKilowattHour(status)); 819 measureUnit.adoptInstead(MeasureUnit::createGigahertz(status)); 820 measureUnit.adoptInstead(MeasureUnit::createHertz(status)); 821 measureUnit.adoptInstead(MeasureUnit::createKilohertz(status)); 822 measureUnit.adoptInstead(MeasureUnit::createMegahertz(status)); 823 measureUnit.adoptInstead(MeasureUnit::createAstronomicalUnit(status)); 824 measureUnit.adoptInstead(MeasureUnit::createCentimeter(status)); 825 measureUnit.adoptInstead(MeasureUnit::createDecimeter(status)); 826 measureUnit.adoptInstead(MeasureUnit::createFathom(status)); 827 measureUnit.adoptInstead(MeasureUnit::createFoot(status)); 828 measureUnit.adoptInstead(MeasureUnit::createFurlong(status)); 829 measureUnit.adoptInstead(MeasureUnit::createInch(status)); 830 measureUnit.adoptInstead(MeasureUnit::createKilometer(status)); 831 measureUnit.adoptInstead(MeasureUnit::createLightYear(status)); 832 measureUnit.adoptInstead(MeasureUnit::createMeter(status)); 833 measureUnit.adoptInstead(MeasureUnit::createMicrometer(status)); 834 measureUnit.adoptInstead(MeasureUnit::createMile(status)); 835 measureUnit.adoptInstead(MeasureUnit::createMileScandinavian(status)); 836 measureUnit.adoptInstead(MeasureUnit::createMillimeter(status)); 837 measureUnit.adoptInstead(MeasureUnit::createNanometer(status)); 838 measureUnit.adoptInstead(MeasureUnit::createNauticalMile(status)); 839 measureUnit.adoptInstead(MeasureUnit::createParsec(status)); 840 measureUnit.adoptInstead(MeasureUnit::createPicometer(status)); 841 measureUnit.adoptInstead(MeasureUnit::createYard(status)); 842 measureUnit.adoptInstead(MeasureUnit::createLux(status)); 843 measureUnit.adoptInstead(MeasureUnit::createCarat(status)); 844 measureUnit.adoptInstead(MeasureUnit::createGram(status)); 845 measureUnit.adoptInstead(MeasureUnit::createKilogram(status)); 846 measureUnit.adoptInstead(MeasureUnit::createMetricTon(status)); 847 measureUnit.adoptInstead(MeasureUnit::createMicrogram(status)); 848 measureUnit.adoptInstead(MeasureUnit::createMilligram(status)); 849 measureUnit.adoptInstead(MeasureUnit::createOunce(status)); 850 measureUnit.adoptInstead(MeasureUnit::createOunceTroy(status)); 851 measureUnit.adoptInstead(MeasureUnit::createPound(status)); 852 measureUnit.adoptInstead(MeasureUnit::createStone(status)); 853 measureUnit.adoptInstead(MeasureUnit::createTon(status)); 854 measureUnit.adoptInstead(MeasureUnit::createGigawatt(status)); 855 measureUnit.adoptInstead(MeasureUnit::createHorsepower(status)); 856 measureUnit.adoptInstead(MeasureUnit::createKilowatt(status)); 857 measureUnit.adoptInstead(MeasureUnit::createMegawatt(status)); 858 measureUnit.adoptInstead(MeasureUnit::createMilliwatt(status)); 859 measureUnit.adoptInstead(MeasureUnit::createWatt(status)); 860 measureUnit.adoptInstead(MeasureUnit::createHectopascal(status)); 861 measureUnit.adoptInstead(MeasureUnit::createInchHg(status)); 862 measureUnit.adoptInstead(MeasureUnit::createMillibar(status)); 863 measureUnit.adoptInstead(MeasureUnit::createMillimeterOfMercury(status)); 864 measureUnit.adoptInstead(MeasureUnit::createPoundPerSquareInch(status)); 865 measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status)); 866 measureUnit.adoptInstead(MeasureUnit::createKnot(status)); 867 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status)); 868 measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status)); 869 measureUnit.adoptInstead(MeasureUnit::createCelsius(status)); 870 measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status)); 871 measureUnit.adoptInstead(MeasureUnit::createGenericTemperature(status)); 872 measureUnit.adoptInstead(MeasureUnit::createKelvin(status)); 873 measureUnit.adoptInstead(MeasureUnit::createAcreFoot(status)); 874 measureUnit.adoptInstead(MeasureUnit::createBushel(status)); 875 measureUnit.adoptInstead(MeasureUnit::createCentiliter(status)); 876 measureUnit.adoptInstead(MeasureUnit::createCubicCentimeter(status)); 877 measureUnit.adoptInstead(MeasureUnit::createCubicFoot(status)); 878 measureUnit.adoptInstead(MeasureUnit::createCubicInch(status)); 879 measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status)); 880 measureUnit.adoptInstead(MeasureUnit::createCubicMeter(status)); 881 measureUnit.adoptInstead(MeasureUnit::createCubicMile(status)); 882 measureUnit.adoptInstead(MeasureUnit::createCubicYard(status)); 883 measureUnit.adoptInstead(MeasureUnit::createCup(status)); 884 measureUnit.adoptInstead(MeasureUnit::createCupMetric(status)); 885 measureUnit.adoptInstead(MeasureUnit::createDeciliter(status)); 886 measureUnit.adoptInstead(MeasureUnit::createFluidOunce(status)); 887 measureUnit.adoptInstead(MeasureUnit::createGallon(status)); 888 measureUnit.adoptInstead(MeasureUnit::createGallonImperial(status)); 889 measureUnit.adoptInstead(MeasureUnit::createHectoliter(status)); 890 measureUnit.adoptInstead(MeasureUnit::createLiter(status)); 891 measureUnit.adoptInstead(MeasureUnit::createMegaliter(status)); 892 measureUnit.adoptInstead(MeasureUnit::createMilliliter(status)); 893 measureUnit.adoptInstead(MeasureUnit::createPint(status)); 894 measureUnit.adoptInstead(MeasureUnit::createPintMetric(status)); 895 measureUnit.adoptInstead(MeasureUnit::createQuart(status)); 896 measureUnit.adoptInstead(MeasureUnit::createTablespoon(status)); 897 measureUnit.adoptInstead(MeasureUnit::createTeaspoon(status)); 898 assertSuccess("", status); 899 } 900 901 void MeasureFormatTest::TestCompatible59() { 902 UErrorCode status = U_ZERO_ERROR; 903 LocalPointer<MeasureUnit> measureUnit; 904 measureUnit.adoptInstead(MeasureUnit::createGForce(status)); 905 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecondSquared(status)); 906 measureUnit.adoptInstead(MeasureUnit::createArcMinute(status)); 907 measureUnit.adoptInstead(MeasureUnit::createArcSecond(status)); 908 measureUnit.adoptInstead(MeasureUnit::createDegree(status)); 909 measureUnit.adoptInstead(MeasureUnit::createRadian(status)); 910 measureUnit.adoptInstead(MeasureUnit::createRevolutionAngle(status)); 911 measureUnit.adoptInstead(MeasureUnit::createAcre(status)); 912 measureUnit.adoptInstead(MeasureUnit::createHectare(status)); 913 measureUnit.adoptInstead(MeasureUnit::createSquareCentimeter(status)); 914 measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status)); 915 measureUnit.adoptInstead(MeasureUnit::createSquareInch(status)); 916 measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status)); 917 measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status)); 918 measureUnit.adoptInstead(MeasureUnit::createSquareMile(status)); 919 measureUnit.adoptInstead(MeasureUnit::createSquareYard(status)); 920 measureUnit.adoptInstead(MeasureUnit::createKarat(status)); 921 measureUnit.adoptInstead(MeasureUnit::createMilligramPerDeciliter(status)); 922 measureUnit.adoptInstead(MeasureUnit::createMillimolePerLiter(status)); 923 measureUnit.adoptInstead(MeasureUnit::createPartPerMillion(status)); 924 measureUnit.adoptInstead(MeasureUnit::createLiterPer100Kilometers(status)); 925 measureUnit.adoptInstead(MeasureUnit::createLiterPerKilometer(status)); 926 measureUnit.adoptInstead(MeasureUnit::createMilePerGallon(status)); 927 measureUnit.adoptInstead(MeasureUnit::createMilePerGallonImperial(status)); 928 measureUnit.adoptInstead(MeasureUnit::createBit(status)); 929 measureUnit.adoptInstead(MeasureUnit::createByte(status)); 930 measureUnit.adoptInstead(MeasureUnit::createGigabit(status)); 931 measureUnit.adoptInstead(MeasureUnit::createGigabyte(status)); 932 measureUnit.adoptInstead(MeasureUnit::createKilobit(status)); 933 measureUnit.adoptInstead(MeasureUnit::createKilobyte(status)); 934 measureUnit.adoptInstead(MeasureUnit::createMegabit(status)); 935 measureUnit.adoptInstead(MeasureUnit::createMegabyte(status)); 936 measureUnit.adoptInstead(MeasureUnit::createTerabit(status)); 937 measureUnit.adoptInstead(MeasureUnit::createTerabyte(status)); 938 measureUnit.adoptInstead(MeasureUnit::createCentury(status)); 939 measureUnit.adoptInstead(MeasureUnit::createDay(status)); 940 measureUnit.adoptInstead(MeasureUnit::createHour(status)); 941 measureUnit.adoptInstead(MeasureUnit::createMicrosecond(status)); 942 measureUnit.adoptInstead(MeasureUnit::createMillisecond(status)); 943 measureUnit.adoptInstead(MeasureUnit::createMinute(status)); 944 measureUnit.adoptInstead(MeasureUnit::createMonth(status)); 945 measureUnit.adoptInstead(MeasureUnit::createNanosecond(status)); 946 measureUnit.adoptInstead(MeasureUnit::createSecond(status)); 947 measureUnit.adoptInstead(MeasureUnit::createWeek(status)); 948 measureUnit.adoptInstead(MeasureUnit::createYear(status)); 949 measureUnit.adoptInstead(MeasureUnit::createAmpere(status)); 950 measureUnit.adoptInstead(MeasureUnit::createMilliampere(status)); 951 measureUnit.adoptInstead(MeasureUnit::createOhm(status)); 952 measureUnit.adoptInstead(MeasureUnit::createVolt(status)); 953 measureUnit.adoptInstead(MeasureUnit::createCalorie(status)); 954 measureUnit.adoptInstead(MeasureUnit::createFoodcalorie(status)); 955 measureUnit.adoptInstead(MeasureUnit::createJoule(status)); 956 measureUnit.adoptInstead(MeasureUnit::createKilocalorie(status)); 957 measureUnit.adoptInstead(MeasureUnit::createKilojoule(status)); 958 measureUnit.adoptInstead(MeasureUnit::createKilowattHour(status)); 959 measureUnit.adoptInstead(MeasureUnit::createGigahertz(status)); 960 measureUnit.adoptInstead(MeasureUnit::createHertz(status)); 961 measureUnit.adoptInstead(MeasureUnit::createKilohertz(status)); 962 measureUnit.adoptInstead(MeasureUnit::createMegahertz(status)); 963 measureUnit.adoptInstead(MeasureUnit::createAstronomicalUnit(status)); 964 measureUnit.adoptInstead(MeasureUnit::createCentimeter(status)); 965 measureUnit.adoptInstead(MeasureUnit::createDecimeter(status)); 966 measureUnit.adoptInstead(MeasureUnit::createFathom(status)); 967 measureUnit.adoptInstead(MeasureUnit::createFoot(status)); 968 measureUnit.adoptInstead(MeasureUnit::createFurlong(status)); 969 measureUnit.adoptInstead(MeasureUnit::createInch(status)); 970 measureUnit.adoptInstead(MeasureUnit::createKilometer(status)); 971 measureUnit.adoptInstead(MeasureUnit::createLightYear(status)); 972 measureUnit.adoptInstead(MeasureUnit::createMeter(status)); 973 measureUnit.adoptInstead(MeasureUnit::createMicrometer(status)); 974 measureUnit.adoptInstead(MeasureUnit::createMile(status)); 975 measureUnit.adoptInstead(MeasureUnit::createMileScandinavian(status)); 976 measureUnit.adoptInstead(MeasureUnit::createMillimeter(status)); 977 measureUnit.adoptInstead(MeasureUnit::createNanometer(status)); 978 measureUnit.adoptInstead(MeasureUnit::createNauticalMile(status)); 979 measureUnit.adoptInstead(MeasureUnit::createParsec(status)); 980 measureUnit.adoptInstead(MeasureUnit::createPicometer(status)); 981 measureUnit.adoptInstead(MeasureUnit::createPoint(status)); 982 measureUnit.adoptInstead(MeasureUnit::createYard(status)); 983 measureUnit.adoptInstead(MeasureUnit::createLux(status)); 984 measureUnit.adoptInstead(MeasureUnit::createCarat(status)); 985 measureUnit.adoptInstead(MeasureUnit::createGram(status)); 986 measureUnit.adoptInstead(MeasureUnit::createKilogram(status)); 987 measureUnit.adoptInstead(MeasureUnit::createMetricTon(status)); 988 measureUnit.adoptInstead(MeasureUnit::createMicrogram(status)); 989 measureUnit.adoptInstead(MeasureUnit::createMilligram(status)); 990 measureUnit.adoptInstead(MeasureUnit::createOunce(status)); 991 measureUnit.adoptInstead(MeasureUnit::createOunceTroy(status)); 992 measureUnit.adoptInstead(MeasureUnit::createPound(status)); 993 measureUnit.adoptInstead(MeasureUnit::createStone(status)); 994 measureUnit.adoptInstead(MeasureUnit::createTon(status)); 995 measureUnit.adoptInstead(MeasureUnit::createGigawatt(status)); 996 measureUnit.adoptInstead(MeasureUnit::createHorsepower(status)); 997 measureUnit.adoptInstead(MeasureUnit::createKilowatt(status)); 998 measureUnit.adoptInstead(MeasureUnit::createMegawatt(status)); 999 measureUnit.adoptInstead(MeasureUnit::createMilliwatt(status)); 1000 measureUnit.adoptInstead(MeasureUnit::createWatt(status)); 1001 measureUnit.adoptInstead(MeasureUnit::createHectopascal(status)); 1002 measureUnit.adoptInstead(MeasureUnit::createInchHg(status)); 1003 measureUnit.adoptInstead(MeasureUnit::createMillibar(status)); 1004 measureUnit.adoptInstead(MeasureUnit::createMillimeterOfMercury(status)); 1005 measureUnit.adoptInstead(MeasureUnit::createPoundPerSquareInch(status)); 1006 measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status)); 1007 measureUnit.adoptInstead(MeasureUnit::createKnot(status)); 1008 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status)); 1009 measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status)); 1010 measureUnit.adoptInstead(MeasureUnit::createCelsius(status)); 1011 measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status)); 1012 measureUnit.adoptInstead(MeasureUnit::createGenericTemperature(status)); 1013 measureUnit.adoptInstead(MeasureUnit::createKelvin(status)); 1014 measureUnit.adoptInstead(MeasureUnit::createAcreFoot(status)); 1015 measureUnit.adoptInstead(MeasureUnit::createBushel(status)); 1016 measureUnit.adoptInstead(MeasureUnit::createCentiliter(status)); 1017 measureUnit.adoptInstead(MeasureUnit::createCubicCentimeter(status)); 1018 measureUnit.adoptInstead(MeasureUnit::createCubicFoot(status)); 1019 measureUnit.adoptInstead(MeasureUnit::createCubicInch(status)); 1020 measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status)); 1021 measureUnit.adoptInstead(MeasureUnit::createCubicMeter(status)); 1022 measureUnit.adoptInstead(MeasureUnit::createCubicMile(status)); 1023 measureUnit.adoptInstead(MeasureUnit::createCubicYard(status)); 1024 measureUnit.adoptInstead(MeasureUnit::createCup(status)); 1025 measureUnit.adoptInstead(MeasureUnit::createCupMetric(status)); 1026 measureUnit.adoptInstead(MeasureUnit::createDeciliter(status)); 1027 measureUnit.adoptInstead(MeasureUnit::createFluidOunce(status)); 1028 measureUnit.adoptInstead(MeasureUnit::createGallon(status)); 1029 measureUnit.adoptInstead(MeasureUnit::createGallonImperial(status)); 1030 measureUnit.adoptInstead(MeasureUnit::createHectoliter(status)); 1031 measureUnit.adoptInstead(MeasureUnit::createLiter(status)); 1032 measureUnit.adoptInstead(MeasureUnit::createMegaliter(status)); 1033 measureUnit.adoptInstead(MeasureUnit::createMilliliter(status)); 1034 measureUnit.adoptInstead(MeasureUnit::createPint(status)); 1035 measureUnit.adoptInstead(MeasureUnit::createPintMetric(status)); 1036 measureUnit.adoptInstead(MeasureUnit::createQuart(status)); 1037 measureUnit.adoptInstead(MeasureUnit::createTablespoon(status)); 1038 measureUnit.adoptInstead(MeasureUnit::createTeaspoon(status)); 1039 assertSuccess("", status); 1040 } 1041 1042 void MeasureFormatTest::TestBasic() { 1043 UErrorCode status = U_ZERO_ERROR; 1044 MeasureUnit *ptr1 = MeasureUnit::createArcMinute(status); 1045 MeasureUnit *ptr2 = MeasureUnit::createArcMinute(status); 1046 if (!(*ptr1 == *ptr2)) { 1047 errln("Expect == to work."); 1048 } 1049 if (*ptr1 != *ptr2) { 1050 errln("Expect != to work."); 1051 } 1052 MeasureUnit *ptr3 = MeasureUnit::createMeter(status); 1053 if (*ptr1 == *ptr3) { 1054 errln("Expect == to work."); 1055 } 1056 if (!(*ptr1 != *ptr3)) { 1057 errln("Expect != to work."); 1058 } 1059 MeasureUnit *ptr4 = (MeasureUnit *) ptr1->clone(); 1060 if (*ptr1 != *ptr4) { 1061 errln("Expect clone to work."); 1062 } 1063 MeasureUnit stack; 1064 stack = *ptr1; 1065 if (*ptr1 != stack) { 1066 errln("Expect assignment to work."); 1067 } 1068 1069 delete ptr1; 1070 delete ptr2; 1071 delete ptr3; 1072 delete ptr4; 1073 } 1074 1075 void MeasureFormatTest::TestGetAvailable() { 1076 MeasureUnit *units = NULL; 1077 UErrorCode status = U_ZERO_ERROR; 1078 int32_t totalCount = MeasureUnit::getAvailable(units, 0, status); 1079 while (status == U_BUFFER_OVERFLOW_ERROR) { 1080 status = U_ZERO_ERROR; 1081 delete [] units; 1082 units = new MeasureUnit[totalCount]; 1083 totalCount = MeasureUnit::getAvailable(units, totalCount, status); 1084 } 1085 if (U_FAILURE(status)) { 1086 dataerrln("Failure creating format object - %s", u_errorName(status)); 1087 delete [] units; 1088 return; 1089 } 1090 if (totalCount < 200) { 1091 errln("Expect at least 200 measure units including currencies."); 1092 } 1093 delete [] units; 1094 StringEnumeration *types = MeasureUnit::getAvailableTypes(status); 1095 if (U_FAILURE(status)) { 1096 dataerrln("Failure getting types - %s", u_errorName(status)); 1097 delete types; 1098 return; 1099 } 1100 if (types->count(status) < 10) { 1101 errln("Expect at least 10 distinct unit types."); 1102 } 1103 units = NULL; 1104 int32_t unitCapacity = 0; 1105 int32_t unitCountSum = 0; 1106 for ( 1107 const char* type = types->next(NULL, status); 1108 type != NULL; 1109 type = types->next(NULL, status)) { 1110 int32_t unitCount = MeasureUnit::getAvailable(type, units, unitCapacity, status); 1111 while (status == U_BUFFER_OVERFLOW_ERROR) { 1112 status = U_ZERO_ERROR; 1113 delete [] units; 1114 units = new MeasureUnit[unitCount]; 1115 unitCapacity = unitCount; 1116 unitCount = MeasureUnit::getAvailable(type, units, unitCapacity, status); 1117 } 1118 if (U_FAILURE(status)) { 1119 dataerrln("Failure getting units - %s", u_errorName(status)); 1120 delete [] units; 1121 delete types; 1122 return; 1123 } 1124 if (unitCount < 1) { 1125 errln("Expect at least one unit count per type."); 1126 } 1127 unitCountSum += unitCount; 1128 } 1129 if (unitCountSum != totalCount) { 1130 errln("Expected total unit count to equal sum of unit counts by type."); 1131 } 1132 delete [] units; 1133 delete types; 1134 } 1135 1136 void MeasureFormatTest::TestExamplesInDocs() { 1137 UErrorCode status = U_ZERO_ERROR; 1138 MeasureFormat fmtFr(Locale::getFrench(), UMEASFMT_WIDTH_SHORT, status); 1139 MeasureFormat fmtFrFull( 1140 Locale::getFrench(), UMEASFMT_WIDTH_WIDE, status); 1141 MeasureFormat fmtFrNarrow( 1142 Locale::getFrench(), UMEASFMT_WIDTH_NARROW, status); 1143 MeasureFormat fmtEn(Locale::getUS(), UMEASFMT_WIDTH_WIDE, status); 1144 if (!assertSuccess("Error creating formatters", status)) { 1145 return; 1146 } 1147 Measure measureC((double)23, MeasureUnit::createCelsius(status), status); 1148 Measure measureF((double)70, MeasureUnit::createFahrenheit(status), status); 1149 Measure feetAndInches[] = { 1150 Measure((double)70, MeasureUnit::createFoot(status), status), 1151 Measure((double)5.3, MeasureUnit::createInch(status), status)}; 1152 Measure footAndInch[] = { 1153 Measure((double)1, MeasureUnit::createFoot(status), status), 1154 Measure((double)1, MeasureUnit::createInch(status), status)}; 1155 Measure inchAndFeet[] = { 1156 Measure((double)1, MeasureUnit::createInch(status), status), 1157 Measure((double)2, MeasureUnit::createFoot(status), status)}; 1158 if (!assertSuccess("Error creating measurements.", status)) { 1159 return; 1160 } 1161 verifyFormat( 1162 "Celsius", 1163 fmtFr, 1164 &measureC, 1165 1, 1166 "23 \\u00B0C"); 1167 verifyFormatWithPrefix( 1168 "Celsius", 1169 fmtFr, 1170 "Prefix: ", 1171 &measureC, 1172 1, 1173 "Prefix: 23 \\u00B0C"); 1174 verifyFormat( 1175 "Fahrenheit", 1176 fmtFr, 1177 &measureF, 1178 1, 1179 "70 \\u00B0F"); 1180 verifyFormat( 1181 "Feet and inches", 1182 fmtFrFull, 1183 feetAndInches, 1184 UPRV_LENGTHOF(feetAndInches), 1185 "70 pieds et 5,3 pouces"); 1186 verifyFormatWithPrefix( 1187 "Feet and inches", 1188 fmtFrFull, 1189 "Prefix: ", 1190 feetAndInches, 1191 UPRV_LENGTHOF(feetAndInches), 1192 "Prefix: 70 pieds et 5,3 pouces"); 1193 verifyFormat( 1194 "Foot and inch", 1195 fmtFrFull, 1196 footAndInch, 1197 UPRV_LENGTHOF(footAndInch), 1198 "1 pied et 1 pouce"); 1199 verifyFormat( 1200 "Foot and inch narrow", 1201 fmtFrNarrow, 1202 footAndInch, 1203 UPRV_LENGTHOF(footAndInch), 1204 "1\\u2032 1\\u2033"); 1205 verifyFormat( 1206 "Inch and feet", 1207 fmtEn, 1208 inchAndFeet, 1209 UPRV_LENGTHOF(inchAndFeet), 1210 "1 inch, 2 feet"); 1211 } 1212 1213 void MeasureFormatTest::TestFormatPeriodEn() { 1214 UErrorCode status = U_ZERO_ERROR; 1215 Measure t_19m[] = {Measure((double)19, MeasureUnit::createMinute(status), status)}; 1216 Measure t_1h_23_5s[] = { 1217 Measure((double)1.0, MeasureUnit::createHour(status), status), 1218 Measure((double)23.5, MeasureUnit::createSecond(status), status) 1219 }; 1220 Measure t_1h_23_5m[] = { 1221 Measure((double)1.0, MeasureUnit::createHour(status), status), 1222 Measure((double)23.5, MeasureUnit::createMinute(status), status) 1223 }; 1224 Measure t_1h_0m_23s[] = { 1225 Measure( 1226 (double)1.0, 1227 TimeUnit::createInstance( 1228 TimeUnit::UTIMEUNIT_HOUR, status), 1229 status), 1230 Measure( 1231 (double)0.0, 1232 TimeUnit::createInstance( 1233 TimeUnit::UTIMEUNIT_MINUTE, status), 1234 status), 1235 Measure( 1236 (double)23.0, 1237 TimeUnit::createInstance( 1238 TimeUnit::UTIMEUNIT_SECOND, status), 1239 status) 1240 }; 1241 Measure t_2y_5M_3w_4d[] = { 1242 Measure(2.0, MeasureUnit::createYear(status), status), 1243 Measure(5.0, MeasureUnit::createMonth(status), status), 1244 Measure(3.0, MeasureUnit::createWeek(status), status), 1245 Measure(4.0, MeasureUnit::createDay(status), status) 1246 }; 1247 Measure t_1m_59_9996s[] = { 1248 Measure(1.0, MeasureUnit::createMinute(status), status), 1249 Measure(59.9996, MeasureUnit::createSecond(status), status) 1250 }; 1251 Measure t_5h_17m[] = { 1252 Measure(5.0, MeasureUnit::createHour(status), status), 1253 Measure(17.0, MeasureUnit::createMinute(status), status) 1254 }; 1255 Measure t_neg5h_17m[] = { 1256 Measure(-5.0, MeasureUnit::createHour(status), status), 1257 Measure(17.0, MeasureUnit::createMinute(status), status) 1258 }; 1259 Measure t_19m_28s[] = { 1260 Measure(19.0, MeasureUnit::createMinute(status), status), 1261 Measure(28.0, MeasureUnit::createSecond(status), status) 1262 }; 1263 Measure t_0h_0m_9s[] = { 1264 Measure(0.0, MeasureUnit::createHour(status), status), 1265 Measure(0.0, MeasureUnit::createMinute(status), status), 1266 Measure(9.0, MeasureUnit::createSecond(status), status) 1267 }; 1268 Measure t_0h_0m_17s[] = { 1269 Measure(0.0, MeasureUnit::createHour(status), status), 1270 Measure(0.0, MeasureUnit::createMinute(status), status), 1271 Measure(17.0, MeasureUnit::createSecond(status), status) 1272 }; 1273 Measure t_6h_56_92m[] = { 1274 Measure(6.0, MeasureUnit::createHour(status), status), 1275 Measure(56.92, MeasureUnit::createMinute(status), status) 1276 }; 1277 Measure t_3h_4s_5m[] = { 1278 Measure(3.0, MeasureUnit::createHour(status), status), 1279 Measure(4.0, MeasureUnit::createSecond(status), status), 1280 Measure(5.0, MeasureUnit::createMinute(status), status) 1281 }; 1282 Measure t_6_7h_56_92m[] = { 1283 Measure(6.7, MeasureUnit::createHour(status), status), 1284 Measure(56.92, MeasureUnit::createMinute(status), status) 1285 }; 1286 1287 Measure t_3h_5h[] = { 1288 Measure(3.0, MeasureUnit::createHour(status), status), 1289 Measure(5.0, MeasureUnit::createHour(status), status) 1290 }; 1291 1292 if (!assertSuccess("Error creating Measure objects", status)) { 1293 return; 1294 } 1295 1296 ExpectedResult fullData[] = { 1297 {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "1 minute, 59.9996 seconds"}, 1298 {t_19m, UPRV_LENGTHOF(t_19m), "19 minutes"}, 1299 {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "1 hour, 23.5 seconds"}, 1300 {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "1 hour, 23.5 minutes"}, 1301 {t_1h_0m_23s, UPRV_LENGTHOF(t_1h_0m_23s), "1 hour, 0 minutes, 23 seconds"}, 1302 {t_2y_5M_3w_4d, UPRV_LENGTHOF(t_2y_5M_3w_4d), "2 years, 5 months, 3 weeks, 4 days"}}; 1303 1304 ExpectedResult abbrevData[] = { 1305 {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "1 min, 59.9996 sec"}, 1306 {t_19m, UPRV_LENGTHOF(t_19m), "19 min"}, 1307 {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "1 hr, 23.5 sec"}, 1308 {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "1 hr, 23.5 min"}, 1309 {t_1h_0m_23s, UPRV_LENGTHOF(t_1h_0m_23s), "1 hr, 0 min, 23 sec"}, 1310 {t_2y_5M_3w_4d, UPRV_LENGTHOF(t_2y_5M_3w_4d), "2 yrs, 5 mths, 3 wks, 4 days"}}; 1311 1312 ExpectedResult narrowData[] = { 1313 {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "1m 59.9996s"}, 1314 {t_19m, UPRV_LENGTHOF(t_19m), "19m"}, 1315 {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "1h 23.5s"}, 1316 {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "1h 23.5m"}, 1317 {t_1h_0m_23s, UPRV_LENGTHOF(t_1h_0m_23s), "1h 0m 23s"}, 1318 {t_2y_5M_3w_4d, UPRV_LENGTHOF(t_2y_5M_3w_4d), "2y 5m 3w 4d"}}; 1319 1320 ExpectedResult numericData[] = { 1321 {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "1:59.9996"}, 1322 {t_19m, UPRV_LENGTHOF(t_19m), "19m"}, 1323 {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "1:00:23.5"}, 1324 {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "1:23.5"}, 1325 {t_1h_0m_23s, UPRV_LENGTHOF(t_1h_0m_23s), "1:00:23"}, 1326 {t_5h_17m, UPRV_LENGTHOF(t_5h_17m), "5:17"}, 1327 {t_neg5h_17m, UPRV_LENGTHOF(t_neg5h_17m), "-5h 17m"}, 1328 {t_19m_28s, UPRV_LENGTHOF(t_19m_28s), "19:28"}, 1329 {t_2y_5M_3w_4d, UPRV_LENGTHOF(t_2y_5M_3w_4d), "2y 5m 3w 4d"}, 1330 {t_0h_0m_9s, UPRV_LENGTHOF(t_0h_0m_9s), "0:00:09"}, 1331 {t_6h_56_92m, UPRV_LENGTHOF(t_6h_56_92m), "6:56.92"}, 1332 {t_6_7h_56_92m, UPRV_LENGTHOF(t_6_7h_56_92m), "6:56.92"}, 1333 {t_3h_4s_5m, UPRV_LENGTHOF(t_3h_4s_5m), "3h 4s 5m"}, 1334 {t_3h_5h, UPRV_LENGTHOF(t_3h_5h), "3h 5h"}}; 1335 1336 ExpectedResult fullDataDe[] = { 1337 {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "1 Minute, 59,9996 Sekunden"}, 1338 {t_19m, UPRV_LENGTHOF(t_19m), "19 Minuten"}, 1339 {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "1 Stunde, 23,5 Sekunden"}, 1340 {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "1 Stunde, 23,5 Minuten"}, 1341 {t_1h_0m_23s, UPRV_LENGTHOF(t_1h_0m_23s), "1 Stunde, 0 Minuten und 23 Sekunden"}, 1342 {t_2y_5M_3w_4d, UPRV_LENGTHOF(t_2y_5M_3w_4d), "2 Jahre, 5 Monate, 3 Wochen und 4 Tage"}}; 1343 1344 ExpectedResult numericDataDe[] = { 1345 {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "1:59,9996"}, 1346 {t_19m, UPRV_LENGTHOF(t_19m), "19 Min."}, 1347 {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "1:00:23,5"}, 1348 {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "1:23,5"}, 1349 {t_1h_0m_23s, UPRV_LENGTHOF(t_1h_0m_23s), "1:00:23"}, 1350 {t_5h_17m, UPRV_LENGTHOF(t_5h_17m), "5:17"}, 1351 {t_19m_28s, UPRV_LENGTHOF(t_19m_28s), "19:28"}, 1352 {t_2y_5M_3w_4d, UPRV_LENGTHOF(t_2y_5M_3w_4d), "2 J, 5 M, 3 W und 4 T"}, 1353 {t_0h_0m_17s, UPRV_LENGTHOF(t_0h_0m_17s), "0:00:17"}, 1354 {t_6h_56_92m, UPRV_LENGTHOF(t_6h_56_92m), "6:56,92"}, 1355 {t_3h_5h, UPRV_LENGTHOF(t_3h_5h), "3 Std., 5 Std."}}; 1356 1357 Locale en(Locale::getEnglish()); 1358 LocalPointer<NumberFormat> nf(NumberFormat::createInstance(en, status)); 1359 if (U_FAILURE(status)) { 1360 dataerrln("Error creating number format en object - %s", u_errorName(status)); 1361 return; 1362 } 1363 nf->setMaximumFractionDigits(4); 1364 MeasureFormat mf(en, UMEASFMT_WIDTH_WIDE, (NumberFormat *) nf->clone(), status); 1365 if (!assertSuccess("Error creating measure format en WIDE", status)) { 1366 return; 1367 } 1368 verifyFormat("en WIDE", mf, fullData, UPRV_LENGTHOF(fullData)); 1369 1370 // exercise copy constructor 1371 { 1372 MeasureFormat mf2(mf); 1373 verifyFormat("en WIDE copy", mf2, fullData, UPRV_LENGTHOF(fullData)); 1374 } 1375 // exercise clone 1376 { 1377 MeasureFormat *mf3 = (MeasureFormat *) mf.clone(); 1378 verifyFormat("en WIDE copy", *mf3, fullData, UPRV_LENGTHOF(fullData)); 1379 delete mf3; 1380 } 1381 mf = MeasureFormat(en, UMEASFMT_WIDTH_SHORT, (NumberFormat *) nf->clone(), status); 1382 if (!assertSuccess("Error creating measure format en SHORT", status)) { 1383 return; 1384 } 1385 verifyFormat("en SHORT", mf, abbrevData, UPRV_LENGTHOF(abbrevData)); 1386 mf = MeasureFormat(en, UMEASFMT_WIDTH_NARROW, (NumberFormat *) nf->clone(), status); 1387 if (!assertSuccess("Error creating measure format en NARROW", status)) { 1388 return; 1389 } 1390 verifyFormat("en NARROW", mf, narrowData, UPRV_LENGTHOF(narrowData)); 1391 mf = MeasureFormat(en, UMEASFMT_WIDTH_NUMERIC, (NumberFormat *) nf->clone(), status); 1392 if (!assertSuccess("Error creating measure format en NUMERIC", status)) { 1393 return; 1394 } 1395 verifyFormat("en NUMERIC", mf, numericData, UPRV_LENGTHOF(numericData)); 1396 1397 Locale de(Locale::getGerman()); 1398 nf.adoptInstead(NumberFormat::createInstance(de, status)); 1399 if (!assertSuccess("Error creating number format de object", status)) { 1400 return; 1401 } 1402 nf->setMaximumFractionDigits(4); 1403 mf = MeasureFormat(de, UMEASFMT_WIDTH_WIDE, (NumberFormat *) nf->clone(), status); 1404 if (!assertSuccess("Error creating measure format de WIDE", status)) { 1405 return; 1406 } 1407 verifyFormat("de WIDE", mf, fullDataDe, UPRV_LENGTHOF(fullDataDe)); 1408 mf = MeasureFormat(de, UMEASFMT_WIDTH_NUMERIC, (NumberFormat *) nf->clone(), status); 1409 if (!assertSuccess("Error creating measure format de NUMERIC", status)) { 1410 return; 1411 } 1412 verifyFormat("de NUMERIC", mf, numericDataDe, UPRV_LENGTHOF(numericDataDe)); 1413 } 1414 1415 void MeasureFormatTest::Test10219FractionalPlurals() { 1416 Locale en(Locale::getEnglish()); 1417 double values[] = {1.588, 1.011}; 1418 const char *expected[2][3] = { 1419 {"1 minute", "1.5 minutes", "1.58 minutes"}, 1420 {"1 minute", "1.0 minutes", "1.01 minutes"} 1421 }; 1422 UErrorCode status = U_ZERO_ERROR; 1423 for (int j = 0; j < UPRV_LENGTHOF(values); j++) { 1424 for (int i = 0; i < UPRV_LENGTHOF(expected[j]); i++) { 1425 DecimalFormat *df = 1426 (DecimalFormat *) NumberFormat::createInstance(en, status); 1427 if (U_FAILURE(status)) { 1428 dataerrln("Error creating Number format - %s", u_errorName(status)); 1429 return; 1430 } 1431 df->setRoundingMode(DecimalFormat::kRoundDown); 1432 df->setMinimumFractionDigits(i); 1433 df->setMaximumFractionDigits(i); 1434 MeasureFormat mf(en, UMEASFMT_WIDTH_WIDE, df, status); 1435 if (!assertSuccess("Error creating Measure format", status)) { 1436 return; 1437 } 1438 Measure measure(values[j], MeasureUnit::createMinute(status), status); 1439 if (!assertSuccess("Error creating Measure unit", status)) { 1440 return; 1441 } 1442 verifyFormat("Test10219", mf, &measure, 1, expected[j][i]); 1443 } 1444 } 1445 } 1446 1447 static MeasureUnit toMeasureUnit(MeasureUnit *adopted) { 1448 MeasureUnit result(*adopted); 1449 delete adopted; 1450 return result; 1451 } 1452 1453 void MeasureFormatTest::TestGreek() { 1454 Locale locales[] = {Locale("el_GR"), Locale("el")}; 1455 UErrorCode status = U_ZERO_ERROR; 1456 MeasureUnit units[] = { 1457 toMeasureUnit(MeasureUnit::createSecond(status)), 1458 toMeasureUnit(MeasureUnit::createMinute(status)), 1459 toMeasureUnit(MeasureUnit::createHour(status)), 1460 toMeasureUnit(MeasureUnit::createDay(status)), 1461 toMeasureUnit(MeasureUnit::createWeek(status)), 1462 toMeasureUnit(MeasureUnit::createMonth(status)), 1463 toMeasureUnit(MeasureUnit::createYear(status))}; 1464 if (!assertSuccess("Error creating Measure units", status)) { 1465 return; 1466 } 1467 UMeasureFormatWidth styles[] = { 1468 UMEASFMT_WIDTH_WIDE, 1469 UMEASFMT_WIDTH_SHORT}; 1470 int32_t numbers[] = {1, 7}; 1471 const char *expected[] = { 1472 // "el_GR" 1 wide 1473 "1 \\u03B4\\u03B5\\u03C5\\u03C4\\u03B5\\u03C1\\u03CC\\u03BB\\u03B5\\u03C0\\u03C4\\u03BF", 1474 "1 \\u03BB\\u03B5\\u03C0\\u03C4\\u03CC", 1475 "1 \\u03CE\\u03C1\\u03B1", 1476 "1 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B1", 1477 "1 \\u03B5\\u03B2\\u03B4\\u03BF\\u03BC\\u03AC\\u03B4\\u03B1", 1478 "1 \\u03BC\\u03AE\\u03BD\\u03B1\\u03C2", 1479 "1 \\u03AD\\u03C4\\u03BF\\u03C2", 1480 // "el_GR" 1 short 1481 "1 \\u03B4\\u03B5\\u03C5\\u03C4.", 1482 "1 \\u03BB\\u03B5\\u03C0.", 1483 "1 \\u03CE\\u03C1\\u03B1", 1484 "1 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B1", 1485 "1 \\u03B5\\u03B2\\u03B4.", 1486 "1 \\u03BC\\u03AE\\u03BD.", 1487 "1 \\u03AD\\u03C4.", // year (one) 1488 // "el_GR" 7 wide 1489 "7 \\u03B4\\u03B5\\u03C5\\u03C4\\u03B5\\u03C1\\u03CC\\u03BB\\u03B5\\u03C0\\u03C4\\u03B1", 1490 "7 \\u03BB\\u03B5\\u03C0\\u03C4\\u03AC", 1491 "7 \\u03CE\\u03C1\\u03B5\\u03C2", 1492 "7 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B5\\u03C2", 1493 "7 \\u03B5\\u03B2\\u03B4\\u03BF\\u03BC\\u03AC\\u03B4\\u03B5\\u03C2", 1494 "7 \\u03BC\\u03AE\\u03BD\\u03B5\\u03C2", 1495 "7 \\u03AD\\u03C4\\u03B7", 1496 // "el_GR" 7 short 1497 "7 \\u03B4\\u03B5\\u03C5\\u03C4.", 1498 "7 \\u03BB\\u03B5\\u03C0.", 1499 "7 \\u03CE\\u03C1.", // hour (other) 1500 "7 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B5\\u03C2", 1501 "7 \\u03B5\\u03B2\\u03B4.", 1502 "7 \\u03BC\\u03AE\\u03BD.", 1503 "7 \\u03AD\\u03C4.", // year (other) 1504 1505 // "el" 1 wide 1506 "1 \\u03B4\\u03B5\\u03C5\\u03C4\\u03B5\\u03C1\\u03CC\\u03BB\\u03B5\\u03C0\\u03C4\\u03BF", 1507 "1 \\u03BB\\u03B5\\u03C0\\u03C4\\u03CC", 1508 "1 \\u03CE\\u03C1\\u03B1", 1509 "1 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B1", 1510 "1 \\u03B5\\u03B2\\u03B4\\u03BF\\u03BC\\u03AC\\u03B4\\u03B1", 1511 "1 \\u03BC\\u03AE\\u03BD\\u03B1\\u03C2", 1512 "1 \\u03AD\\u03C4\\u03BF\\u03C2", 1513 // "el" 1 short 1514 "1 \\u03B4\\u03B5\\u03C5\\u03C4.", 1515 "1 \\u03BB\\u03B5\\u03C0.", 1516 "1 \\u03CE\\u03C1\\u03B1", 1517 "1 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B1", 1518 "1 \\u03B5\\u03B2\\u03B4.", 1519 "1 \\u03BC\\u03AE\\u03BD.", 1520 "1 \\u03AD\\u03C4.", // year (one) 1521 // "el" 7 wide 1522 "7 \\u03B4\\u03B5\\u03C5\\u03C4\\u03B5\\u03C1\\u03CC\\u03BB\\u03B5\\u03C0\\u03C4\\u03B1", 1523 "7 \\u03BB\\u03B5\\u03C0\\u03C4\\u03AC", 1524 "7 \\u03CE\\u03C1\\u03B5\\u03C2", 1525 "7 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B5\\u03C2", 1526 "7 \\u03B5\\u03B2\\u03B4\\u03BF\\u03BC\\u03AC\\u03B4\\u03B5\\u03C2", 1527 "7 \\u03BC\\u03AE\\u03BD\\u03B5\\u03C2", 1528 "7 \\u03AD\\u03C4\\u03B7", 1529 // "el" 7 short 1530 "7 \\u03B4\\u03B5\\u03C5\\u03C4.", 1531 "7 \\u03BB\\u03B5\\u03C0.", 1532 "7 \\u03CE\\u03C1.", // hour (other) 1533 "7 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B5\\u03C2", 1534 "7 \\u03B5\\u03B2\\u03B4.", 1535 "7 \\u03BC\\u03AE\\u03BD.", 1536 "7 \\u03AD\\u03C4."}; // year (other) 1537 1538 int32_t counter = 0; 1539 for (int32_t locIndex = 0; locIndex < UPRV_LENGTHOF(locales); ++locIndex ) { 1540 for( int32_t numIndex = 0; numIndex < UPRV_LENGTHOF(numbers); ++numIndex ) { 1541 for ( int32_t styleIndex = 0; styleIndex < UPRV_LENGTHOF(styles); ++styleIndex ) { 1542 for ( int32_t unitIndex = 0; unitIndex < UPRV_LENGTHOF(units); ++unitIndex ) { 1543 Measure measure(numbers[numIndex], new MeasureUnit(units[unitIndex]), status); 1544 if (!assertSuccess("Error creating Measure", status)) { 1545 return; 1546 } 1547 MeasureFormat fmt(locales[locIndex], styles[styleIndex], status); 1548 if (!assertSuccess("Error creating Measure format", status)) { 1549 return; 1550 } 1551 verifyFormat("TestGreek", fmt, &measure, 1, expected[counter]); 1552 ++counter; 1553 } 1554 } 1555 } 1556 } 1557 } 1558 1559 void MeasureFormatTest::TestFormatSingleArg() { 1560 UErrorCode status = U_ZERO_ERROR; 1561 MeasureFormat fmt("en", UMEASFMT_WIDTH_WIDE, status); 1562 if (!assertSuccess("Error creating formatter", status)) { 1563 return; 1564 } 1565 UnicodeString buffer; 1566 FieldPosition pos(FieldPosition::DONT_CARE); 1567 fmt.format( 1568 new Measure(3.5, MeasureUnit::createFoot(status), status), 1569 buffer, 1570 pos, 1571 status); 1572 if (!assertSuccess("Error formatting", status)) { 1573 return; 1574 } 1575 assertEquals( 1576 "TestFormatSingleArg", 1577 UnicodeString("3.5 feet"), 1578 buffer); 1579 } 1580 1581 void MeasureFormatTest::TestFormatMeasuresZeroArg() { 1582 UErrorCode status = U_ZERO_ERROR; 1583 MeasureFormat fmt("en", UMEASFMT_WIDTH_WIDE, status); 1584 verifyFormat("TestFormatMeasuresZeroArg", fmt, NULL, 0, ""); 1585 } 1586 1587 void MeasureFormatTest::TestSimplePer() { 1588 Locale en("en"); 1589 UErrorCode status = U_ZERO_ERROR; 1590 LocalPointer<MeasureUnit> second(MeasureUnit::createSecond(status)); 1591 LocalPointer<MeasureUnit> minute(MeasureUnit::createMinute(status)); 1592 LocalPointer<MeasureUnit> pound(MeasureUnit::createPound(status)); 1593 if (!assertSuccess("", status)) { 1594 return; 1595 } 1596 1597 helperTestSimplePer( 1598 en, UMEASFMT_WIDTH_WIDE, 1599 1.0, *pound, *second, "1 pound per second"); 1600 helperTestSimplePer( 1601 en, UMEASFMT_WIDTH_WIDE, 1602 2.0, *pound, *second, "2 pounds per second"); 1603 helperTestSimplePer( 1604 en, UMEASFMT_WIDTH_WIDE, 1605 1.0, *pound, *minute, "1 pound per minute"); 1606 helperTestSimplePer( 1607 en, UMEASFMT_WIDTH_WIDE, 1608 2.0, *pound, *minute, "2 pounds per minute"); 1609 1610 helperTestSimplePer( 1611 en, UMEASFMT_WIDTH_SHORT, 1.0, *pound, *second, "1 lb/s"); 1612 helperTestSimplePer( 1613 en, UMEASFMT_WIDTH_SHORT, 2.0, *pound, *second, "2 lb/s"); 1614 helperTestSimplePer( 1615 en, UMEASFMT_WIDTH_SHORT, 1.0, *pound, *minute, "1 lb/min"); 1616 helperTestSimplePer( 1617 en, UMEASFMT_WIDTH_SHORT, 2.0, *pound, *minute, "2 lb/min"); 1618 1619 helperTestSimplePer( 1620 en, UMEASFMT_WIDTH_NARROW, 1.0, *pound, *second, "1#/s"); 1621 helperTestSimplePer( 1622 en, UMEASFMT_WIDTH_NARROW, 2.0, *pound, *second, "2#/s"); 1623 helperTestSimplePer( 1624 en, UMEASFMT_WIDTH_NARROW, 1.0, *pound, *minute, "1#/min"); 1625 helperTestSimplePer( 1626 en, UMEASFMT_WIDTH_NARROW, 2.0, *pound, *minute, "2#/min"); 1627 1628 helperTestSimplePer( 1629 en, UMEASFMT_WIDTH_SHORT, 1630 23.3, *pound, *second, "23.3 lb/s", 1631 NumberFormat::kDecimalSeparatorField, 1632 2, 3); 1633 1634 helperTestSimplePer( 1635 en, UMEASFMT_WIDTH_SHORT, 1636 23.3, *pound, *second, "23.3 lb/s", 1637 NumberFormat::kIntegerField, 1638 0, 2); 1639 1640 helperTestSimplePer( 1641 en, UMEASFMT_WIDTH_SHORT, 1642 23.3, *pound, *minute, "23.3 lb/min", 1643 NumberFormat::kDecimalSeparatorField, 1644 2, 3); 1645 1646 helperTestSimplePer( 1647 en, UMEASFMT_WIDTH_SHORT, 1648 23.3, *pound, *minute, "23.3 lb/min", 1649 NumberFormat::kIntegerField, 1650 0, 2); 1651 } 1652 1653 void MeasureFormatTest::TestNumeratorPlurals() { 1654 Locale pl("pl"); 1655 UErrorCode status = U_ZERO_ERROR; 1656 LocalPointer<MeasureUnit> second(MeasureUnit::createSecond(status)); 1657 LocalPointer<MeasureUnit> foot(MeasureUnit::createFoot(status)); 1658 if (!assertSuccess("", status)) { 1659 return; 1660 } 1661 1662 helperTestSimplePer( 1663 pl, 1664 UMEASFMT_WIDTH_WIDE, 1665 1.0, *foot, *second, "1 stopa na sekund\\u0119"); 1666 helperTestSimplePer( 1667 pl, 1668 UMEASFMT_WIDTH_WIDE, 1669 2.0, *foot, *second, "2 stopy na sekund\\u0119"); 1670 helperTestSimplePer( 1671 pl, 1672 UMEASFMT_WIDTH_WIDE, 1673 5.0, *foot, *second, "5 st\\u00f3p na sekund\\u0119"); 1674 helperTestSimplePer( 1675 pl, UMEASFMT_WIDTH_WIDE, 1676 1.5, *foot, *second, "1,5 stopy na sekund\\u0119"); 1677 } 1678 1679 void MeasureFormatTest::helperTestSimplePer( 1680 const Locale &locale, 1681 UMeasureFormatWidth width, 1682 double value, 1683 const MeasureUnit &unit, 1684 const MeasureUnit &perUnit, 1685 const char *expected) { 1686 helperTestSimplePer( 1687 locale, 1688 width, 1689 value, 1690 unit, 1691 perUnit, 1692 expected, 1693 FieldPosition::DONT_CARE, 1694 0, 1695 0); 1696 } 1697 1698 void MeasureFormatTest::helperTestSimplePer( 1699 const Locale &locale, 1700 UMeasureFormatWidth width, 1701 double value, 1702 const MeasureUnit &unit, 1703 const MeasureUnit &perUnit, 1704 const char *expected, 1705 int32_t field, 1706 int32_t expected_start, 1707 int32_t expected_end) { 1708 UErrorCode status = U_ZERO_ERROR; 1709 FieldPosition pos(field); 1710 MeasureFormat fmt(locale, width, status); 1711 if (!assertSuccess("Error creating format object", status)) { 1712 return; 1713 } 1714 Measure measure(value, (MeasureUnit *) unit.clone(), status); 1715 if (!assertSuccess("Error creating measure object", status)) { 1716 return; 1717 } 1718 UnicodeString prefix("prefix: "); 1719 UnicodeString buffer(prefix); 1720 fmt.formatMeasurePerUnit( 1721 measure, 1722 perUnit, 1723 buffer, 1724 pos, 1725 status); 1726 if (!assertSuccess("Error formatting measures with per", status)) { 1727 return; 1728 } 1729 UnicodeString uexpected(expected); 1730 uexpected = prefix + uexpected; 1731 assertEquals( 1732 "TestSimplePer", 1733 uexpected.unescape(), 1734 buffer); 1735 if (field != FieldPosition::DONT_CARE) { 1736 assertEquals( 1737 "Start", expected_start, pos.getBeginIndex() - prefix.length()); 1738 assertEquals( 1739 "End", expected_end, pos.getEndIndex() - prefix.length()); 1740 } 1741 } 1742 1743 void MeasureFormatTest::TestMultiples() { 1744 Locale ru("ru"); 1745 Locale en("en"); 1746 helperTestMultiples(en, UMEASFMT_WIDTH_WIDE, "2 miles, 1 foot, 2.3 inches"); 1747 helperTestMultiples(en, UMEASFMT_WIDTH_SHORT, "2 mi, 1 ft, 2.3 in"); 1748 helperTestMultiples(en, UMEASFMT_WIDTH_NARROW, "2mi 1\\u2032 2.3\\u2033"); 1749 helperTestMultiples(ru, UMEASFMT_WIDTH_WIDE, "2 \\u043C\\u0438\\u043B\\u0438 1 \\u0444\\u0443\\u0442 2,3 \\u0434\\u044E\\u0439\\u043C\\u0430"); 1750 helperTestMultiples(ru, UMEASFMT_WIDTH_SHORT, "2 \\u043C\\u0438\\u043B\\u0438 1 \\u0444\\u0443\\u0442 2,3 \\u0434\\u044E\\u0439\\u043C."); 1751 helperTestMultiples(ru, UMEASFMT_WIDTH_NARROW, "2 \\u043C\\u0438\\u043B\\u044C 1 \\u0444\\u0442 2,3 \\u0434\\u044E\\u0439\\u043C\\u0430"); 1752 } 1753 1754 void MeasureFormatTest::helperTestMultiples( 1755 const Locale &locale, 1756 UMeasureFormatWidth width, 1757 const char *expected) { 1758 UErrorCode status = U_ZERO_ERROR; 1759 FieldPosition pos(FieldPosition::DONT_CARE); 1760 MeasureFormat fmt(locale, width, status); 1761 if (!assertSuccess("Error creating format object", status)) { 1762 return; 1763 } 1764 Measure measures[] = { 1765 Measure(2.0, MeasureUnit::createMile(status), status), 1766 Measure(1.0, MeasureUnit::createFoot(status), status), 1767 Measure(2.3, MeasureUnit::createInch(status), status)}; 1768 if (!assertSuccess("Error creating measures", status)) { 1769 return; 1770 } 1771 UnicodeString buffer; 1772 fmt.formatMeasures(measures, UPRV_LENGTHOF(measures), buffer, pos, status); 1773 if (!assertSuccess("Error formatting measures", status)) { 1774 return; 1775 } 1776 assertEquals("TestMultiples", UnicodeString(expected).unescape(), buffer); 1777 } 1778 1779 void MeasureFormatTest::TestManyLocaleDurations() { 1780 UErrorCode status = U_ZERO_ERROR; 1781 Measure measures[] = { 1782 Measure(5.0, MeasureUnit::createHour(status), status), 1783 Measure(37.0, MeasureUnit::createMinute(status), status)}; 1784 if (!assertSuccess("Error creating measures", status)) { 1785 return; 1786 } 1787 helperTestManyLocaleDurations("da", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5 t og 37 min"); 1788 helperTestManyLocaleDurations("da", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5.37"); 1789 helperTestManyLocaleDurations("de", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5 Std., 37 Min."); 1790 helperTestManyLocaleDurations("de", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37"); 1791 helperTestManyLocaleDurations("en", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5h 37m"); 1792 helperTestManyLocaleDurations("en", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37"); 1793 helperTestManyLocaleDurations("en_GB", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5h 37m"); 1794 helperTestManyLocaleDurations("en_GB", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37"); 1795 helperTestManyLocaleDurations("es", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5h 37min"); 1796 helperTestManyLocaleDurations("es", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37"); 1797 helperTestManyLocaleDurations("fi", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5t 37min"); 1798 helperTestManyLocaleDurations("fi", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5.37"); 1799 helperTestManyLocaleDurations("fr", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5h 37 min"); 1800 helperTestManyLocaleDurations("fr", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37"); 1801 helperTestManyLocaleDurations("is", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5 klst. og 37 m\\u00EDn."); 1802 helperTestManyLocaleDurations("is", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37"); 1803 helperTestManyLocaleDurations("ja", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5\\u6642\\u959337\\u5206"); 1804 helperTestManyLocaleDurations("ja", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37"); 1805 helperTestManyLocaleDurations("nb", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5t, 37m"); 1806 helperTestManyLocaleDurations("nb", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37"); 1807 helperTestManyLocaleDurations("nl", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5 u, 37 m"); 1808 helperTestManyLocaleDurations("nl", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37"); 1809 helperTestManyLocaleDurations("nn", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5t og 37m"); 1810 helperTestManyLocaleDurations("nn", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37"); 1811 helperTestManyLocaleDurations("sv", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5h 37m"); 1812 helperTestManyLocaleDurations("sv", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37"); 1813 helperTestManyLocaleDurations("zh", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5\\u5C0F\\u65F637\\u5206\\u949F"); 1814 helperTestManyLocaleDurations("zh", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37"); 1815 } 1816 1817 void MeasureFormatTest::helperTestManyLocaleDurations( const char *localeID, 1818 UMeasureFormatWidth width, 1819 const Measure *measures, 1820 int32_t measureCount, 1821 const char *expected) { 1822 UErrorCode status = U_ZERO_ERROR; 1823 MeasureFormat fmt(Locale(localeID), width, status); 1824 if (U_FAILURE(status)) { 1825 errln("Could not create MeasureFormat for locale %s, width %d, status: %s", localeID, (int)width, u_errorName(status)); 1826 return; 1827 } 1828 UnicodeString buffer; 1829 FieldPosition pos(FieldPosition::DONT_CARE); 1830 fmt.formatMeasures(measures, measureCount, buffer, pos, status); 1831 if (U_FAILURE(status)) { 1832 errln("MeasureFormat::formatMeasures failed for locale %s, width %d, status: %s", localeID, (int)width, u_errorName(status)); 1833 return; 1834 } 1835 UnicodeString expStr(UnicodeString(expected).unescape()); 1836 if (buffer != expStr) { 1837 errln("MeasureFormat::formatMeasures for locale " + UnicodeString(localeID) + ", width " + width + ", expected \"" + expStr + "\", got \"" + buffer + "\""); 1838 } 1839 } 1840 1841 void MeasureFormatTest::TestGram() { 1842 UErrorCode status = U_ZERO_ERROR; 1843 MeasureFormat fmt("en", UMEASFMT_WIDTH_SHORT, status); 1844 if (!assertSuccess("Error creating format object", status)) { 1845 return; 1846 } 1847 Measure gram((double)1, MeasureUnit::createGram(status), status); 1848 Measure gforce((double)1, MeasureUnit::createGForce(status), status); 1849 if (!assertSuccess("Error creating measures", status)) { 1850 return; 1851 } 1852 verifyFormat("TestGram", fmt, &gram, 1, "1 g"); 1853 verifyFormat("TestGram", fmt, &gforce, 1, "1 G"); 1854 } 1855 1856 void MeasureFormatTest::TestCurrencies() { 1857 UChar USD[4]; 1858 u_uastrcpy(USD, "USD"); 1859 UErrorCode status = U_ZERO_ERROR; 1860 CurrencyAmount USD_1(1.0, USD, status); 1861 assertEquals("Currency Code", USD, USD_1.getISOCurrency()); 1862 CurrencyAmount USD_2(2.0, USD, status); 1863 CurrencyAmount USD_NEG_1(-1.0, USD, status); 1864 if (!assertSuccess("Error creating currencies", status)) { 1865 return; 1866 } 1867 Locale en("en"); 1868 MeasureFormat fmt(en, UMEASFMT_WIDTH_WIDE, status); 1869 if (!assertSuccess("Error creating format object", status)) { 1870 return; 1871 } 1872 verifyFormat("TestCurrenciesWide", fmt, &USD_NEG_1, 1, "-1.00 US dollars"); 1873 verifyFormat("TestCurrenciesWide", fmt, &USD_1, 1, "1.00 US dollars"); 1874 verifyFormat("TestCurrenciesWide", fmt, &USD_2, 1, "2.00 US dollars"); 1875 fmt = MeasureFormat(en, UMEASFMT_WIDTH_SHORT, status); 1876 if (!assertSuccess("Error creating format object", status)) { 1877 return; 1878 } 1879 verifyFormat("TestCurrenciesShort", fmt, &USD_NEG_1, 1, "-USD1.00"); 1880 verifyFormat("TestCurrenciesShort", fmt, &USD_1, 1, "USD1.00"); 1881 verifyFormat("TestCurrenciesShort", fmt, &USD_2, 1, "USD2.00"); 1882 fmt = MeasureFormat(en, UMEASFMT_WIDTH_NARROW, status); 1883 if (!assertSuccess("Error creating format object", status)) { 1884 return; 1885 } 1886 verifyFormat("TestCurrenciesNarrow", fmt, &USD_NEG_1, 1, "-$1.00"); 1887 verifyFormat("TestCurrenciesNarrow", fmt, &USD_1, 1, "$1.00"); 1888 verifyFormat("TestCurrenciesNarrow", fmt, &USD_2, 1, "$2.00"); 1889 fmt = MeasureFormat(en, UMEASFMT_WIDTH_NUMERIC, status); 1890 if (!assertSuccess("Error creating format object", status)) { 1891 return; 1892 } 1893 verifyFormat("TestCurrenciesNumeric", fmt, &USD_NEG_1, 1, "-$1.00"); 1894 verifyFormat("TestCurrenciesNumeric", fmt, &USD_1, 1, "$1.00"); 1895 verifyFormat("TestCurrenciesNumeric", fmt, &USD_2, 1, "$2.00"); 1896 } 1897 1898 void MeasureFormatTest::TestDisplayNames() { 1899 UErrorCode status = U_ZERO_ERROR; 1900 helperTestDisplayName( MeasureUnit::createYear(status), "en", UMEASFMT_WIDTH_WIDE, "years" ); 1901 helperTestDisplayName( MeasureUnit::createYear(status), "ja", UMEASFMT_WIDTH_WIDE, "\\u5E74" ); 1902 helperTestDisplayName( MeasureUnit::createYear(status), "es", UMEASFMT_WIDTH_WIDE, "a\\u00F1os" ); 1903 helperTestDisplayName( MeasureUnit::createYear(status), "pt", UMEASFMT_WIDTH_WIDE, "anos" ); 1904 helperTestDisplayName( MeasureUnit::createYear(status), "pt-PT", UMEASFMT_WIDTH_WIDE, "anos" ); 1905 helperTestDisplayName( MeasureUnit::createAmpere(status), "en", UMEASFMT_WIDTH_WIDE, "amperes" ); 1906 helperTestDisplayName( MeasureUnit::createAmpere(status), "ja", UMEASFMT_WIDTH_WIDE, "\\u30A2\\u30F3\\u30DA\\u30A2" ); 1907 helperTestDisplayName( MeasureUnit::createAmpere(status), "es", UMEASFMT_WIDTH_WIDE, "amperios" ); 1908 helperTestDisplayName( MeasureUnit::createAmpere(status), "pt", UMEASFMT_WIDTH_WIDE, "amperes" ); 1909 helperTestDisplayName( MeasureUnit::createAmpere(status), "pt-PT", UMEASFMT_WIDTH_WIDE, "amperes" ); 1910 helperTestDisplayName( MeasureUnit::createMeterPerSecondSquared(status), "pt", UMEASFMT_WIDTH_WIDE, "metros por segundo ao quadrado" ); 1911 helperTestDisplayName( MeasureUnit::createMeterPerSecondSquared(status), "pt-PT", UMEASFMT_WIDTH_WIDE, "metros por segundo quadrado" ); 1912 helperTestDisplayName( MeasureUnit::createSquareKilometer(status), "pt", UMEASFMT_WIDTH_NARROW, "km\\u00B2" ); 1913 helperTestDisplayName( MeasureUnit::createSquareKilometer(status), "pt", UMEASFMT_WIDTH_SHORT, "km\\u00B2" ); 1914 helperTestDisplayName( MeasureUnit::createSquareKilometer(status), "pt", UMEASFMT_WIDTH_WIDE, "quil\\u00F4metros quadrados" ); 1915 helperTestDisplayName( MeasureUnit::createSecond(status), "pt-PT", UMEASFMT_WIDTH_NARROW, "s" ); 1916 helperTestDisplayName( MeasureUnit::createSecond(status), "pt-PT", UMEASFMT_WIDTH_SHORT, "s" ); 1917 helperTestDisplayName( MeasureUnit::createSecond(status), "pt-PT", UMEASFMT_WIDTH_WIDE, "segundos" ); 1918 helperTestDisplayName( MeasureUnit::createSecond(status), "pt", UMEASFMT_WIDTH_NARROW, "seg" ); 1919 helperTestDisplayName( MeasureUnit::createSecond(status), "pt", UMEASFMT_WIDTH_SHORT, "seg" ); 1920 helperTestDisplayName( MeasureUnit::createSecond(status), "pt", UMEASFMT_WIDTH_WIDE, "segundos" ); 1921 assertSuccess("Error creating measure units", status); 1922 } 1923 1924 void MeasureFormatTest::helperTestDisplayName(const MeasureUnit *unit, 1925 const char *localeID, 1926 UMeasureFormatWidth width, 1927 const char *expected) { 1928 UErrorCode status = U_ZERO_ERROR; 1929 MeasureFormat fmt(Locale(localeID), width, status); 1930 if (U_FAILURE(status)) { 1931 errln("Could not create MeasureFormat for locale %s, width %d, status: %s", 1932 localeID, (int)width, u_errorName(status)); 1933 return; 1934 } 1935 1936 UnicodeString dnam = fmt.getUnitDisplayName(*unit, status); 1937 if (U_FAILURE(status)) { 1938 errln("MeasureFormat::getUnitDisplayName failed for unit %s-%s, locale %s, width %d, status: %s", 1939 unit->getType(), unit->getSubtype(), localeID, (int)width, u_errorName(status)); 1940 return; 1941 } 1942 1943 UnicodeString expStr(UnicodeString(expected).unescape()); 1944 if (dnam != expStr) { 1945 errln("MeasureFormat::getUnitDisplayName for unit %s-%s, locale %s, width %d: expected \"%s\", got \"%s\"", 1946 unit->getType(), unit->getSubtype(), localeID, (int)width, CStr(expStr)(), CStr(dnam)()); 1947 } 1948 1949 // Delete the measure unit 1950 delete unit; 1951 } 1952 1953 void MeasureFormatTest::TestFieldPosition() { 1954 UErrorCode status = U_ZERO_ERROR; 1955 MeasureFormat fmt("en", UMEASFMT_WIDTH_SHORT, status); 1956 if (!assertSuccess("Error creating format object", status)) { 1957 return; 1958 } 1959 Measure measure(43.5, MeasureUnit::createFoot(status), status); 1960 if (!assertSuccess("Error creating measure object 1", status)) { 1961 return; 1962 } 1963 UnicodeString prefix("123456: "); 1964 verifyFieldPosition( 1965 "", 1966 fmt, 1967 prefix, 1968 &measure, 1969 1, 1970 NumberFormat::kDecimalSeparatorField, 1971 10, 1972 11); 1973 measure = Measure(43.0, MeasureUnit::createFoot(status), status); 1974 if (!assertSuccess("Error creating measure object 2", status)) { 1975 return; 1976 } 1977 verifyFieldPosition( 1978 "", 1979 fmt, 1980 prefix, 1981 &measure, 1982 1, 1983 NumberFormat::kDecimalSeparatorField, 1984 0, 1985 0); 1986 } 1987 1988 void MeasureFormatTest::TestFieldPositionMultiple() { 1989 UErrorCode status = U_ZERO_ERROR; 1990 MeasureFormat fmt("en", UMEASFMT_WIDTH_SHORT, status); 1991 if (!assertSuccess("Error creating format object", status)) { 1992 return; 1993 } 1994 Measure first[] = { 1995 Measure((double)354, MeasureUnit::createMeter(status), status), 1996 Measure((double)23, MeasureUnit::createCentimeter(status), status)}; 1997 Measure second[] = { 1998 Measure((double)354, MeasureUnit::createMeter(status), status), 1999 Measure((double)23, MeasureUnit::createCentimeter(status), status), 2000 Measure((double)5.4, MeasureUnit::createMillimeter(status), status)}; 2001 Measure third[] = { 2002 Measure((double)3, MeasureUnit::createMeter(status), status), 2003 Measure((double)23, MeasureUnit::createCentimeter(status), status), 2004 Measure((double)5, MeasureUnit::createMillimeter(status), status)}; 2005 if (!assertSuccess("Error creating measure objects", status)) { 2006 return; 2007 } 2008 UnicodeString prefix("123456: "); 2009 verifyFieldPosition( 2010 "Integer", 2011 fmt, 2012 prefix, 2013 first, 2014 UPRV_LENGTHOF(first), 2015 NumberFormat::kIntegerField, 2016 8, 2017 11); 2018 verifyFieldPosition( 2019 "Decimal separator", 2020 fmt, 2021 prefix, 2022 second, 2023 UPRV_LENGTHOF(second), 2024 NumberFormat::kDecimalSeparatorField, 2025 23, 2026 24); 2027 verifyFieldPosition( 2028 "no decimal separator", 2029 fmt, 2030 prefix, 2031 third, 2032 UPRV_LENGTHOF(third), 2033 NumberFormat::kDecimalSeparatorField, 2034 0, 2035 0); 2036 } 2037 2038 void MeasureFormatTest::TestBadArg() { 2039 UErrorCode status = U_ZERO_ERROR; 2040 MeasureFormat fmt("en", UMEASFMT_WIDTH_SHORT, status); 2041 if (!assertSuccess("Error creating format object", status)) { 2042 return; 2043 } 2044 FieldPosition pos(FieldPosition::DONT_CARE); 2045 UnicodeString buffer; 2046 fmt.format( 2047 9.3, 2048 buffer, 2049 pos, 2050 status); 2051 if (status != U_ILLEGAL_ARGUMENT_ERROR) { 2052 errln("Expected ILLEGAL_ARGUMENT_ERROR"); 2053 } 2054 } 2055 2056 void MeasureFormatTest::TestEquality() { 2057 UErrorCode status = U_ZERO_ERROR; 2058 NumberFormat* nfeq = NumberFormat::createInstance("en", status); 2059 NumberFormat* nfne = NumberFormat::createInstance("fr", status); 2060 MeasureFormat fmt("en", UMEASFMT_WIDTH_SHORT, status); 2061 MeasureFormat fmtEq2("en", UMEASFMT_WIDTH_SHORT, nfeq, status); 2062 MeasureFormat fmtne1("en", UMEASFMT_WIDTH_WIDE, status); 2063 MeasureFormat fmtne2("fr", UMEASFMT_WIDTH_SHORT, status); 2064 MeasureFormat fmtne3("en", UMEASFMT_WIDTH_SHORT, nfne, status); 2065 if (U_FAILURE(status)) { 2066 dataerrln("Error creating MeasureFormats - %s", u_errorName(status)); 2067 return; 2068 } 2069 MeasureFormat fmtEq(fmt); 2070 assertTrue("Equal", fmt == fmtEq); 2071 assertTrue("Equal2", fmt == fmtEq2); 2072 assertFalse("Equal Neg", fmt != fmtEq); 2073 assertTrue("Not Equal 1", fmt != fmtne1); 2074 assertFalse("Not Equal Neg 1", fmt == fmtne1); 2075 assertTrue("Not Equal 2", fmt != fmtne2); 2076 assertTrue("Not Equal 3", fmt != fmtne3); 2077 } 2078 2079 void MeasureFormatTest::TestGroupingSeparator() { 2080 UErrorCode status = U_ZERO_ERROR; 2081 Locale en("en"); 2082 MeasureFormat fmt(en, UMEASFMT_WIDTH_SHORT, status); 2083 if (!assertSuccess("Error creating format object", status)) { 2084 return; 2085 } 2086 Measure ms[] = { 2087 Measure((int32_t)INT32_MAX, MeasureUnit::createYear(status), status), 2088 Measure((int32_t)INT32_MIN, MeasureUnit::createMonth(status), status), 2089 Measure(-987.0, MeasureUnit::createDay(status), status), 2090 Measure(1362.0, MeasureUnit::createHour(status), status), 2091 Measure(987.0, MeasureUnit::createMinute(status), status)}; 2092 FieldPosition pos(NumberFormat::kGroupingSeparatorField); 2093 UnicodeString appendTo; 2094 fmt.formatMeasures(ms, 5, appendTo, pos, status); 2095 if (!assertSuccess("Error formatting", status)) { 2096 return; 2097 } 2098 assertEquals( 2099 "grouping separator", 2100 "2,147,483,647 yrs, -2,147,483,648 mths, -987 days, 1,362 hr, 987 min", 2101 appendTo); 2102 assertEquals("begin index", 9, pos.getBeginIndex()); 2103 assertEquals("end index", 10, pos.getEndIndex()); 2104 } 2105 2106 void MeasureFormatTest::TestDoubleZero() { 2107 UErrorCode status = U_ZERO_ERROR; 2108 Measure measures[] = { 2109 Measure(4.7, MeasureUnit::createHour(status), status), 2110 Measure(23.0, MeasureUnit::createMinute(status), status), 2111 Measure(16.0, MeasureUnit::createSecond(status), status)}; 2112 Locale en("en"); 2113 NumberFormat *nf = NumberFormat::createInstance(en, status); 2114 MeasureFormat fmt("en", UMEASFMT_WIDTH_WIDE, nf, status); 2115 UnicodeString appendTo; 2116 FieldPosition pos(FieldPosition::DONT_CARE); 2117 if (U_FAILURE(status)) { 2118 dataerrln("Error creating formatter - %s", u_errorName(status)); 2119 return; 2120 } 2121 nf->setMinimumFractionDigits(2); 2122 nf->setMaximumFractionDigits(2); 2123 fmt.formatMeasures(measures, UPRV_LENGTHOF(measures), appendTo, pos, status); 2124 if (!assertSuccess("Error formatting", status)) { 2125 return; 2126 } 2127 assertEquals( 2128 "TestDoubleZero", 2129 UnicodeString("4 hours, 23 minutes, 16.00 seconds"), 2130 appendTo); 2131 measures[0] = Measure(-4.7, MeasureUnit::createHour(status), status); 2132 appendTo.remove(); 2133 fmt.formatMeasures(measures, UPRV_LENGTHOF(measures), appendTo, pos, status); 2134 if (!assertSuccess("Error formatting", status)) { 2135 return; 2136 } 2137 assertEquals( 2138 "TestDoubleZero", 2139 UnicodeString("-4 hours, 23 minutes, 16.00 seconds"), 2140 appendTo); 2141 } 2142 2143 void MeasureFormatTest::TestUnitPerUnitResolution() { 2144 UErrorCode status = U_ZERO_ERROR; 2145 Locale en("en"); 2146 MeasureFormat fmt("en", UMEASFMT_WIDTH_SHORT, status); 2147 Measure measure(50.0, MeasureUnit::createPound(status), status); 2148 LocalPointer<MeasureUnit> sqInch(MeasureUnit::createSquareInch(status)); 2149 if (!assertSuccess("Create of format unit and per unit", status)) { 2150 return; 2151 } 2152 FieldPosition pos(FieldPosition::DONT_CARE); 2153 UnicodeString actual; 2154 fmt.formatMeasurePerUnit( 2155 measure, 2156 *sqInch, 2157 actual, 2158 pos, 2159 status); 2160 assertEquals("", "50 psi", actual); 2161 } 2162 2163 void MeasureFormatTest::TestIndividualPluralFallback() { 2164 // See ticket #11986 "incomplete fallback in MeasureFormat". 2165 // In CLDR 28, fr_CA temperature-generic/short has only the "one" form, 2166 // and falls back to fr for the "other" form. 2167 IcuTestErrorCode errorCode(*this, "TestIndividualPluralFallback"); 2168 MeasureFormat mf("fr_CA", UMEASFMT_WIDTH_SHORT, errorCode); 2169 LocalPointer<Measure> twoDeg( 2170 new Measure(2.0, MeasureUnit::createGenericTemperature(errorCode), errorCode), errorCode); 2171 UnicodeString expected = UNICODE_STRING_SIMPLE("2\\u00B0").unescape(); 2172 UnicodeString actual; 2173 assertEquals("2 deg temp in fr_CA", expected, mf.format(twoDeg.orphan(), actual, errorCode), TRUE); 2174 } 2175 2176 void MeasureFormatTest::verifyFieldPosition( 2177 const char *description, 2178 const MeasureFormat &fmt, 2179 const UnicodeString &prefix, 2180 const Measure *measures, 2181 int32_t measureCount, 2182 NumberFormat::EAlignmentFields field, 2183 int32_t start, 2184 int32_t end) { 2185 // 8 char lead 2186 UnicodeString result(prefix); 2187 FieldPosition pos(field); 2188 UErrorCode status = U_ZERO_ERROR; 2189 CharString ch; 2190 const char *descPrefix = ch.append(description, status) 2191 .append(": ", status).data(); 2192 CharString beginIndex; 2193 beginIndex.append(descPrefix, status).append("beginIndex", status); 2194 CharString endIndex; 2195 endIndex.append(descPrefix, status).append("endIndex", status); 2196 fmt.formatMeasures(measures, measureCount, result, pos, status); 2197 if (!assertSuccess("Error formatting", status)) { 2198 return; 2199 } 2200 assertEquals(beginIndex.data(), start, pos.getBeginIndex()); 2201 assertEquals(endIndex.data(), end, pos.getEndIndex()); 2202 } 2203 2204 void MeasureFormatTest::verifyFormat( 2205 const char *description, 2206 const MeasureFormat &fmt, 2207 const Measure *measures, 2208 int32_t measureCount, 2209 const char *expected) { 2210 verifyFormatWithPrefix( 2211 description, 2212 fmt, 2213 "", 2214 measures, 2215 measureCount, 2216 expected); 2217 } 2218 2219 void MeasureFormatTest::verifyFormatWithPrefix( 2220 const char *description, 2221 const MeasureFormat &fmt, 2222 const UnicodeString &prefix, 2223 const Measure *measures, 2224 int32_t measureCount, 2225 const char *expected) { 2226 UnicodeString result(prefix); 2227 FieldPosition pos(FieldPosition::DONT_CARE); 2228 UErrorCode status = U_ZERO_ERROR; 2229 fmt.formatMeasures(measures, measureCount, result, pos, status); 2230 if (!assertSuccess("Error formatting", status)) { 2231 return; 2232 } 2233 assertEquals(description, ctou(expected), result); 2234 } 2235 2236 void MeasureFormatTest::verifyFormat( 2237 const char *description, 2238 const MeasureFormat &fmt, 2239 const ExpectedResult *expectedResults, 2240 int32_t count) { 2241 for (int32_t i = 0; i < count; ++i) { 2242 verifyFormat(description, fmt, expectedResults[i].measures, expectedResults[i].count, expectedResults[i].expected); 2243 } 2244 } 2245 2246 extern IntlTest *createMeasureFormatTest() { 2247 return new MeasureFormatTest(); 2248 } 2249 2250 #endif 2251 2252