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