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