Skip to content

Commit 4ea8af8

Browse files
committed
ICU-23088 convert CLDR unitIdComponents; fix superseded unit APIs, update MeasureUnitGeneratorTest
1 parent 22181ee commit 4ea8af8

File tree

11 files changed

+335
-129
lines changed

11 files changed

+335
-129
lines changed

icu4c/source/data/misc/units.txt

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,58 @@ units:table(nofallback){
812812
speed_of_light_meters_per_second{"299792458"}
813813
tsubo_to_m2{"400/121"}
814814
}
815+
unitIdComponents{
816+
and{"and"}
817+
per{"per"}
818+
power{
819+
"square",
820+
"cubic",
821+
"pow2",
822+
"pow3",
823+
"pow4",
824+
"pow5",
825+
"pow6",
826+
"pow7",
827+
"pow8",
828+
"pow9",
829+
"pow10",
830+
"pow11",
831+
"pow12",
832+
"pow13",
833+
"pow14",
834+
"pow15",
835+
}
836+
prefix{
837+
"arc",
838+
"british",
839+
"dessert",
840+
"fluid",
841+
"light",
842+
"nautical",
843+
"xxx",
844+
"x",
845+
"curr",
846+
}
847+
suffix{
848+
"force",
849+
"imperial",
850+
"luminosity",
851+
"mass",
852+
"metric",
853+
"person",
854+
"radius",
855+
"scandinavian",
856+
"troy",
857+
"unit",
858+
"it",
859+
"us",
860+
"energy",
861+
"density",
862+
"cloth",
863+
"length",
864+
"jp",
865+
}
866+
}
815867
unitPreferenceData{
816868
"area"{
817869
"default"{

icu4c/source/i18n/measunit.cpp

Lines changed: 48 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -41,27 +41,27 @@ static const int32_t gOffsets[] = {
4141
2,
4242
8,
4343
21,
44-
35,
45-
39,
46-
341,
47-
352,
48-
371,
49-
379,
50-
393,
51-
397,
52-
401,
53-
409,
54-
440,
55-
444,
56-
446,
44+
34,
45+
38,
46+
340,
47+
351,
48+
370,
49+
378,
50+
392,
51+
396,
52+
400,
53+
408,
54+
439,
55+
443,
56+
445,
57+
462,
5758
463,
58-
464,
59-
470,
60-
482,
61-
488,
62-
493,
63-
495,
64-
539
59+
469,
60+
481,
61+
487,
62+
492,
63+
494,
64+
538
6565
};
6666

6767
static const int32_t kCurrencyOffset = 5;
@@ -121,7 +121,6 @@ static const char * const gSubTypes[] = {
121121
"karat",
122122
"katal",
123123
"milligram-ofglucose-per-deciliter",
124-
"milligram-per-deciliter",
125124
"millimole-per-liter",
126125
"mole",
127126
"ofglucose",
@@ -842,91 +841,91 @@ MeasureUnit MeasureUnit::getMilligramOfglucosePerDeciliter() {
842841
}
843842

844843
MeasureUnit *MeasureUnit::createMilligramPerDeciliter(UErrorCode &status) {
845-
return MeasureUnit::create(3, 4, status);
844+
return MeasureUnit::create(3, 3, status);
846845
}
847846

848847
MeasureUnit MeasureUnit::getMilligramPerDeciliter() {
849-
return MeasureUnit(3, 4);
848+
return MeasureUnit(3, 3);
850849
}
851850

852851
MeasureUnit *MeasureUnit::createMillimolePerLiter(UErrorCode &status) {
853-
return MeasureUnit::create(3, 5, status);
852+
return MeasureUnit::create(3, 4, status);
854853
}
855854

856855
MeasureUnit MeasureUnit::getMillimolePerLiter() {
857-
return MeasureUnit(3, 5);
856+
return MeasureUnit(3, 4);
858857
}
859858

860859
MeasureUnit *MeasureUnit::createMole(UErrorCode &status) {
861-
return MeasureUnit::create(3, 6, status);
860+
return MeasureUnit::create(3, 5, status);
862861
}
863862

864863
MeasureUnit MeasureUnit::getMole() {
865-
return MeasureUnit(3, 6);
864+
return MeasureUnit(3, 5);
866865
}
867866

868867
MeasureUnit *MeasureUnit::createOfglucose(UErrorCode &status) {
869-
return MeasureUnit::create(3, 7, status);
868+
return MeasureUnit::create(3, 6, status);
870869
}
871870

872871
MeasureUnit MeasureUnit::getOfglucose() {
873-
return MeasureUnit(3, 7);
872+
return MeasureUnit(3, 6);
874873
}
875874

876875
MeasureUnit *MeasureUnit::createPart(UErrorCode &status) {
877-
return MeasureUnit::create(3, 8, status);
876+
return MeasureUnit::create(3, 7, status);
878877
}
879878

880879
MeasureUnit MeasureUnit::getPart() {
881-
return MeasureUnit(3, 8);
880+
return MeasureUnit(3, 7);
882881
}
883882

884883
MeasureUnit *MeasureUnit::createPartPer1E6(UErrorCode &status) {
885-
return MeasureUnit::create(3, 9, status);
884+
return MeasureUnit::create(3, 8, status);
886885
}
887886

888887
MeasureUnit MeasureUnit::getPartPer1E6() {
889-
return MeasureUnit(3, 9);
888+
return MeasureUnit(3, 8);
889+
}
890+
891+
MeasureUnit *MeasureUnit::createPartPerMillion(UErrorCode &status) {
892+
return MeasureUnit::create(3, 8, status);
893+
}
894+
895+
MeasureUnit MeasureUnit::getPartPerMillion() {
896+
return MeasureUnit(3, 8);
890897
}
891898

892899
MeasureUnit *MeasureUnit::createPartPer1E9(UErrorCode &status) {
893-
return MeasureUnit::create(3, 10, status);
900+
return MeasureUnit::create(3, 9, status);
894901
}
895902

896903
MeasureUnit MeasureUnit::getPartPer1E9() {
897-
return MeasureUnit(3, 10);
904+
return MeasureUnit(3, 9);
898905
}
899906

900907
MeasureUnit *MeasureUnit::createPercent(UErrorCode &status) {
901-
return MeasureUnit::create(3, 11, status);
908+
return MeasureUnit::create(3, 10, status);
902909
}
903910

904911
MeasureUnit MeasureUnit::getPercent() {
905-
return MeasureUnit(3, 11);
912+
return MeasureUnit(3, 10);
906913
}
907914

908915
MeasureUnit *MeasureUnit::createPermille(UErrorCode &status) {
909-
return MeasureUnit::create(3, 12, status);
916+
return MeasureUnit::create(3, 11, status);
910917
}
911918

912919
MeasureUnit MeasureUnit::getPermille() {
913-
return MeasureUnit(3, 12);
914-
}
915-
916-
MeasureUnit *MeasureUnit::createPartPerMillion(UErrorCode &status) {
917-
return MeasureUnit::create(3, 9, status);
918-
}
919-
920-
MeasureUnit MeasureUnit::getPartPerMillion() {
921-
return MeasureUnit(3, 9);
920+
return MeasureUnit(3, 11);
922921
}
923922

924923
MeasureUnit *MeasureUnit::createPermyriad(UErrorCode &status) {
925-
return MeasureUnit::create(3, 13, status);
924+
return MeasureUnit::create(3, 12, status);
926925
}
927926

928927
MeasureUnit MeasureUnit::getPermyriad() {
929-
return MeasureUnit(3, 13);
928+
return MeasureUnit(3, 12);
930929
}
931930

932931
MeasureUnit *MeasureUnit::createLiterPer100Kilometers(UErrorCode &status) {

icu4c/source/i18n/unicode/measunit.h

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1175,7 +1175,9 @@ class U_I18N_API MeasureUnit: public UObject {
11751175

11761176
/**
11771177
* Returns by pointer, unit of concentr: milligram-per-deciliter.
1178+
* (renamed to milligram-ofglucose-per-deciliter in CLDR 39 / ICU 69).
11781179
* Caller owns returned value and must free it.
1180+
* Also see {@link #createMilligramOfglucosePerDeciliter()}.
11791181
* Also see {@link #getMilligramPerDeciliter()}.
11801182
* @param status ICU error code.
11811183
* @stable ICU 57
@@ -1184,6 +1186,8 @@ class U_I18N_API MeasureUnit: public UObject {
11841186

11851187
/**
11861188
* Returns by value, unit of concentr: milligram-per-deciliter.
1189+
* (renamed to milligram-ofglucose-per-deciliter in CLDR 39 / ICU 69).
1190+
* Also see {@link #getMilligramOfglucosePerDeciliter()}.
11871191
* Also see {@link #createMilligramPerDeciliter()}.
11881192
* @stable ICU 64
11891193
*/
@@ -1275,6 +1279,26 @@ class U_I18N_API MeasureUnit: public UObject {
12751279
static MeasureUnit getPartPer1E6();
12761280
#endif /* U_HIDE_DRAFT_API */
12771281

1282+
/**
1283+
* Returns by pointer, unit of concentr: part-per-million.
1284+
* (renamed to part-per-1e6 in CLDR 48 / ICU 78).
1285+
* Caller owns returned value and must free it.
1286+
* Also see {@link #createPartPer1E6()}.
1287+
* Also see {@link #getPartPerMillion()}.
1288+
* @param status ICU error code.
1289+
* @stable ICU 57
1290+
*/
1291+
static MeasureUnit *createPartPerMillion(UErrorCode &status);
1292+
1293+
/**
1294+
* Returns by value, unit of concentr: part-per-million.
1295+
* (renamed to part-per-1e6 in CLDR 48 / ICU 78).
1296+
* Also see {@link #getPartPer1E6()}.
1297+
* Also see {@link #createPartPerMillion()}.
1298+
* @stable ICU 64
1299+
*/
1300+
static MeasureUnit getPartPerMillion();
1301+
12781302
#ifndef U_HIDE_DRAFT_API
12791303
/**
12801304
* Returns by pointer, unit of concentr: part-per-1e9.
@@ -1325,26 +1349,6 @@ class U_I18N_API MeasureUnit: public UObject {
13251349
*/
13261350
static MeasureUnit getPermille();
13271351

1328-
/**
1329-
* Returns by pointer, unit of concentr: permillion.
1330-
* (renamed to part-per-1e6 in CLDR 48 / ICU 78).
1331-
* Caller owns returned value and must free it.
1332-
* Also see {@link #createPartPer1E6()}.
1333-
* Also see {@link #getPartPerMillion()}.
1334-
* @param status ICU error code.
1335-
* @stable ICU 57
1336-
*/
1337-
static MeasureUnit *createPartPerMillion(UErrorCode &status);
1338-
1339-
/**
1340-
* Returns by value, unit of concentr: permillion.
1341-
* (renamed to part-per-1e6 in CLDR 48 / ICU 78).
1342-
* Also see {@link #getPartPer1E6()}.
1343-
* Also see {@link #createPartPerMillion()}.
1344-
* @stable ICU 64
1345-
*/
1346-
static MeasureUnit getPartPerMillion();
1347-
13481352
/**
13491353
* Returns by pointer, unit of concentr: permyriad.
13501354
* Caller owns returned value and must free it.

icu4c/source/test/intltest/measfmttest.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4683,8 +4683,8 @@ void MeasureFormatTest::TestCompatible78() {
46834683
measureUnitValue = MeasureUnit::getKatal();
46844684
measureUnit.adoptInstead(MeasureUnit::createMilligramOfglucosePerDeciliter(status));
46854685
measureUnitValue = MeasureUnit::getMilligramOfglucosePerDeciliter();
4686-
measureUnit.adoptInstead(MeasureUnit::createMilligramPerDeciliter(status));
4687-
measureUnitValue = MeasureUnit::getMilligramPerDeciliter();
4686+
measureUnit.adoptInstead(MeasureUnit::createMilligramPerDeciliter(status)); // backward compatibility API
4687+
measureUnitValue = MeasureUnit::getMilligramPerDeciliter(); // backward compatibility API
46884688
measureUnit.adoptInstead(MeasureUnit::createMillimolePerLiter(status));
46894689
measureUnitValue = MeasureUnit::getMillimolePerLiter();
46904690
measureUnit.adoptInstead(MeasureUnit::createMole(status));
@@ -4695,14 +4695,14 @@ void MeasureFormatTest::TestCompatible78() {
46954695
measureUnitValue = MeasureUnit::getPart();
46964696
measureUnit.adoptInstead(MeasureUnit::createPartPer1E6(status));
46974697
measureUnitValue = MeasureUnit::getPartPer1E6();
4698+
measureUnit.adoptInstead(MeasureUnit::createPartPerMillion(status)); // backward compatibility API
4699+
measureUnitValue = MeasureUnit::getPartPerMillion(); // backward compatibility API
46984700
measureUnit.adoptInstead(MeasureUnit::createPartPer1E9(status));
46994701
measureUnitValue = MeasureUnit::getPartPer1E9();
47004702
measureUnit.adoptInstead(MeasureUnit::createPercent(status));
47014703
measureUnitValue = MeasureUnit::getPercent();
47024704
measureUnit.adoptInstead(MeasureUnit::createPermille(status));
47034705
measureUnitValue = MeasureUnit::getPermille();
4704-
measureUnit.adoptInstead(MeasureUnit::createPartPerMillion(status));
4705-
measureUnitValue = MeasureUnit::getPartPerMillion();
47064706
measureUnit.adoptInstead(MeasureUnit::createPermyriad(status));
47074707
measureUnitValue = MeasureUnit::getPermyriad();
47084708
measureUnit.adoptInstead(MeasureUnit::createLiterPer100Kilometers(status));
@@ -4957,6 +4957,8 @@ void MeasureFormatTest::TestCompatible78() {
49574957
measureUnitValue = MeasureUnit::getTon();
49584958
measureUnit.adoptInstead(MeasureUnit::createTonne(status));
49594959
measureUnitValue = MeasureUnit::getTonne();
4960+
measureUnit.adoptInstead(MeasureUnit::createMetricTon(status)); // backward compatibility API
4961+
measureUnitValue = MeasureUnit::getMetricTon(); // backward compatibility API
49604962
measureUnit.adoptInstead(MeasureUnit::createGigawatt(status));
49614963
measureUnitValue = MeasureUnit::getGigawatt();
49624964
measureUnit.adoptInstead(MeasureUnit::createHorsepower(status));
@@ -6727,7 +6729,6 @@ void MeasureFormatTest::TestParseToBuiltIn() {
67276729
{"centimeter-centimeter", MeasureUnit::getSquareCentimeter()},
67286730
{"square-foot", MeasureUnit::getSquareFoot()},
67296731
{"pow2-inch", MeasureUnit::getSquareInch()},
6730-
{"milligram-per-deciliter", MeasureUnit::getMilligramPerDeciliter()},
67316732
{"pound-force-per-pow2-inch", MeasureUnit::getPoundPerSquareInch()},
67326733
{"yard-pow2-yard", MeasureUnit::getCubicYard()},
67336734
{"square-yard-yard", MeasureUnit::getCubicYard()},

icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/MeasureUnitCompatibilityTest.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2986,13 +2986,13 @@ public void TestCompatible78() {
29862986
MeasureUnit.KARAT,
29872987
MeasureUnit.KATAL,
29882988
MeasureUnit.MILLIGRAM_OFGLUCOSE_PER_DECILITER,
2989-
MeasureUnit.MILLIGRAM_PER_DECILITER,
2989+
MeasureUnit.MILLIGRAM_PER_DECILITER, // backward compatibility API
29902990
MeasureUnit.MILLIMOLE_PER_LITER,
29912991
MeasureUnit.MOLE,
29922992
MeasureUnit.OFGLUCOSE,
29932993
MeasureUnit.PART,
29942994
MeasureUnit.PART_PER_1E6,
2995-
MeasureUnit.PART_PER_MILLION,
2995+
MeasureUnit.PART_PER_MILLION, // backward compatibility API
29962996
MeasureUnit.PART_PER_1E9,
29972997
MeasureUnit.PERCENT,
29982998
MeasureUnit.PERMILLE,
@@ -3123,6 +3123,7 @@ public void TestCompatible78() {
31233123
MeasureUnit.STONE,
31243124
MeasureUnit.TON,
31253125
MeasureUnit.TONNE,
3126+
MeasureUnit.METRIC_TON, // backward compatibility API
31263127
MeasureUnit.GIGAWATT,
31273128
MeasureUnit.HORSEPOWER,
31283129
MeasureUnit.KILOWATT,
@@ -3199,7 +3200,7 @@ public void TestCompatible78() {
31993200
MeasureUnit.TEASPOON,
32003201
MeasureUnit.TO_JP,
32013202
};
3202-
assertEquals("", 237, units.length);
3203+
assertEquals("", 238, units.length);
32033204
}
32043205

32053206
/*

0 commit comments

Comments
 (0)