169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin/* GENERATED SOURCE. DO NOT MODIFY. */
2f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// © 2016 and later: Unicode, Inc. and others.
3f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License
469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin/*
569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin *******************************************************************************
61c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert * Copyright (C) 2013-2016, International Business Machines Corporation and
769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin * others. All Rights Reserved.
869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin *******************************************************************************
969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin */
1069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinpackage android.icu.dev.test.format;
1169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
1269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.io.ByteArrayInputStream;
1369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.io.ByteArrayOutputStream;
1469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.io.IOException;
1569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.io.ObjectInputStream;
1669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.io.ObjectOutputStream;
1769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.io.Serializable;
18f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubertimport java.lang.reflect.Field;
1969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.text.FieldPosition;
2069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.util.ArrayList;
2169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.util.Collections;
2269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.util.Comparator;
2369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.util.HashMap;
2469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.util.HashSet;
2569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.util.List;
2669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.util.Locale;
2769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.util.Map;
281c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubertimport java.util.Set;
2969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport java.util.TreeMap;
3069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
31f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubertimport org.junit.Test;
32f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
3369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport android.icu.dev.test.TestFmwk;
34f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubertimport android.icu.dev.test.serializable.SerializableTestUtility;
3569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport android.icu.impl.Pair;
3669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport android.icu.impl.Utility;
3769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport android.icu.math.BigDecimal;
3869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport android.icu.text.MeasureFormat;
3969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport android.icu.text.MeasureFormat.FormatWidth;
4069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport android.icu.text.NumberFormat;
4169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport android.icu.util.Currency;
4269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport android.icu.util.Measure;
4369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport android.icu.util.MeasureUnit;
4469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport android.icu.util.TimeUnit;
4569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport android.icu.util.TimeUnitAmount;
4669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinimport android.icu.util.ULocale;
4769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
4869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin/**
4969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin * See https://sites.google.com/site/icusite/processes/release/tasks/standards?pli=1
5069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin * for information on how to update with each new release.
5169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin * @author markdavis
5269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin */
5369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffinpublic class MeasureUnitTest extends TestFmwk {
541c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
5569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    static class OrderedPair<F extends Comparable, S extends Comparable> extends Pair<F, S> implements Comparable<OrderedPair<F, S>> {
5669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
5769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        OrderedPair(F first, S second) {
5869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            super(first, second);
5969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
601c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
6169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        public static <F extends Comparable, S extends Comparable> OrderedPair<F, S> of(F first, S second) {
6269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            if (first == null || second == null) {
6369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                throw new IllegalArgumentException("OrderedPair.of requires non null values.");
6469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
651c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            return new OrderedPair<F, S>(first, second);
6669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
6769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
68f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        @Override
6969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        public int compareTo(OrderedPair<F, S> other) {
7069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            int result = first.compareTo(other.first);
7169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            if (result != 0) {
7269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                return result;
7369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
7469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            return second.compareTo(other.second);
7569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
7669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
771c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
78f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    private static final String[] DRAFT_VERSIONS = {"57", "58"};
791c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
8069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private static final HashSet<String> DRAFT_VERSION_SET = new HashSet<String>();
811c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
8269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private static final HashSet<String> TIME_CODES = new HashSet<String>();
831c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
8469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private static final String[][] JAVA_VERSIONS = {
8569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"G_FORCE", "53"},
8669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"DEGREE", "53"},
8769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"ARC_MINUTE", "53"},
8869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"ARC_SECOND", "53"},
8969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"ACRE", "53"},
9069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"HECTARE", "53"},
9169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"SQUARE_FOOT", "53"},
9269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"SQUARE_KILOMETER", "53"},
9369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"SQUARE_METER", "53"},
9469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"SQUARE_MILE", "53"},
9569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MILLISECOND", "53"},
9669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"CENTIMETER", "53"},
9769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"FOOT", "53"},
9869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"INCH", "53"},
9969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"KILOMETER", "53"},
10069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"LIGHT_YEAR", "53"},
10169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"METER", "53"},
10269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MILE", "53"},
10369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MILLIMETER", "53"},
10469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"PICOMETER", "53"},
10569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"YARD", "53"},
10669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"GRAM", "53"},
10769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"KILOGRAM", "53"},
10869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"OUNCE", "53"},
10969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"POUND", "53"},
11069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"HORSEPOWER", "53"},
11169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"KILOWATT", "53"},
11269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"WATT", "53"},
11369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"HECTOPASCAL", "53"},
11469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"INCH_HG", "53"},
11569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MILLIBAR", "53"},
11669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"KILOMETER_PER_HOUR", "53"},
11769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"METER_PER_SECOND", "53"},
11869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MILE_PER_HOUR", "53"},
11969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"CELSIUS", "53"},
12069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"FAHRENHEIT", "53"},
12169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"CUBIC_KILOMETER", "53"},
12269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"CUBIC_MILE", "53"},
12369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"LITER", "53"},
12469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"YEAR", "53"},
12569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MONTH", "53"},
12669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"WEEK", "53"},
12769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"DAY", "53"},
12869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"HOUR", "53"},
12969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MINUTE", "53"},
13069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"SECOND", "53"},
13169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"METER_PER_SECOND_SQUARED", "54"},
13269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"RADIAN", "54"},
13369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"SQUARE_CENTIMETER", "54"},
13469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"SQUARE_INCH", "54"},
13569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"SQUARE_YARD", "54"},
13669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"LITER_PER_KILOMETER", "54"},
13769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MILE_PER_GALLON", "54"},
13869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"BIT", "54"},
13969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"BYTE", "54"},
14069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"GIGABIT", "54"},
14169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"GIGABYTE", "54"},
14269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"KILOBIT", "54"},
14369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"KILOBYTE", "54"},
14469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MEGABIT", "54"},
14569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MEGABYTE", "54"},
14669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"TERABIT", "54"},
14769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"TERABYTE", "54"},
14869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MICROSECOND", "54"},
14969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"NANOSECOND", "54"},
15069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"AMPERE", "54"},
15169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MILLIAMPERE", "54"},
15269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"OHM", "54"},
15369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"VOLT", "54"},
15469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"CALORIE", "54"},
15569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"FOODCALORIE", "54"},
15669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"JOULE", "54"},
15769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"KILOCALORIE", "54"},
15869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"KILOJOULE", "54"},
15969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"KILOWATT_HOUR", "54"},
16069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"GIGAHERTZ", "54"},
16169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"HERTZ", "54"},
16269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"KILOHERTZ", "54"},
16369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MEGAHERTZ", "54"},
16469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"ASTRONOMICAL_UNIT", "54"},
16569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"DECIMETER", "54"},
16669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"FATHOM", "54"},
16769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"FURLONG", "54"},
16869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MICROMETER", "54"},
16969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"NANOMETER", "54"},
17069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"NAUTICAL_MILE", "54"},
17169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"PARSEC", "54"},
17269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"LUX", "54"},
17369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"CARAT", "54"},
17469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"METRIC_TON", "54"},
17569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MICROGRAM", "54"},
17669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MILLIGRAM", "54"},
17769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"OUNCE_TROY", "54"},
17869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"STONE", "54"},
17969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"TON", "54"},
18069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"GIGAWATT", "54"},
18169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MEGAWATT", "54"},
18269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MILLIWATT", "54"},
18369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MILLIMETER_OF_MERCURY", "54"},
18469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"POUND_PER_SQUARE_INCH", "54"},
18569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"KARAT", "54"},
18669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"KELVIN", "54"},
18769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"ACRE_FOOT", "54"},
18869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"BUSHEL", "54"},
18969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"CENTILITER", "54"},
19069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"CUBIC_CENTIMETER", "54"},
19169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"CUBIC_FOOT", "54"},
19269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"CUBIC_INCH", "54"},
19369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"CUBIC_METER", "54"},
19469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"CUBIC_YARD", "54"},
19569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"CUP", "54"},
19669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"DECILITER", "54"},
19769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"FLUID_OUNCE", "54"},
19869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"GALLON", "54"},
19969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"HECTOLITER", "54"},
20069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MEGALITER", "54"},
20169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MILLILITER", "54"},
20269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"PINT", "54"},
20369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"QUART", "54"},
20469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"TABLESPOON", "54"},
20569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"TEASPOON", "54"},
20669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"GENERIC_TEMPERATURE", "56"},
20769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"REVOLUTION_ANGLE", "56"},
20869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"LITER_PER_100KILOMETERS", "56"},
20969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"CENTURY", "56"},
21069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"MILE_SCANDINAVIAN", "56"},
21169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"KNOT", "56"},
21269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"CUP_METRIC", "56"},
21369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {"PINT_METRIC", "56"},
2141c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        {"MILLIGRAM_PER_DECILITER", "57"},
2151c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        {"MILLIMOLE_PER_LITER", "57"},
2161c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        {"PART_PER_MILLION", "57"},
2171c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        {"MILE_PER_GALLON_IMPERIAL", "57"},
2181c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        {"GALLON_IMPERIAL", "57"},
219f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        {"EAST", "58"},
220f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        {"NORTH", "58"},
221f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        {"SOUTH", "58"},
222f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        {"WEST", "58"},
22369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    };
2241c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
22569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private static final HashMap<String, String> JAVA_VERSION_MAP = new HashMap<String, String>();
2261c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
22769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    static {
22869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TIME_CODES.add("year");
22969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TIME_CODES.add("month");
23069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TIME_CODES.add("week");
23169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TIME_CODES.add("day");
23269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TIME_CODES.add("hour");
23369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TIME_CODES.add("minute");
23469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TIME_CODES.add("second");
23569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (String verNum : DRAFT_VERSIONS) {
23669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            DRAFT_VERSION_SET.add(verNum);
23769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
23869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (String[] funcNameAndVersion : JAVA_VERSIONS) {
23969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            JAVA_VERSION_MAP.put(funcNameAndVersion[0], funcNameAndVersion[1]);
24069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
24169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
2421c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
24369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    /**
24469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin     * @author markdavis
24569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin     *
24669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin     */
247f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    // TODO(junit): resolve
248f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//    public static void main(String[] args) {
249f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//        //generateConstants(); if (true) return;
250f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//
251f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//        // Ticket #12034 deadlock on multi-threaded static init of MeasureUnit.
252f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//        // The code below reliably deadlocks with ICU 56.
253f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//        // The test is here in main() rather than in a test function so it can be made to run
254f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//        // before anything else.
255f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//        Thread thread = new Thread()  {
256f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//            @Override
257f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//            public void run() {
258f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//                @SuppressWarnings("unused")
259f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//                Set<String> measureUnitTypes = MeasureUnit.getAvailableTypes();
260f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//            }
261f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//        };
262f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//        thread.start();
263f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//        @SuppressWarnings("unused")
264f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//        Currency cur = Currency.getInstance(ULocale.ENGLISH);
265f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//        try {thread.join();} catch(InterruptedException e) {};
266f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//        // System.out.println("Done with MeasureUnit thread test.");
267f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//
268f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//        new MeasureUnitTest().run(args);
269f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert//    }
2701c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
271f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert/*
272f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
273f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    public void testZZZ() {
274f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        // various generateXXX calls go here, see
275f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        // http://site.icu-project.org/design/formatting/measureformat/updating-measure-unit
276f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        // use this test to run each of the ollowing in succession
277f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        //generateConstants("58"); // for MeasureUnit.java, update generated MeasureUnit constants
278f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        //generateBackwardCompatibilityTest("58.1"); // for MeasureUnitTest.java, create TestCompatible58_1
279f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        //generateCXXHConstants("58"); // for measunit.h, update generated createXXX methods
280f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        //generateCXXConstants(); // for measunit.cpp, update generated code
281f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        //generateCXXBackwardCompatibilityTest("58.1"); // for measfmttest.cpp, create TestCompatible58_1
282f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        updateJAVAVersions("58"); // for MeasureUnitTest.java, JAVA_VERSIONS
28369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
284f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert*/
2851c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
286f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
28769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void TestCompatible53_1() {
28869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureUnit[] units = {
28969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.G_FORCE,
29069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.DEGREE,
29169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.ARC_MINUTE,
29269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.ARC_SECOND,
29369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.ACRE,
29469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HECTARE,
29569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_FOOT,
29669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_KILOMETER,
29769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_METER,
29869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_MILE,
29969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLISECOND,
30069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CENTIMETER,
30169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.FOOT,
30269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.INCH,
30369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOMETER,
30469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.LIGHT_YEAR,
30569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.METER,
30669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILE,
30769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLIMETER,
30869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.PICOMETER,
30969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.YARD,
31069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.GRAM,
31169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOGRAM,
31269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.OUNCE,
31369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.POUND,
31469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HORSEPOWER,
31569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOWATT,
31669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.WATT,
31769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HECTOPASCAL,
31869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.INCH_HG,
31969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLIBAR,
32069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOMETER_PER_HOUR,
32169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.METER_PER_SECOND,
32269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILE_PER_HOUR,
32369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CELSIUS,
32469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.FAHRENHEIT,
32569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_KILOMETER,
32669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_MILE,
32769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.LITER,
32869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.YEAR,
32969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MONTH,
33069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.WEEK,
33169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.DAY,
33269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HOUR,
33369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MINUTE,
33469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SECOND,
33569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        };
33669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("", 46, units.length);
33769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
3381c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
339f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
34069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void TestCompatible54_1() {
34169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureUnit[] units = {
34269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.G_FORCE,
34369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.METER_PER_SECOND_SQUARED,
34469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.ARC_MINUTE,
34569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.ARC_SECOND,
34669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.DEGREE,
34769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.RADIAN,
34869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.ACRE,
34969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HECTARE,
35069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_CENTIMETER,
35169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_FOOT,
35269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_INCH,
35369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_KILOMETER,
35469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_METER,
35569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_MILE,
35669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_YARD,
35769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.LITER_PER_KILOMETER,
35869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILE_PER_GALLON,
35969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.BIT,
36069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.BYTE,
36169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.GIGABIT,
36269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.GIGABYTE,
36369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOBIT,
36469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOBYTE,
36569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MEGABIT,
36669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MEGABYTE,
36769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.TERABIT,
36869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.TERABYTE,
36969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.DAY,
37069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HOUR,
37169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MICROSECOND,
37269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLISECOND,
37369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MINUTE,
37469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MONTH,
37569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.NANOSECOND,
37669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SECOND,
37769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.WEEK,
37869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.YEAR,
37969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.AMPERE,
38069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLIAMPERE,
38169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.OHM,
38269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.VOLT,
38369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CALORIE,
38469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.FOODCALORIE,
38569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.JOULE,
38669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOCALORIE,
38769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOJOULE,
38869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOWATT_HOUR,
38969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.GIGAHERTZ,
39069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HERTZ,
39169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOHERTZ,
39269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MEGAHERTZ,
39369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.ASTRONOMICAL_UNIT,
39469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CENTIMETER,
39569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.DECIMETER,
39669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.FATHOM,
39769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.FOOT,
39869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.FURLONG,
39969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.INCH,
40069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOMETER,
40169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.LIGHT_YEAR,
40269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.METER,
40369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MICROMETER,
40469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILE,
40569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLIMETER,
40669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.NANOMETER,
40769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.NAUTICAL_MILE,
40869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.PARSEC,
40969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.PICOMETER,
41069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.YARD,
41169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.LUX,
41269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CARAT,
41369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.GRAM,
41469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOGRAM,
41569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.METRIC_TON,
41669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MICROGRAM,
41769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLIGRAM,
41869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.OUNCE,
41969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.OUNCE_TROY,
42069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.POUND,
42169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.STONE,
42269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.TON,
42369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.GIGAWATT,
42469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HORSEPOWER,
42569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOWATT,
42669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MEGAWATT,
42769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLIWATT,
42869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.WATT,
42969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HECTOPASCAL,
43069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.INCH_HG,
43169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLIBAR,
43269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLIMETER_OF_MERCURY,
43369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.POUND_PER_SQUARE_INCH,
43469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KARAT,
43569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOMETER_PER_HOUR,
43669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.METER_PER_SECOND,
43769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILE_PER_HOUR,
43869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CELSIUS,
43969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.FAHRENHEIT,
44069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KELVIN,
44169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.ACRE_FOOT,
44269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.BUSHEL,
44369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CENTILITER,
44469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_CENTIMETER,
44569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_FOOT,
44669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_INCH,
44769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_KILOMETER,
44869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_METER,
44969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_MILE,
45069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_YARD,
45169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUP,
45269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.DECILITER,
45369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.FLUID_OUNCE,
45469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.GALLON,
45569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HECTOLITER,
45669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.LITER,
45769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MEGALITER,
45869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLILITER,
45969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.PINT,
46069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.QUART,
46169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.TABLESPOON,
46269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.TEASPOON,
46369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        };
46469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("",  121, units.length);
46569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
4661c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
467f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
46869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void TestCompatible55_1() {
46969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureUnit[] units = {
47069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.G_FORCE,
47169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.METER_PER_SECOND_SQUARED,
47269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.ARC_MINUTE,
47369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.ARC_SECOND,
47469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.DEGREE,
47569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.RADIAN,
47669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.ACRE,
47769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HECTARE,
47869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_CENTIMETER,
47969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_FOOT,
48069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_INCH,
48169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_KILOMETER,
48269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_METER,
48369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_MILE,
48469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_YARD,
48569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.LITER_PER_KILOMETER,
48669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILE_PER_GALLON,
48769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.BIT,
48869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.BYTE,
48969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.GIGABIT,
49069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.GIGABYTE,
49169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOBIT,
49269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOBYTE,
49369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MEGABIT,
49469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MEGABYTE,
49569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.TERABIT,
49669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.TERABYTE,
49769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.DAY,
49869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HOUR,
49969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MICROSECOND,
50069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLISECOND,
50169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MINUTE,
50269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MONTH,
50369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.NANOSECOND,
50469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SECOND,
50569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.WEEK,
50669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.YEAR,
50769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.AMPERE,
50869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLIAMPERE,
50969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.OHM,
51069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.VOLT,
51169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CALORIE,
51269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.FOODCALORIE,
51369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.JOULE,
51469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOCALORIE,
51569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOJOULE,
51669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOWATT_HOUR,
51769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.GIGAHERTZ,
51869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HERTZ,
51969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOHERTZ,
52069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MEGAHERTZ,
52169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.ASTRONOMICAL_UNIT,
52269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CENTIMETER,
52369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.DECIMETER,
52469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.FATHOM,
52569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.FOOT,
52669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.FURLONG,
52769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.INCH,
52869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOMETER,
52969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.LIGHT_YEAR,
53069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.METER,
53169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MICROMETER,
53269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILE,
53369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLIMETER,
53469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.NANOMETER,
53569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.NAUTICAL_MILE,
53669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.PARSEC,
53769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.PICOMETER,
53869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.YARD,
53969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.LUX,
54069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CARAT,
54169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.GRAM,
54269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOGRAM,
54369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.METRIC_TON,
54469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MICROGRAM,
54569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLIGRAM,
54669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.OUNCE,
54769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.OUNCE_TROY,
54869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.POUND,
54969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.STONE,
55069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.TON,
55169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.GIGAWATT,
55269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HORSEPOWER,
55369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOWATT,
55469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MEGAWATT,
55569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLIWATT,
55669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.WATT,
55769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HECTOPASCAL,
55869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.INCH_HG,
55969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLIBAR,
56069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLIMETER_OF_MERCURY,
56169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.POUND_PER_SQUARE_INCH,
56269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KARAT,
56369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOMETER_PER_HOUR,
56469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.METER_PER_SECOND,
56569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILE_PER_HOUR,
56669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CELSIUS,
56769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.FAHRENHEIT,
56869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.GENERIC_TEMPERATURE,
56969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KELVIN,
57069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.ACRE_FOOT,
57169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.BUSHEL,
57269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CENTILITER,
57369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_CENTIMETER,
57469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_FOOT,
57569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_INCH,
57669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_KILOMETER,
57769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_METER,
57869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_MILE,
57969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_YARD,
58069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUP,
58169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.DECILITER,
58269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.FLUID_OUNCE,
58369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.GALLON,
58469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HECTOLITER,
58569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.LITER,
58669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MEGALITER,
58769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLILITER,
58869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.PINT,
58969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.QUART,
59069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.TABLESPOON,
59169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.TEASPOON,
59269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        };
59369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("",  122, units.length);
59469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
59569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
596f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
59769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void TestCompatible56_1() {
59869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureUnit[] units = {
59969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.G_FORCE,
60069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.METER_PER_SECOND_SQUARED,
60169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.ARC_MINUTE,
60269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.ARC_SECOND,
60369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.DEGREE,
60469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.RADIAN,
60569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.REVOLUTION_ANGLE,
60669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.ACRE,
60769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HECTARE,
60869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_CENTIMETER,
60969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_FOOT,
61069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_INCH,
61169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_KILOMETER,
61269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_METER,
61369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_MILE,
61469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SQUARE_YARD,
61569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.LITER_PER_100KILOMETERS,
61669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.LITER_PER_KILOMETER,
61769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILE_PER_GALLON,
61869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.BIT,
61969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.BYTE,
62069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.GIGABIT,
62169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.GIGABYTE,
62269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOBIT,
62369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOBYTE,
62469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MEGABIT,
62569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MEGABYTE,
62669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.TERABIT,
62769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.TERABYTE,
62869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CENTURY,
62969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.DAY,
63069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HOUR,
63169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MICROSECOND,
63269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLISECOND,
63369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MINUTE,
63469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MONTH,
63569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.NANOSECOND,
63669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SECOND,
63769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.WEEK,
63869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.YEAR,
63969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.AMPERE,
64069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLIAMPERE,
64169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.OHM,
64269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.VOLT,
64369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CALORIE,
64469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.FOODCALORIE,
64569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.JOULE,
64669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOCALORIE,
64769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOJOULE,
64869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOWATT_HOUR,
64969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.GIGAHERTZ,
65069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HERTZ,
65169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOHERTZ,
65269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MEGAHERTZ,
65369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.ASTRONOMICAL_UNIT,
65469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CENTIMETER,
65569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.DECIMETER,
65669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.FATHOM,
65769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.FOOT,
65869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.FURLONG,
65969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.INCH,
66069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOMETER,
66169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.LIGHT_YEAR,
66269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.METER,
66369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MICROMETER,
66469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILE,
66569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILE_SCANDINAVIAN,
66669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLIMETER,
66769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.NANOMETER,
66869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.NAUTICAL_MILE,
66969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.PARSEC,
67069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.PICOMETER,
67169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.YARD,
67269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.LUX,
67369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CARAT,
67469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.GRAM,
67569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOGRAM,
67669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.METRIC_TON,
67769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MICROGRAM,
67869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLIGRAM,
67969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.OUNCE,
68069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.OUNCE_TROY,
68169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.POUND,
68269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.STONE,
68369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.TON,
68469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.GIGAWATT,
68569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HORSEPOWER,
68669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOWATT,
68769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MEGAWATT,
68869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLIWATT,
68969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.WATT,
69069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HECTOPASCAL,
69169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.INCH_HG,
69269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLIBAR,
69369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLIMETER_OF_MERCURY,
69469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.POUND_PER_SQUARE_INCH,
69569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KARAT,
69669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KILOMETER_PER_HOUR,
69769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KNOT,
69869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.METER_PER_SECOND,
69969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILE_PER_HOUR,
70069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CELSIUS,
70169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.FAHRENHEIT,
70269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.GENERIC_TEMPERATURE,
70369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.KELVIN,
70469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.ACRE_FOOT,
70569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.BUSHEL,
70669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CENTILITER,
70769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_CENTIMETER,
70869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_FOOT,
70969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_INCH,
71069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_KILOMETER,
71169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_METER,
71269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_MILE,
71369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUBIC_YARD,
71469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUP,
71569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.CUP_METRIC,
71669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.DECILITER,
71769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.FLUID_OUNCE,
71869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.GALLON,
71969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HECTOLITER,
72069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.LITER,
72169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MEGALITER,
72269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MILLILITER,
72369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.PINT,
72469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.PINT_METRIC,
72569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.QUART,
72669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.TABLESPOON,
72769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.TEASPOON,
72869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        };
72969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("",  129, units.length);
73069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
73169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
732f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
7331c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert    public void TestCompatible57_1() {
7341c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        MeasureUnit[] units = {
7351c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.G_FORCE,
7361c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.METER_PER_SECOND_SQUARED,
7371c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.ARC_MINUTE,
7381c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.ARC_SECOND,
7391c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.DEGREE,
7401c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.RADIAN,
7411c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.REVOLUTION_ANGLE,
7421c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.ACRE,
7431c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.HECTARE,
7441c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.SQUARE_CENTIMETER,
7451c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.SQUARE_FOOT,
7461c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.SQUARE_INCH,
7471c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.SQUARE_KILOMETER,
7481c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.SQUARE_METER,
7491c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.SQUARE_MILE,
7501c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.SQUARE_YARD,
7511c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.KARAT,
7521c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MILLIGRAM_PER_DECILITER,
7531c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MILLIMOLE_PER_LITER,
7541c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.PART_PER_MILLION,
7551c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.LITER_PER_100KILOMETERS,
7561c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.LITER_PER_KILOMETER,
7571c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MILE_PER_GALLON,
7581c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MILE_PER_GALLON_IMPERIAL,
7591c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.BIT,
7601c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.BYTE,
7611c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.GIGABIT,
7621c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.GIGABYTE,
7631c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.KILOBIT,
7641c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.KILOBYTE,
7651c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MEGABIT,
7661c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MEGABYTE,
7671c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.TERABIT,
7681c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.TERABYTE,
7691c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.CENTURY,
7701c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.DAY,
7711c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.HOUR,
7721c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MICROSECOND,
7731c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MILLISECOND,
7741c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MINUTE,
7751c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MONTH,
7761c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.NANOSECOND,
7771c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.SECOND,
7781c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.WEEK,
7791c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.YEAR,
7801c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.AMPERE,
7811c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MILLIAMPERE,
7821c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.OHM,
7831c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.VOLT,
7841c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.CALORIE,
7851c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.FOODCALORIE,
7861c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.JOULE,
7871c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.KILOCALORIE,
7881c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.KILOJOULE,
7891c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.KILOWATT_HOUR,
7901c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.GIGAHERTZ,
7911c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.HERTZ,
7921c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.KILOHERTZ,
7931c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MEGAHERTZ,
7941c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.ASTRONOMICAL_UNIT,
7951c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.CENTIMETER,
7961c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.DECIMETER,
7971c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.FATHOM,
7981c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.FOOT,
7991c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.FURLONG,
8001c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.INCH,
8011c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.KILOMETER,
8021c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.LIGHT_YEAR,
8031c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.METER,
8041c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MICROMETER,
8051c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MILE,
8061c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MILE_SCANDINAVIAN,
8071c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MILLIMETER,
8081c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.NANOMETER,
8091c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.NAUTICAL_MILE,
8101c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.PARSEC,
8111c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.PICOMETER,
8121c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.YARD,
8131c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.LUX,
8141c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.CARAT,
8151c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.GRAM,
8161c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.KILOGRAM,
8171c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.METRIC_TON,
8181c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MICROGRAM,
8191c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MILLIGRAM,
8201c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.OUNCE,
8211c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.OUNCE_TROY,
8221c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.POUND,
8231c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.STONE,
8241c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.TON,
8251c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.GIGAWATT,
8261c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.HORSEPOWER,
8271c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.KILOWATT,
8281c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MEGAWATT,
8291c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MILLIWATT,
8301c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.WATT,
8311c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.HECTOPASCAL,
8321c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.INCH_HG,
8331c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MILLIBAR,
8341c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MILLIMETER_OF_MERCURY,
8351c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.POUND_PER_SQUARE_INCH,
8361c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.KILOMETER_PER_HOUR,
8371c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.KNOT,
8381c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.METER_PER_SECOND,
8391c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MILE_PER_HOUR,
8401c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.CELSIUS,
8411c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.FAHRENHEIT,
8421c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.GENERIC_TEMPERATURE,
8431c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.KELVIN,
8441c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.ACRE_FOOT,
8451c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.BUSHEL,
8461c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.CENTILITER,
8471c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.CUBIC_CENTIMETER,
8481c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.CUBIC_FOOT,
8491c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.CUBIC_INCH,
8501c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.CUBIC_KILOMETER,
8511c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.CUBIC_METER,
8521c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.CUBIC_MILE,
8531c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.CUBIC_YARD,
8541c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.CUP,
8551c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.CUP_METRIC,
8561c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.DECILITER,
8571c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.FLUID_OUNCE,
8581c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.GALLON,
8591c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.GALLON_IMPERIAL,
8601c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.HECTOLITER,
8611c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.LITER,
8621c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MEGALITER,
8631c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.MILLILITER,
8641c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.PINT,
8651c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.PINT_METRIC,
8661c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.QUART,
8671c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.TABLESPOON,
8681c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                MeasureUnit.TEASPOON,
8691c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        };
8701c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        assertEquals("",  134, units.length);
8711c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert    }
8721c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
873f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
874f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    public void TestCompatible58_1() {
875f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        MeasureUnit[] units = {
876f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.G_FORCE,
877f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.METER_PER_SECOND_SQUARED,
878f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.ARC_MINUTE,
879f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.ARC_SECOND,
880f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.DEGREE,
881f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.RADIAN,
882f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.REVOLUTION_ANGLE,
883f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.ACRE,
884f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.HECTARE,
885f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.SQUARE_CENTIMETER,
886f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.SQUARE_FOOT,
887f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.SQUARE_INCH,
888f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.SQUARE_KILOMETER,
889f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.SQUARE_METER,
890f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.SQUARE_MILE,
891f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.SQUARE_YARD,
892f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.KARAT,
893f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MILLIGRAM_PER_DECILITER,
894f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MILLIMOLE_PER_LITER,
895f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.PART_PER_MILLION,
896f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.LITER_PER_100KILOMETERS,
897f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.LITER_PER_KILOMETER,
898f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MILE_PER_GALLON,
899f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MILE_PER_GALLON_IMPERIAL,
900f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.EAST,
901f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.NORTH,
902f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.SOUTH,
903f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.WEST,
904f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.BIT,
905f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.BYTE,
906f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.GIGABIT,
907f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.GIGABYTE,
908f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.KILOBIT,
909f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.KILOBYTE,
910f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MEGABIT,
911f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MEGABYTE,
912f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.TERABIT,
913f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.TERABYTE,
914f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.CENTURY,
915f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.DAY,
916f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.HOUR,
917f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MICROSECOND,
918f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MILLISECOND,
919f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MINUTE,
920f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MONTH,
921f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.NANOSECOND,
922f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.SECOND,
923f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.WEEK,
924f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.YEAR,
925f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.AMPERE,
926f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MILLIAMPERE,
927f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.OHM,
928f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.VOLT,
929f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.CALORIE,
930f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.FOODCALORIE,
931f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.JOULE,
932f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.KILOCALORIE,
933f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.KILOJOULE,
934f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.KILOWATT_HOUR,
935f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.GIGAHERTZ,
936f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.HERTZ,
937f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.KILOHERTZ,
938f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MEGAHERTZ,
939f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.ASTRONOMICAL_UNIT,
940f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.CENTIMETER,
941f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.DECIMETER,
942f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.FATHOM,
943f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.FOOT,
944f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.FURLONG,
945f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.INCH,
946f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.KILOMETER,
947f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.LIGHT_YEAR,
948f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.METER,
949f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MICROMETER,
950f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MILE,
951f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MILE_SCANDINAVIAN,
952f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MILLIMETER,
953f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.NANOMETER,
954f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.NAUTICAL_MILE,
955f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.PARSEC,
956f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.PICOMETER,
957f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.YARD,
958f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.LUX,
959f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.CARAT,
960f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.GRAM,
961f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.KILOGRAM,
962f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.METRIC_TON,
963f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MICROGRAM,
964f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MILLIGRAM,
965f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.OUNCE,
966f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.OUNCE_TROY,
967f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.POUND,
968f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.STONE,
969f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.TON,
970f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.GIGAWATT,
971f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.HORSEPOWER,
972f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.KILOWATT,
973f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MEGAWATT,
974f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MILLIWATT,
975f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.WATT,
976f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.HECTOPASCAL,
977f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.INCH_HG,
978f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MILLIBAR,
979f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MILLIMETER_OF_MERCURY,
980f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.POUND_PER_SQUARE_INCH,
981f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.KILOMETER_PER_HOUR,
982f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.KNOT,
983f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.METER_PER_SECOND,
984f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MILE_PER_HOUR,
985f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.CELSIUS,
986f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.FAHRENHEIT,
987f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.GENERIC_TEMPERATURE,
988f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.KELVIN,
989f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.ACRE_FOOT,
990f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.BUSHEL,
991f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.CENTILITER,
992f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.CUBIC_CENTIMETER,
993f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.CUBIC_FOOT,
994f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.CUBIC_INCH,
995f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.CUBIC_KILOMETER,
996f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.CUBIC_METER,
997f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.CUBIC_MILE,
998f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.CUBIC_YARD,
999f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.CUP,
1000f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.CUP_METRIC,
1001f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.DECILITER,
1002f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.FLUID_OUNCE,
1003f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.GALLON,
1004f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.GALLON_IMPERIAL,
1005f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.HECTOLITER,
1006f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.LITER,
1007f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MEGALITER,
1008f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.MILLILITER,
1009f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.PINT,
1010f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.PINT_METRIC,
1011f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.QUART,
1012f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.TABLESPOON,
1013f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                MeasureUnit.TEASPOON,
1014f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        };
1015f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        assertEquals("",  138, units.length);
1016f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    }
1017f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
1018f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
101969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void TestExamplesInDocs() {
102069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat fmtFr = MeasureFormat.getInstance(
102169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                ULocale.FRENCH, FormatWidth.SHORT);
102269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Measure measure = new Measure(23, MeasureUnit.CELSIUS);
10231c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        assertEquals("23 °C", "23 °C", fmtFr.format(measure));
102469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Measure measureF = new Measure(70, MeasureUnit.FAHRENHEIT);
102569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("70 °F", "70 °F", fmtFr.format(measureF));
102669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat fmtFrFull = MeasureFormat.getInstance(
102769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                ULocale.FRENCH, FormatWidth.WIDE);
102869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals(
102969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "70 pied et 5,3 pouces",
103069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "70 pieds et 5,3 pouces",
103169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                fmtFrFull.formatMeasures(
103269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        new Measure(70, MeasureUnit.FOOT),
103369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        new Measure(5.3, MeasureUnit.INCH)));
103469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals(
103569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 pied et 1 pouce",
103669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 pied et 1 pouce",
103769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                fmtFrFull.formatMeasures(
103869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        new Measure(1, MeasureUnit.FOOT),
103969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        new Measure(1, MeasureUnit.INCH)));
104069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat fmtFrNarrow = MeasureFormat.getInstance(
104169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                ULocale.FRENCH, FormatWidth.NARROW);
104269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals(
104369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1′ 1″",
104469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1′ 1″",
104569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                fmtFrNarrow.formatMeasures(
104669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        new Measure(1, MeasureUnit.FOOT),
104769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        new Measure(1, MeasureUnit.INCH)));
104869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat fmtEn = MeasureFormat.getInstance(ULocale.ENGLISH, FormatWidth.WIDE);
104969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals(
105069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 inch, 2 feet",
105169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 inch, 2 feet",
105269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                fmtEn.formatMeasures(
105369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        new Measure(1, MeasureUnit.INCH),
105469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        new Measure(2, MeasureUnit.FOOT)));
105569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
10561c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1057f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
105869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void TestFormatPeriodEn() {
105969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TimeUnitAmount[] _19m = {new TimeUnitAmount(19.0, TimeUnit.MINUTE)};
106069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TimeUnitAmount[] _1h_23_5s = {
106169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(1.0, TimeUnit.HOUR),
106269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(23.5, TimeUnit.SECOND)};
106369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TimeUnitAmount[] _1h_23_5m = {
106469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(1.0, TimeUnit.HOUR),
106569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(23.5, TimeUnit.MINUTE)};
106669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TimeUnitAmount[] _1h_0m_23s = {
106769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(1.0, TimeUnit.HOUR),
106869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(0.0, TimeUnit.MINUTE),
106969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(23.0, TimeUnit.SECOND)};
107069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TimeUnitAmount[] _2y_5M_3w_4d = {
107169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(2.0, TimeUnit.YEAR),
107269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(5.0, TimeUnit.MONTH),
107369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(3.0, TimeUnit.WEEK),
107469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(4.0, TimeUnit.DAY)};
107569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TimeUnitAmount[] _1m_59_9996s = {
107669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(1.0, TimeUnit.MINUTE),
107769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(59.9996, TimeUnit.SECOND)};
107869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TimeUnitAmount[] _5h_17m = {
107969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(5.0, TimeUnit.HOUR),
108069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(17.0, TimeUnit.MINUTE)};
108169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TimeUnitAmount[] _neg5h_17m = {
108269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(-5.0, TimeUnit.HOUR),
108369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(17.0, TimeUnit.MINUTE)};
108469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TimeUnitAmount[] _19m_28s = {
108569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(19.0, TimeUnit.MINUTE),
108669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(28.0, TimeUnit.SECOND)};
108769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TimeUnitAmount[] _0h_0m_9s = {
108869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(0.0, TimeUnit.HOUR),
108969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(0.0, TimeUnit.MINUTE),
109069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(9.0, TimeUnit.SECOND)};
109169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TimeUnitAmount[] _0h_0m_17s = {
109269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(0.0, TimeUnit.HOUR),
109369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(0.0, TimeUnit.MINUTE),
109469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(17.0, TimeUnit.SECOND)};
109569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TimeUnitAmount[] _6h_56_92m = {
109669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(6.0, TimeUnit.HOUR),
109769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(56.92, TimeUnit.MINUTE)};
109869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TimeUnitAmount[] _3h_4s_5m = {
109969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(3.0, TimeUnit.HOUR),
110069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(4.0, TimeUnit.SECOND),
110169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(5.0, TimeUnit.MINUTE)};
110269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TimeUnitAmount[] _6_7h_56_92m = {
110369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(6.7, TimeUnit.HOUR),
110469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(56.92, TimeUnit.MINUTE)};
110569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TimeUnitAmount[] _3h_5h = {
110669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(3.0, TimeUnit.HOUR),
110769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new TimeUnitAmount(5.0, TimeUnit.HOUR)};
11081c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
110969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Object[][] fullData = {
111069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_1m_59_9996s, "1 minute, 59.9996 seconds"},
111169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_19m, "19 minutes"},
111269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_1h_23_5s, "1 hour, 23.5 seconds"},
111369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_1h_23_5m, "1 hour, 23.5 minutes"},
111469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_1h_0m_23s, "1 hour, 0 minutes, 23 seconds"},
111569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_2y_5M_3w_4d, "2 years, 5 months, 3 weeks, 4 days"}};
111669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Object[][] abbrevData = {
111769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_1m_59_9996s, "1 min, 59.9996 sec"},
111869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_19m, "19 min"},
111969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_1h_23_5s, "1 hr, 23.5 sec"},
112069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_1h_23_5m, "1 hr, 23.5 min"},
112169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_1h_0m_23s, "1 hr, 0 min, 23 sec"},
112269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_2y_5M_3w_4d, "2 yrs, 5 mths, 3 wks, 4 days"}};
112369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Object[][] narrowData = {
112469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_1m_59_9996s, "1m 59.9996s"},
112569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_19m, "19m"},
112669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_1h_23_5s, "1h 23.5s"},
112769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_1h_23_5m, "1h 23.5m"},
112869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_1h_0m_23s, "1h 0m 23s"},
112969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_2y_5M_3w_4d, "2y 5m 3w 4d"}};
11301c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
11311c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
113269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Object[][] numericData = {
113369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_1m_59_9996s, "1:59.9996"},
113469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_19m, "19m"},
113569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_1h_23_5s, "1:00:23.5"},
113669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_1h_0m_23s, "1:00:23"},
113769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_1h_23_5m, "1:23.5"},
113869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_5h_17m, "5:17"},
113969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_neg5h_17m, "-5h 17m"},
114069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_19m_28s, "19:28"},
114169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_2y_5M_3w_4d, "2y 5m 3w 4d"},
114269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_0h_0m_9s, "0:00:09"},
114369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_6h_56_92m, "6:56.92"},
114469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_6_7h_56_92m, "6:56.92"},
114569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_3h_4s_5m, "3h 4s 5m"},
114669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_3h_5h, "3h 5h"}};
114769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Object[][] fullDataDe = {
1148f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                {_1m_59_9996s, "1 Minute, 59,9996 Sekunden"},
114969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_19m, "19 Minuten"},
1150f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                {_1h_23_5s, "1 Stunde, 23,5 Sekunden"},
1151f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                {_1h_23_5m, "1 Stunde, 23,5 Minuten"},
115269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_1h_0m_23s, "1 Stunde, 0 Minuten und 23 Sekunden"},
115369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_2y_5M_3w_4d, "2 Jahre, 5 Monate, 3 Wochen und 4 Tage"}};
115469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Object[][] numericDataDe = {
115569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_1m_59_9996s, "1:59,9996"},
115669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_19m, "19 Min."},
115769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_1h_23_5s, "1:00:23,5"},
115869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_1h_0m_23s, "1:00:23"},
115969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_1h_23_5m, "1:23,5"},
116069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_5h_17m, "5:17"},
116169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_19m_28s, "19:28"},
116269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_2y_5M_3w_4d, "2 J, 5 M, 3 W und 4 T"},
116369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_0h_0m_17s, "0:00:17"},
116469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_6h_56_92m, "6:56,92"},
116569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {_3h_5h, "3 Std., 5 Std."}};
11661c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
116769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        NumberFormat nf = NumberFormat.getNumberInstance(ULocale.ENGLISH);
116869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        nf.setMaximumFractionDigits(4);
116969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat mf = MeasureFormat.getInstance(ULocale.ENGLISH, FormatWidth.WIDE, nf);
117069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        verifyFormatPeriod("en FULL", mf, fullData);
117169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        mf = MeasureFormat.getInstance(ULocale.ENGLISH, FormatWidth.SHORT, nf);
117269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        verifyFormatPeriod("en SHORT", mf, abbrevData);
117369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        mf = MeasureFormat.getInstance(ULocale.ENGLISH, FormatWidth.NARROW, nf);
117469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        verifyFormatPeriod("en NARROW", mf, narrowData);
117569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        mf = MeasureFormat.getInstance(ULocale.ENGLISH, FormatWidth.NUMERIC, nf);
117669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        verifyFormatPeriod("en NUMERIC", mf, numericData);
117769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
117869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        nf = NumberFormat.getNumberInstance(ULocale.GERMAN);
117969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        nf.setMaximumFractionDigits(4);
118069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        mf = MeasureFormat.getInstance(ULocale.GERMAN, FormatWidth.WIDE, nf);
118169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        verifyFormatPeriod("de FULL", mf, fullDataDe);
118269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        mf = MeasureFormat.getInstance(ULocale.GERMAN, FormatWidth.NUMERIC, nf);
118369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        verifyFormatPeriod("de NUMERIC", mf, numericDataDe);
118469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
118569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // Same tests, with Java Locale
118669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        nf = NumberFormat.getNumberInstance(Locale.GERMAN);
118769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        nf.setMaximumFractionDigits(4);
118869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        mf = MeasureFormat.getInstance(Locale.GERMAN, FormatWidth.WIDE, nf);
118969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        verifyFormatPeriod("de FULL(Java Locale)", mf, fullDataDe);
119069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        mf = MeasureFormat.getInstance(Locale.GERMAN, FormatWidth.NUMERIC, nf);
119169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        verifyFormatPeriod("de NUMERIC(Java Locale)", mf, numericDataDe);
119269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
119369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
11941c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
119569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private void verifyFormatPeriod(String desc, MeasureFormat mf, Object[][] testData) {
119669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        StringBuilder builder = new StringBuilder();
119769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        boolean failure = false;
119869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (Object[] testCase : testData) {
1199f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            String actual = mf.format(testCase[0]);
120069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            if (!testCase[1].equals(actual)) {
120169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                builder.append(String.format("%s: Expected: '%s', got: '%s'\n", desc, testCase[1], actual));
120269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                failure = true;
120369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
120469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
120569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        if (failure) {
120669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            errln(builder.toString());
120769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
120869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
12091c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1210f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
121169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void Test10219FractionalPlurals() {
121269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        double[] values = {1.588, 1.011};
121369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String[][] expected = {
121469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {"1 minute", "1.5 minutes", "1.58 minutes"},
121569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {"1 minute", "1.0 minutes", "1.01 minutes"}
121669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        };
121769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (int j = 0; j < values.length; j++) {
121869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            for (int i = 0; i < expected[j].length; i++) {
121969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                NumberFormat nf = NumberFormat.getNumberInstance(ULocale.ENGLISH);
122069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                nf.setRoundingMode(BigDecimal.ROUND_DOWN);
122169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                nf.setMinimumFractionDigits(i);
122269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                nf.setMaximumFractionDigits(i);
122369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureFormat mf = MeasureFormat.getInstance(
122469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        ULocale.ENGLISH, FormatWidth.WIDE, nf);
122569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                assertEquals("Test10219", expected[j][i], mf.format(new Measure(values[j], MeasureUnit.MINUTE)));
122669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
12271c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        }
122869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
12291c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1230f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
123169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void TestGreek() {
123269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String[] locales = {"el_GR", "el"};
123369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        final MeasureUnit[] units = new MeasureUnit[]{
123469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.SECOND,
123569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MINUTE,
123669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.HOUR,
123769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.DAY,
123869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.WEEK,
123969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.MONTH,
124069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                MeasureUnit.YEAR};
124169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        FormatWidth[] styles = new FormatWidth[] {FormatWidth.WIDE, FormatWidth.SHORT};
124269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        int[] numbers = new int[] {1, 7};
124369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String[] expected = {
124469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                // "el_GR" 1 wide
124569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 δευτερόλεπτο",
124669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 λεπτό",
124769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 ώρα",
124869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 ημέρα",
124969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 εβδομάδα",
125069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 μήνας",
125169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 έτος",
125269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                // "el_GR" 1 short
125369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 δευτ.",
125469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 λεπ.",
125569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 ώρα",
125669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 ημέρα",
125769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 εβδ.",
125869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 μήν.",
125969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 έτ.",	        // year (one)
126069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                // "el_GR" 7 wide
126169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 δευτερόλεπτα",
126269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 λεπτά",
126369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 ώρες",
126469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 ημέρες",
126569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 εβδομάδες",
126669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 μήνες",
126769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 έτη",
126869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                // "el_GR" 7 short
126969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 δευτ.",
127069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 λεπ.",
127169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 ώρ.",		    // hour (other)
127269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 ημέρες",
127369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 εβδ.",
127469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 μήν.",
127569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 έτ.",            // year (other)
127669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                // "el" 1 wide
127769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 δευτερόλεπτο",
127869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 λεπτό",
127969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 ώρα",
128069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 ημέρα",
128169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 εβδομάδα",
128269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 μήνας",
128369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 έτος",
128469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                // "el" 1 short
128569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 δευτ.",
128669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 λεπ.",
128769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 ώρα",
128869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 ημέρα",
128969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 εβδ.",
129069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 μήν.",
129169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 έτ.",	        // year (one)
129269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                // "el" 7 wide
129369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 δευτερόλεπτα",
129469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 λεπτά",
129569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 ώρες",
129669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 ημέρες",
129769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 εβδομάδες",
129869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 μήνες",
129969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 έτη",
130069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                // "el" 7 short
130169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 δευτ.",
130269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 λεπ.",
130369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 ώρ.",		    // hour (other)
130469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 ημέρες",
130569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 εβδ.",
130669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 μήν.",
130769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "7 έτ."};           // year (other
130869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        int counter = 0;
130969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String formatted;
131069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for ( int locIndex = 0; locIndex < locales.length; ++locIndex ) {
131169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            for( int numIndex = 0; numIndex < numbers.length; ++numIndex ) {
131269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                for ( int styleIndex = 0; styleIndex < styles.length; ++styleIndex ) {
131369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    for ( int unitIndex = 0; unitIndex < units.length; ++unitIndex ) {
131469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        Measure m = new Measure(numbers[numIndex], units[unitIndex]);
131569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        MeasureFormat fmt = MeasureFormat.getInstance(new ULocale(locales[locIndex]), styles[styleIndex]);
131669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        formatted = fmt.format(m);
131769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        assertEquals(
131869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                                "locale: " + locales[locIndex]
131969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                                        + ", style: " + styles[styleIndex]
132069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                                                + ", units: " + units[unitIndex]
132169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                                                        + ", value: " + numbers[numIndex],
132269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                                                expected[counter], formatted);
132369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        ++counter;
132469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    }
132569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                }
132669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
132769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
132869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
132969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
1330f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
133169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testAUnit() {
133269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String lastType = null;
133369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (MeasureUnit expected : MeasureUnit.getAvailable()) {
133469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            String type = expected.getType();
133569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            String code = expected.getSubtype();
133669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            if (!type.equals(lastType)) {
133769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                logln(type);
133869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                lastType = type;
133969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
134069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            MeasureUnit actual = MeasureUnit.internalGetInstance(type, code);
134169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            assertSame("Identity check", expected, actual);
134269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
134369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
13441c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1345f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
134669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testFormatSingleArg() {
134769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat mf = MeasureFormat.getInstance(ULocale.ENGLISH, FormatWidth.WIDE);
134869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("", "5 meters", mf.format(new Measure(5, MeasureUnit.METER)));
134969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
13501c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1351f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
135269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testFormatMeasuresZeroArg() {
135369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat mf = MeasureFormat.getInstance(ULocale.ENGLISH, FormatWidth.WIDE);
135469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("", "", mf.formatMeasures());
135569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
13561c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1357f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
135869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testFormatMeasuresOneArg() {
135969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat mf = MeasureFormat.getInstance(ULocale.ENGLISH, FormatWidth.WIDE);
136069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("", "5 meters", mf.formatMeasures(new Measure(5, MeasureUnit.METER)));
136169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
13621c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
13631c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
136469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
1365f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
136669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testMultiples() {
136769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        ULocale russia = new ULocale("ru");
136869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Object[][] data = new Object[][] {
136969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {ULocale.ENGLISH, FormatWidth.WIDE, "2 miles, 1 foot, 2.3 inches"},
137069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {ULocale.ENGLISH, FormatWidth.SHORT, "2 mi, 1 ft, 2.3 in"},
137169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {ULocale.ENGLISH, FormatWidth.NARROW, "2mi 1\u2032 2.3\u2033"},
137269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {russia, FormatWidth.WIDE,   "2 \u043C\u0438\u043B\u0438 1 \u0444\u0443\u0442 \u0438 2,3 \u0434\u044E\u0439\u043C\u0430"},
137369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {russia, FormatWidth.SHORT,  "2 \u043C\u0438\u043B\u0438 1 \u0444\u0443\u0442 \u0438 2,3 \u0434\u044E\u0439\u043C."},
137469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {russia, FormatWidth.NARROW, "2 \u043C\u0438\u043B\u044C 1 \u0444\u0443\u0442 2,3 \u0434\u044E\u0439\u043C\u0430"},
137569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        };
137669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (Object[] row : data) {
137769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            MeasureFormat mf = MeasureFormat.getInstance(
137869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    (ULocale) row[0], (FormatWidth) row[1]);
137969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            assertEquals(
138069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    "testMultiples",
138169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    row[2],
138269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    mf.formatMeasures(
13831c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                            new Measure(2, MeasureUnit.MILE),
13841c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                            new Measure(1, MeasureUnit.FOOT),
138569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            new Measure(2.3, MeasureUnit.INCH)));
138669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
138769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
13881c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1389f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
13901c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert    public void testManyLocaleDurations() {
13911c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        Measure hours   = new Measure(5, MeasureUnit.HOUR);
13921c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        Measure minutes = new Measure(37, MeasureUnit.MINUTE);
13931c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        ULocale ulocDanish       = new ULocale("da");
13941c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        ULocale ulocSpanish      = new ULocale("es");
13951c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        ULocale ulocFinnish      = new ULocale("fi");
13961c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        ULocale ulocIcelandic    = new ULocale("is");
13971c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        ULocale ulocNorwegianBok = new ULocale("nb");
13981c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        ULocale ulocNorwegianNyn = new ULocale("nn");
13991c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        ULocale ulocDutch        = new ULocale("nl");
14001c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        ULocale ulocSwedish      = new ULocale("sv");
14011c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        Object[][] data = new Object[][] {
14021c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ulocDanish,       FormatWidth.NARROW,  "5 t og 37 min" },
14031c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ulocDanish,       FormatWidth.NUMERIC, "5.37" },
14041c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ULocale.GERMAN,   FormatWidth.NARROW,  "5 Std., 37 Min." },
14051c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ULocale.GERMAN,   FormatWidth.NUMERIC, "5:37" },
14061c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ULocale.ENGLISH,  FormatWidth.NARROW,  "5h 37m" },
14071c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ULocale.ENGLISH,  FormatWidth.NUMERIC, "5:37" },
14081c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ulocSpanish,      FormatWidth.NARROW,  "5h 37min" },
14091c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ulocSpanish,      FormatWidth.NUMERIC, "5:37" },
14101c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ulocFinnish,      FormatWidth.NARROW,  "5t 37min" },
14111c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ulocFinnish,      FormatWidth.NUMERIC, "5.37" },
14121c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ULocale.FRENCH,   FormatWidth.NARROW,  "5h 37m" },
14131c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ULocale.FRENCH,   FormatWidth.NUMERIC, "05:37" },
14141c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ulocIcelandic,    FormatWidth.NARROW,  "5 klst. og 37 m\u00EDn." },
14151c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ulocIcelandic,    FormatWidth.NUMERIC, "5:37" },
1416f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { ULocale.JAPANESE, FormatWidth.NARROW,  "5h37m" },
14171c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ULocale.JAPANESE, FormatWidth.NUMERIC, "5:37" },
14181c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ulocNorwegianBok, FormatWidth.NARROW,  "5t, 37m" },
1419f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { ulocNorwegianBok, FormatWidth.NUMERIC, "5:37" },
14201c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ulocDutch,        FormatWidth.NARROW,  "5 u, 37 m" },
14211c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ulocDutch,        FormatWidth.NUMERIC, "5:37" },
14221c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ulocNorwegianNyn, FormatWidth.NARROW,  "5 h og 37 min" },
1423f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { ulocNorwegianNyn, FormatWidth.NUMERIC, "5:37" },
14241c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ulocSwedish,      FormatWidth.NARROW,  "5h 37m" },
14251c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ulocSwedish,      FormatWidth.NUMERIC, "5:37" },
14261c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ULocale.CHINESE,  FormatWidth.NARROW,  "5\u5C0F\u65F637\u5206\u949F" },
14271c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            { ULocale.CHINESE,  FormatWidth.NUMERIC, "5:37" },
14281c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        };
14291c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        for (Object[] row : data) {
14301c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            MeasureFormat mf = null;
14311c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            try{
14321c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                mf = MeasureFormat.getInstance( (ULocale)row[0], (FormatWidth)row[1] );
14331c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            } catch(Exception e) {
1434f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                errln("Exception creating MeasureFormat for locale " + row[0] + ", width " +
1435f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                        row[1] + ": " + e);
14361c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                continue;
14371c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            }
14381c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            String result = mf.formatMeasures(hours, minutes);
1439f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            if (!result.equals(row[2])) {
1440f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                errln("MeasureFormat.formatMeasures for locale " + row[0] + ", width " +
1441f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                        row[1] + ", expected \"" + (String)row[2] + "\", got \"" + result + "\"" );
14421c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            }
14431c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        }
14441c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert    }
14451c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1446f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
144769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testSimplePer() {
144869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Object DONT_CARE = null;
144969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Object[][] data = new Object[][] {
145069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                // per unit pattern
145169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {FormatWidth.WIDE, 1.0, MeasureUnit.SECOND, "1 pound per second", DONT_CARE, 0, 0},
145269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {FormatWidth.WIDE, 2.0, MeasureUnit.SECOND, "2 pounds per second", DONT_CARE, 0, 0},
145369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                // compound pattern
145469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {FormatWidth.WIDE, 1.0, MeasureUnit.MINUTE, "1 pound per minute", DONT_CARE, 0, 0},
145569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {FormatWidth.WIDE, 2.0, MeasureUnit.MINUTE, "2 pounds per minute", DONT_CARE, 0, 0},
145669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                // per unit
145769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {FormatWidth.SHORT, 1.0, MeasureUnit.SECOND, "1 lb/s", DONT_CARE, 0, 0},
145869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {FormatWidth.SHORT, 2.0, MeasureUnit.SECOND, "2 lb/s", DONT_CARE, 0, 0},
145969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                // compound
146069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {FormatWidth.SHORT, 1.0, MeasureUnit.MINUTE, "1 lb/min", DONT_CARE, 0, 0},
146169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {FormatWidth.SHORT, 2.0, MeasureUnit.MINUTE, "2 lb/min", DONT_CARE, 0, 0},
146269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                // per unit
146369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {FormatWidth.NARROW, 1.0, MeasureUnit.SECOND, "1#/s", DONT_CARE, 0, 0},
146469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {FormatWidth.NARROW, 2.0, MeasureUnit.SECOND, "2#/s", DONT_CARE, 0, 0},
146569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                // compound
146669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {FormatWidth.NARROW, 1.0, MeasureUnit.MINUTE, "1#/min", DONT_CARE, 0, 0},
146769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {FormatWidth.NARROW, 2.0, MeasureUnit.MINUTE, "2#/min", DONT_CARE, 0, 0},
146869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                // field positions
146969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {FormatWidth.SHORT, 23.3, MeasureUnit.SECOND, "23.3 lb/s", NumberFormat.Field.DECIMAL_SEPARATOR, 2, 3},
147069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {FormatWidth.SHORT, 23.3, MeasureUnit.SECOND, "23.3 lb/s", NumberFormat.Field.INTEGER, 0, 2},
147169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {FormatWidth.SHORT, 23.3, MeasureUnit.MINUTE, "23.3 lb/min", NumberFormat.Field.DECIMAL_SEPARATOR, 2, 3},
147269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {FormatWidth.SHORT, 23.3, MeasureUnit.MINUTE, "23.3 lb/min", NumberFormat.Field.INTEGER, 0, 2},
147369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
147469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        };
14751c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
147669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (Object[] row : data) {
147769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            FormatWidth formatWidth = (FormatWidth) row[0];
147869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            Number amount = (Number) row[1];
147969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            MeasureUnit perUnit = (MeasureUnit) row[2];
148069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            String expected = row[3].toString();
148169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            NumberFormat.Field field = (NumberFormat.Field) row[4];
148269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            int startOffset = ((Integer) row[5]).intValue();
148369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            int endOffset = ((Integer) row[6]).intValue();
148469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            MeasureFormat mf = MeasureFormat.getInstance(
148569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    ULocale.ENGLISH, formatWidth);
148669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            FieldPosition pos = field != null ? new FieldPosition(field) : new FieldPosition(0);
148769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            String prefix = "Prefix: ";
148869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            assertEquals(
148969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    "",
149069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    prefix + expected,
149169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    mf.formatMeasurePerUnit(
149269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            new Measure(amount, MeasureUnit.POUND),
149369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            perUnit,
149469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            new StringBuilder(prefix),
149569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            pos).toString());
149669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            if (field != DONT_CARE) {
149769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                assertEquals("startOffset", startOffset, pos.getBeginIndex() - prefix.length());
149869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                assertEquals("endOffset", endOffset, pos.getEndIndex() - prefix.length());
149969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
15001c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        }
150169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
15021c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1503f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
150469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testNumeratorPlurals() {
150569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        ULocale polish = new ULocale("pl");
150669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Object[][] data = new Object[][] {
150769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {1, "1 stopa na sekundę"},
150869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {2, "2 stopy na sekundę"},
150969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {5, "5 stóp na sekundę"},
151069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                {1.5, "1,5 stopy na sekundę"}};
15111c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
151269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (Object[] row : data) {
151369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            MeasureFormat mf = MeasureFormat.getInstance(polish, FormatWidth.WIDE);
151469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            assertEquals(
151569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    "",
151669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    row[1],
151769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    mf.formatMeasurePerUnit(
151869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            new Measure((Number) row[0], MeasureUnit.FOOT),
151969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            MeasureUnit.SECOND,
152069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            new StringBuilder(),
152169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            new FieldPosition(0)).toString());
15221c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        }
152369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
152469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
1525f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
152669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testGram() {
152769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat mf = MeasureFormat.getInstance(ULocale.ENGLISH, FormatWidth.SHORT);
152869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals(
152969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "testGram",
153069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 g",
153169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                mf.format(new Measure(1, MeasureUnit.GRAM)));
153269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals(
153369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "testGram",
153469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "1 G",
153569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                mf.format(new Measure(1, MeasureUnit.G_FORCE)));
153669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
15371c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1538f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
153969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testCurrencies() {
154069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Measure USD_1 = new Measure(1.0, Currency.getInstance("USD"));
154169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Measure USD_2 = new Measure(2.0, Currency.getInstance("USD"));
154269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Measure USD_NEG_1 = new Measure(-1.0, Currency.getInstance("USD"));
154369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat mf = MeasureFormat.getInstance(ULocale.ENGLISH, FormatWidth.WIDE);
154469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("Wide currency", "-1.00 US dollars", mf.format(USD_NEG_1));
154569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("Wide currency", "1.00 US dollars", mf.format(USD_1));
154669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("Wide currency", "2.00 US dollars", mf.format(USD_2));
154769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        mf = MeasureFormat.getInstance(ULocale.ENGLISH, FormatWidth.SHORT);
154869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("short currency", "-USD1.00", mf.format(USD_NEG_1));
154969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("short currency", "USD1.00", mf.format(USD_1));
155069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("short currency", "USD2.00", mf.format(USD_2));
155169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        mf = MeasureFormat.getInstance(ULocale.ENGLISH, FormatWidth.NARROW);
155269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("narrow currency", "-$1.00", mf.format(USD_NEG_1));
155369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("narrow currency", "$1.00", mf.format(USD_1));
155469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("narrow currency", "$2.00", mf.format(USD_2));
155569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        mf = MeasureFormat.getInstance(ULocale.ENGLISH, FormatWidth.NUMERIC);
155669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("numeric currency", "-$1.00", mf.format(USD_NEG_1));
155769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("numeric currency", "$1.00", mf.format(USD_1));
155869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("numeric currency", "$2.00", mf.format(USD_2));
15591c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
156069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        mf = MeasureFormat.getInstance(ULocale.JAPAN, FormatWidth.WIDE);
156169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("Wide currency", "-1.00\u7C73\u30C9\u30EB", mf.format(USD_NEG_1));
156269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("Wide currency", "1.00\u7C73\u30C9\u30EB", mf.format(USD_1));
156369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("Wide currency", "2.00\u7C73\u30C9\u30EB", mf.format(USD_2));
1564f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
1565f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        Measure CAD_1 = new Measure(1.0, Currency.getInstance("CAD"));
1566f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        mf = MeasureFormat.getInstance(ULocale.CANADA, FormatWidth.SHORT);
1567f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        assertEquals("short currency", "CAD1.00", mf.format(CAD_1));
156869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
15691c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1570f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
1571f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    public void testDisplayNames() {
1572f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        Object[][] data = new Object[][] {
1573f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            // Unit, locale, width, expected result
1574f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { MeasureUnit.YEAR, "en", FormatWidth.WIDE, "years" },
1575f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { MeasureUnit.YEAR, "ja", FormatWidth.WIDE, "年" },
1576f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { MeasureUnit.YEAR, "es", FormatWidth.WIDE, "años" },
1577f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { MeasureUnit.YEAR, "pt", FormatWidth.WIDE, "anos" },
1578f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { MeasureUnit.YEAR, "pt-PT", FormatWidth.WIDE, "anos" },
1579f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { MeasureUnit.AMPERE, "en", FormatWidth.WIDE, "amperes" },
1580f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { MeasureUnit.AMPERE, "ja", FormatWidth.WIDE, "アンペア" },
1581f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { MeasureUnit.AMPERE, "es", FormatWidth.WIDE, "amperios" },
1582f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { MeasureUnit.AMPERE, "pt", FormatWidth.WIDE, "amperes" },
1583f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { MeasureUnit.AMPERE, "pt-PT", FormatWidth.WIDE, "amperes" },
1584f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { MeasureUnit.METER_PER_SECOND_SQUARED, "pt", FormatWidth.WIDE, "metros por segundo ao quadrado" },
1585f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { MeasureUnit.METER_PER_SECOND_SQUARED, "pt-PT", FormatWidth.WIDE, "metros por segundo quadrado" },
1586f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { MeasureUnit.SQUARE_KILOMETER, "pt", FormatWidth.NARROW, "km²" },
1587f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { MeasureUnit.SQUARE_KILOMETER, "pt", FormatWidth.SHORT, "km²" },
1588f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { MeasureUnit.SQUARE_KILOMETER, "pt", FormatWidth.WIDE, "quilômetros quadrados" },
1589f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { MeasureUnit.SECOND, "pt-PT", FormatWidth.NARROW, "s" },
1590f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { MeasureUnit.SECOND, "pt-PT", FormatWidth.SHORT, "s" },
1591f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { MeasureUnit.SECOND, "pt-PT", FormatWidth.WIDE, "segundos" },
1592f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { MeasureUnit.SECOND, "pt", FormatWidth.NARROW, "seg" },
1593f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { MeasureUnit.SECOND, "pt", FormatWidth.SHORT, "segs" },
1594f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            { MeasureUnit.SECOND, "pt", FormatWidth.WIDE, "segundos" },
1595f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        };
1596f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
1597f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        for (Object[] test : data) {
1598f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            MeasureUnit unit = (MeasureUnit) test[0];
1599f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            ULocale locale = ULocale.forLanguageTag((String) test[1]);
1600f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            FormatWidth formatWidth = (FormatWidth) test[2];
1601f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            String expected = (String) test[3];
1602f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
1603f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            MeasureFormat mf = MeasureFormat.getInstance(locale, formatWidth);
1604f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            String actual = mf.getUnitDisplayName(unit);
1605f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            assertEquals(String.format("Unit Display Name for %s, %s, %s", unit, locale, formatWidth),
1606f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                    expected, actual);
1607f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        }
1608f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    }
1609f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
1610f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
161169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testFieldPosition() {
161269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat fmt = MeasureFormat.getInstance(
161369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                ULocale.ENGLISH, FormatWidth.SHORT);
161469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        FieldPosition pos = new FieldPosition(NumberFormat.Field.DECIMAL_SEPARATOR);
161569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        fmt.format(new Measure(43.5, MeasureUnit.FOOT), new StringBuffer("123456: "), pos);
161669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("beginIndex", 10, pos.getBeginIndex());
161769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("endIndex", 11, pos.getEndIndex());
16181c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
161969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        pos = new FieldPosition(NumberFormat.Field.DECIMAL_SEPARATOR);
162069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        fmt.format(new Measure(43, MeasureUnit.FOOT), new StringBuffer(), pos);
162169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("beginIndex", 0, pos.getBeginIndex());
162269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("endIndex", 0, pos.getEndIndex());
162369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
16241c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1625f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
162669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testFieldPositionMultiple() {
162769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat fmt = MeasureFormat.getInstance(
162869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                ULocale.ENGLISH, FormatWidth.SHORT);
162969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        FieldPosition pos = new FieldPosition(NumberFormat.Field.INTEGER);
163069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String result = fmt.formatMeasures(
163169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new StringBuilder(),
163269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                pos,
163369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new Measure(354, MeasureUnit.METER),
163469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new Measure(23, MeasureUnit.CENTIMETER)).toString();
163569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("result", "354 m, 23 cm", result);
16361c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
163769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // According to javadocs for {@link Format#format} FieldPosition is set to
163869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // beginning and end of first such field encountered instead of the last
163969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // such field encountered.
164069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("beginIndex", 0, pos.getBeginIndex());
164169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("endIndex", 3, pos.getEndIndex());
16421c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
164369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        pos = new FieldPosition(NumberFormat.Field.DECIMAL_SEPARATOR);
164469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        result = fmt.formatMeasures(
164569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new StringBuilder("123456: "),
164669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                pos,
164769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new Measure(354, MeasureUnit.METER),
164869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new Measure(23, MeasureUnit.CENTIMETER),
164969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new Measure(5.4, MeasureUnit.MILLIMETER)).toString();
165069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("result", "123456: 354 m, 23 cm, 5.4 mm", result);
165169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("beginIndex", 23, pos.getBeginIndex());
165269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("endIndex", 24, pos.getEndIndex());
16531c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
165469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        result = fmt.formatMeasures(
165569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new StringBuilder(),
165669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                pos,
165769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new Measure(3, MeasureUnit.METER),
165869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new Measure(23, MeasureUnit.CENTIMETER),
165969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new Measure(5.4, MeasureUnit.MILLIMETER)).toString();
166069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("result", "3 m, 23 cm, 5.4 mm", result);
166169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("beginIndex", 13, pos.getBeginIndex());
166269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("endIndex", 14, pos.getEndIndex());
16631c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
166469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        pos = new FieldPosition(NumberFormat.Field.DECIMAL_SEPARATOR);
166569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        result = fmt.formatMeasures(
166669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new StringBuilder("123456: "),
166769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                pos,
166869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new Measure(3, MeasureUnit.METER),
166969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new Measure(23, MeasureUnit.CENTIMETER),
167069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new Measure(5, MeasureUnit.MILLIMETER)).toString();
167169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("result", "123456: 3 m, 23 cm, 5 mm", result);
167269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("beginIndex", 0, pos.getBeginIndex());
167369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("endIndex", 0, pos.getEndIndex());
16741c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
167569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        pos = new FieldPosition(NumberFormat.Field.INTEGER);
167669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        result = fmt.formatMeasures(
167769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new StringBuilder("123456: "),
167869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                pos,
167969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new Measure(57, MeasureUnit.MILLIMETER)).toString();
168069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("result", "123456: 57 mm", result);
168169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("beginIndex", 8, pos.getBeginIndex());
168269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("endIndex", 10, pos.getEndIndex());
16831c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
168469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
16851c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1686f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
168769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testOldFormatWithList() {
168869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        List<Measure> measures = new ArrayList<Measure>(2);
168969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        measures.add(new Measure(5, MeasureUnit.ACRE));
169069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        measures.add(new Measure(3000, MeasureUnit.SQUARE_FOOT));
169169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat fmt = MeasureFormat.getInstance(
169269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                ULocale.ENGLISH, FormatWidth.WIDE);
169369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("", "5 acres, 3,000 square feet", fmt.format(measures));
169469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("", "5 acres", fmt.format(measures.subList(0, 1)));
169569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        List<String> badList = new ArrayList<String>();
169669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        badList.add("be");
169769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        badList.add("you");
169869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        try {
169969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            fmt.format(badList);
170069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            fail("Expected IllegalArgumentException.");
170169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        } catch (IllegalArgumentException expected) {
17021c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert           // Expected
170369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
170469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
17051c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1706f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
170769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testOldFormatWithArray() {
170869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Measure[] measures = new Measure[] {
170969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new Measure(5, MeasureUnit.ACRE),
17101c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                new Measure(3000, MeasureUnit.SQUARE_FOOT),
171169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        };
171269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat fmt = MeasureFormat.getInstance(
171369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                ULocale.ENGLISH, FormatWidth.WIDE);
171469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("", "5 acres, 3,000 square feet", fmt.format(measures));
171569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
17161c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1717f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
171869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testOldFormatBadArg() {
171969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat fmt = MeasureFormat.getInstance(
172069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                ULocale.ENGLISH, FormatWidth.WIDE);
172169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        try {
172269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            fmt.format("be");
172369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            fail("Expected IllegalArgumentExceptino.");
172469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        } catch (IllegalArgumentException e) {
172569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            // Expected
172669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
172769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
17281c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1729f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
173069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testUnitPerUnitResolution() {
173169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // Ticket 11274
173269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat fmt = MeasureFormat.getInstance(Locale.ENGLISH, FormatWidth.SHORT);
17331c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
173469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // This fails unless we resolve to MeasureUnit.POUND_PER_SQUARE_INCH
173569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("", "50 psi",
173669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                fmt.formatMeasurePerUnit(
173769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        new Measure(50, MeasureUnit.POUND),
173869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        MeasureUnit.SQUARE_INCH,
173969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        new StringBuilder(),
174069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        new FieldPosition(0)).toString());
174169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
17421c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1743f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
174469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testEqHashCode() {
174569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat mf = MeasureFormat.getInstance(ULocale.CANADA, FormatWidth.SHORT);
174669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat mfeq = MeasureFormat.getInstance(ULocale.CANADA, FormatWidth.SHORT);
174769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat mfne = MeasureFormat.getInstance(ULocale.CANADA, FormatWidth.WIDE);
174869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat mfne2 = MeasureFormat.getInstance(ULocale.ENGLISH, FormatWidth.SHORT);
174969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        verifyEqualsHashCode(mf, mfeq, mfne);
175069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        verifyEqualsHashCode(mf, mfeq, mfne2);
175169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
175269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
1753f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
175469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testEqHashCodeOfMeasure() {
175569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Measure _3feetDouble = new Measure(3.0, MeasureUnit.FOOT);
175669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Measure _3feetInt = new Measure(3, MeasureUnit.FOOT);
175769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Measure _4feetInt = new Measure(4, MeasureUnit.FOOT);
175869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        verifyEqualsHashCode(_3feetDouble, _3feetInt, _4feetInt);
175969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
17601c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1761f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
176269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testGetLocale() {
176369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat mf = MeasureFormat.getInstance(ULocale.GERMAN, FormatWidth.SHORT);
176469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("", ULocale.GERMAN, mf.getLocale(ULocale.VALID_LOCALE));
176569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
17661c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1767f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
176869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void TestSerial() {
176969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        checkStreamingEquality(MeasureUnit.CELSIUS);
177069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        checkStreamingEquality(MeasureFormat.getInstance(ULocale.FRANCE, FormatWidth.NARROW));
177169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        checkStreamingEquality(Currency.getInstance("EUR"));
177269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        checkStreamingEquality(MeasureFormat.getInstance(ULocale.GERMAN, FormatWidth.SHORT));
177369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        checkStreamingEquality(MeasureFormat.getCurrencyFormat(ULocale.ITALIAN));
177469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
17751c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1776f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
177769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void TestSerialFormatWidthEnum() {
177869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // FormatWidth enum values must map to the same ordinal values for all time in order for
177969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // serialization to work.
178069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("FormatWidth.WIDE", 0, FormatWidth.WIDE.ordinal());
178169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("FormatWidth.SHORT", 1, FormatWidth.SHORT.ordinal());
178269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("FormatWidth.NARROW", 2, FormatWidth.NARROW.ordinal());
178369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("FormatWidth.NUMERIC", 3, FormatWidth.NUMERIC.ordinal());
178469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
17851c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1786f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
178769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testCurrencyFormatStandInForMeasureFormat() {
178869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat mf = MeasureFormat.getCurrencyFormat(ULocale.ENGLISH);
178969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals(
179069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "70 feet, 5.3 inches",
179169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "70 feet, 5.3 inches",
179269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                mf.formatMeasures(
179369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        new Measure(70, MeasureUnit.FOOT),
179469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        new Measure(5.3, MeasureUnit.INCH)));
179569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("getLocale", ULocale.ENGLISH, mf.getLocale());
179669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("getNumberFormat", ULocale.ENGLISH, mf.getNumberFormat().getLocale(ULocale.VALID_LOCALE));
179769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("getWidth", MeasureFormat.FormatWidth.WIDE, mf.getWidth());
179869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
179969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
1800f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
180169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testCurrencyFormatLocale() {
180269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat mfu = MeasureFormat.getCurrencyFormat(ULocale.FRANCE);
180369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat mfj = MeasureFormat.getCurrencyFormat(Locale.FRANCE);
180469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
180569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("getCurrencyFormat ULocale/Locale", mfu, mfj);
180669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
180769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
1808f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
180969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testDoubleZero() {
181069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        ULocale en = new ULocale("en");
181169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        NumberFormat nf = NumberFormat.getInstance(en);
181269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        nf.setMinimumFractionDigits(2);
181369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        nf.setMaximumFractionDigits(2);
181469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat mf = MeasureFormat.getInstance(en, FormatWidth.WIDE, nf);
181569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals(
181669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "Positive Rounding",
181769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "4 hours, 23 minutes, 16.00 seconds",
181869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                mf.formatMeasures(
181969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        new Measure(4.7, MeasureUnit.HOUR),
182069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        new Measure(23, MeasureUnit.MINUTE),
182169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        new Measure(16, MeasureUnit.SECOND)));
182269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals(
182369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "Negative Rounding",
182469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                "-4 hours, 23 minutes, 16.00 seconds",
182569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                mf.formatMeasures(
182669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        new Measure(-4.7, MeasureUnit.HOUR),
182769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        new Measure(23, MeasureUnit.MINUTE),
182869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        new Measure(16, MeasureUnit.SECOND)));
18291c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
183069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
183169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
1832f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
183369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public void testIndividualPluralFallback() {
183469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // See ticket #11986 "incomplete fallback in MeasureFormat".
183569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // In CLDR 28, fr_CA temperature-generic/short has only the "one" form,
183669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // and falls back to fr for the "other" form.
183769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        MeasureFormat mf = MeasureFormat.getInstance(new ULocale("fr_CA"), FormatWidth.SHORT);
183869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Measure twoDeg = new Measure(2, MeasureUnit.GENERIC_TEMPERATURE);
183969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("2 deg temp in fr_CA", "2°", mf.format(twoDeg));
184069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
184169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
1842f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
18431c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert    public void testPopulateCache() {
18441c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        // Quick check that the lazily added additions to the MeasureUnit cache are present.
18451c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        assertTrue("MeasureUnit: unexpectedly few currencies defined", MeasureUnit.getAvailable("currency").size() > 50);
18461c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert    }
18471c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1848f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
18491c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert    public void testParseObject() {
18501c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        MeasureFormat mf = MeasureFormat.getInstance(Locale.GERMAN, FormatWidth.NARROW);
18511c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        try {
18521c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            mf.parseObject("3m", null);
18531c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            fail("MeasureFormat.parseObject(String, ParsePosition) " +
18541c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                    "should throw an UnsupportedOperationException");
18551c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        } catch (UnsupportedOperationException expected) {
18561c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        }
18571c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert    }
18581c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
1859f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
1860f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    public void testCLDRUnitAvailability() {
1861f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        Set<MeasureUnit> knownUnits = new HashSet<MeasureUnit>();
1862f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        Class cMeasureUnit, cTimeUnit;
1863f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        try {
1864f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            cMeasureUnit = Class.forName("android.icu.util.MeasureUnit");
1865f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            cTimeUnit = Class.forName("android.icu.util.TimeUnit");
1866f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        } catch (ClassNotFoundException e) {
1867f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            fail("Count not load MeasureUnit or TimeUnit class: " + e.getMessage());
1868f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            return;
1869f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        }
1870f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        for (Field field : cMeasureUnit.getFields()) {
1871f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            if (field.getGenericType() == cMeasureUnit || field.getGenericType() == cTimeUnit) {
1872f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                try {
1873f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                    MeasureUnit unit = (MeasureUnit) field.get(cMeasureUnit);
1874f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                    knownUnits.add(unit);
1875f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                } catch (IllegalArgumentException e) {
1876f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                    fail(e.getMessage());
1877f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                    return;
1878f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                } catch (IllegalAccessException e) {
1879f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                    fail(e.getMessage());
1880f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                    return;
1881f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                }
1882f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            }
1883f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        }
1884f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        for (String type : MeasureUnit.getAvailableTypes()) {
1885f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            if (type.equals("currency") || type.equals("compound")) {
1886f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                continue;
1887f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            }
1888f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            for (MeasureUnit unit : MeasureUnit.getAvailable(type)) {
1889f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                if (!knownUnits.contains(unit)) {
1890f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                    fail("Unit present in CLDR but not available via constant in MeasureUnit: " + unit);
1891f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                }
1892f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert            }
1893f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        }
1894f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    }
1895f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
189669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    // DO NOT DELETE THIS FUNCTION! It may appear as dead code, but we use this to generate code
189769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    // for MeasureFormat during the release process.
189869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    static Map<MeasureUnit, Pair<MeasureUnit, MeasureUnit>> getUnitsToPerParts() {
189969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TreeMap<String, List<MeasureUnit>> allUnits = getAllUnits();
190069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Map<MeasureUnit, Pair<String, String>> unitsToPerStrings =
190169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new HashMap<MeasureUnit, Pair<String, String>>();
190269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Map<String, MeasureUnit> namesToUnits = new HashMap<String, MeasureUnit>();
190369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (Map.Entry<String, List<MeasureUnit>> entry : allUnits.entrySet()) {
190469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            String type = entry.getKey();
190569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            // Currency types are always atomic units, so we can skip these
190669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            if (type.equals("currency")) {
190769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                continue;
190869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
190969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            for (MeasureUnit unit : entry.getValue()) {
191069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                String javaName = toJAVAName(unit);
191169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                String[] nameParts = javaName.split("_PER_");
191269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                if (nameParts.length == 1) {
191369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    namesToUnits.put(nameParts[0], unit);
191469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                } else if (nameParts.length == 2) {
191569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    unitsToPerStrings.put(unit, Pair.of(nameParts[0], nameParts[1]));
191669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                }
191769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
191869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
191969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Map<MeasureUnit, Pair<MeasureUnit, MeasureUnit>> unitsToPerUnits =
192069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new HashMap<MeasureUnit, Pair<MeasureUnit, MeasureUnit>>();
192169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (Map.Entry<MeasureUnit, Pair<String, String>> entry : unitsToPerStrings.entrySet()) {
192269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            Pair<String, String> perStrings = entry.getValue();
192369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            MeasureUnit unit = namesToUnits.get(perStrings.first);
192469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            MeasureUnit perUnit = namesToUnits.get(perStrings.second);
192569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            if (unit != null && perUnit != null) {
192669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                unitsToPerUnits.put(entry.getKey(), Pair.of(unit, perUnit));
192769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
192869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
192969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        return unitsToPerUnits;
193069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
193131fc099bf012524568ddeffd7fd4c9326411156bPaul Duffin
193269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    // DO NOT DELETE THIS FUNCTION! It may appear as dead code, but we use this to generate code
193369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    // for MeasureFormat during the release process.
193469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    static void generateCXXHConstants(String thisVersion) {
193569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Map<String, MeasureUnit> seen = new HashMap<String, MeasureUnit>();
193669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println();
193769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TreeMap<String, List<MeasureUnit>> allUnits = getAllUnits();
193869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (Map.Entry<String, List<MeasureUnit>> entry : allUnits.entrySet()) {
193969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            String type = entry.getKey();
194069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            if (type.equals("currency")) {
194169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                continue;
194269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
194369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            for (MeasureUnit unit : entry.getValue()) {
194469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                String code = unit.getSubtype();
194569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                String name = toCamelCase(unit);
194669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                String javaName = toJAVAName(unit);
194769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                checkForDup(seen, name, unit);
194869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                if (isDraft(javaName)) {
194969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    System.out.println("#ifndef U_HIDE_DRAFT_API");
195069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                }
195169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                System.out.println("    /**");
195269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                System.out.println("     * Returns unit of " + type + ": " + code + ".");
195369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                System.out.println("     * Caller owns returned value and must free it.");
195469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                System.out.println("     * @param status ICU error code.");
195569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                if (isDraft(javaName)) {
195669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    System.out.println("     * @draft ICU " + getVersion(javaName, thisVersion));
195769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                } else {
195869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    System.out.println("     * @stable ICU " + getVersion(javaName, thisVersion));
195969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                }
196069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                System.out.println("     */");
196169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                System.out.printf("    static MeasureUnit *create%s(UErrorCode &status);\n\n", name);
196269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                if (isDraft(javaName)) {
196369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    System.out.println("#endif /* U_HIDE_DRAFT_API */");
196469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                }
196569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
19661c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        }
196769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
19681c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
196969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private static void checkForDup(
197069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            Map<String, MeasureUnit> seen, String name, MeasureUnit unit) {
197169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        if (seen.containsKey(name)) {
197269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            throw new RuntimeException("\nCollision!!" + unit + ", " + seen.get(name));
197369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        } else {
197469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            seen.put(name, unit);
197569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
197669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
197769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
197869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    // DO NOT DELETE THIS FUNCTION! It may appear as dead code, but we use this to generate code
197969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    // for MeasureFormat during the release process.
198069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    static void updateJAVAVersions(String thisVersion) {
198169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println();
198269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Map<String, MeasureUnit> seen = new HashMap<String, MeasureUnit>();
198369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TreeMap<String, List<MeasureUnit>> allUnits = getAllUnits();
198469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (Map.Entry<String, List<MeasureUnit>> entry : allUnits.entrySet()) {
198569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            String type = entry.getKey();
198669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            if (type.equals("currency")) {
198769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                continue;
198869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
198969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            for (MeasureUnit unit : entry.getValue()) {
199069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                String javaName = toJAVAName(unit);
199169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                checkForDup(seen, javaName, unit);
199269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                if (!JAVA_VERSION_MAP.containsKey(javaName)) {
199369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    System.out.printf("        {\"%s\", \"%s\"},\n", javaName, thisVersion);
199469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                }
199569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
19961c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        }
199769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
19981c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
199969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    static TreeMap<String, List<MeasureUnit>> getAllUnits() {
200069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TreeMap<String, List<MeasureUnit>> allUnits = new TreeMap<String, List<MeasureUnit>>();
200169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (String type : MeasureUnit.getAvailableTypes()) {
200269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            ArrayList<MeasureUnit> units = new ArrayList<MeasureUnit>(MeasureUnit.getAvailable(type));
200369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            Collections.sort(
200469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    units,
200569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    new Comparator<MeasureUnit>() {
200669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
2007f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                        @Override
200869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        public int compare(MeasureUnit o1, MeasureUnit o2) {
200969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            return o1.getSubtype().compareTo(o2.getSubtype());
201069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        }
20111c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
201269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    });
201369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            allUnits.put(type, units);
201469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
201569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        return allUnits;
201669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
20171c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
201869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    // DO NOT DELETE THIS FUNCTION! It may appear as dead code, but we use this to generate code
201969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    // for MeasureFormat during the release process.
202069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    static void generateCXXConstants() {
20211c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        System.out.println("");
202269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TreeMap<String, List<MeasureUnit>> allUnits = getAllUnits();
20231c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
202469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("static const int32_t gOffsets[] = {");
202569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        int index = 0;
202669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (Map.Entry<String, List<MeasureUnit>> entry : allUnits.entrySet()) {
202769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            System.out.printf("    %d,\n", index);
202869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            index += entry.getValue().size();
202969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
203069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.printf("    %d\n", index);
203169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("};");
203269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println();
203369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("static const int32_t gIndexes[] = {");
203469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        index = 0;
203569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (Map.Entry<String, List<MeasureUnit>> entry : allUnits.entrySet()) {
203669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            System.out.printf("    %d,\n", index);
203769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            if (!entry.getKey().equals("currency")) {
203869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                index += entry.getValue().size();
203969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
204069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
204169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.printf("    %d\n", index);
204269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("};");
204369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println();
204469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("// Must be sorted alphabetically.");
204569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("static const char * const gTypes[] = {");
204669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        boolean first = true;
204769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (Map.Entry<String, List<MeasureUnit>> entry : allUnits.entrySet()) {
204869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            if (!first) {
204969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                System.out.println(",");
205069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
205169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            System.out.print("    \"" + entry.getKey() + "\"");
205269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            first = false;
20531c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        }
205469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println();
205569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("};");
205669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println();
205769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("// Must be grouped by type and sorted alphabetically within each type.");
205869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("static const char * const gSubTypes[] = {");
205969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        first = true;
206069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        int offset = 0;
206169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        int typeIdx = 0;
206269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Map<MeasureUnit, Integer> measureUnitToOffset = new HashMap<MeasureUnit, Integer>();
206369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Map<MeasureUnit, Pair<Integer, Integer>> measureUnitToTypeSubType =
206469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                new HashMap<MeasureUnit, Pair<Integer, Integer>>();
206569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (Map.Entry<String, List<MeasureUnit>> entry : allUnits.entrySet()) {
206669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            int subTypeIdx = 0;
206769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            for (MeasureUnit unit : entry.getValue()) {
206869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                if (!first) {
206969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    System.out.println(",");
207069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                }
207169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                System.out.print("    \"" + unit.getSubtype() + "\"");
207269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                first = false;
207369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                measureUnitToOffset.put(unit, offset);
207469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                measureUnitToTypeSubType.put(unit, Pair.of(typeIdx, subTypeIdx));
207569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                offset++;
207669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                subTypeIdx++;
207769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
207869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            typeIdx++;
20791c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert        }
208069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println();
208169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("};");
208269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println();
20831c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
208469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // Build unit per unit offsets to corresponding type sub types sorted by
208569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // unit first and then per unit.
208669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TreeMap<OrderedPair<Integer, Integer>, Pair<Integer, Integer>> unitPerUnitOffsetsToTypeSubType
208769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                = new TreeMap<OrderedPair<Integer, Integer>, Pair<Integer, Integer>>();
208869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (Map.Entry<MeasureUnit, Pair<MeasureUnit, MeasureUnit>> entry
208969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                : getUnitsToPerParts().entrySet()) {
209069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            Pair<MeasureUnit, MeasureUnit> unitPerUnit = entry.getValue();
209169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            unitPerUnitOffsetsToTypeSubType.put(
209269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    OrderedPair.of(
209369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            measureUnitToOffset.get(unitPerUnit.first),
209469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            measureUnitToOffset.get(unitPerUnit.second)),
209569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    measureUnitToTypeSubType.get(entry.getKey()));
209669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
20971c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
209869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("// Must be sorted by first value and then second value.");
209969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("static int32_t unitPerUnitToSingleUnit[][4] = {");
210069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        first = true;
210169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (Map.Entry<OrderedPair<Integer, Integer>, Pair<Integer, Integer>> entry
210269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                : unitPerUnitOffsetsToTypeSubType.entrySet()) {
210369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            if (!first) {
210469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                System.out.println(",");
210569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
210669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            first = false;
210769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            OrderedPair<Integer, Integer> unitPerUnitOffsets = entry.getKey();
210869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            Pair<Integer, Integer> typeSubType = entry.getValue();
210969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            System.out.printf("        {%d, %d, %d, %d}",
211069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    unitPerUnitOffsets.first,
211169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    unitPerUnitOffsets.second,
211269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    typeSubType.first,
211369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    typeSubType.second);
211469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
211569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println();
211669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("};");
211769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println();
21181c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
211969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Map<String, MeasureUnit> seen = new HashMap<String, MeasureUnit>();
212069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (Map.Entry<String, List<MeasureUnit>> entry : allUnits.entrySet()) {
21211c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
212269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            String type = entry.getKey();
212369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            if (type.equals("currency")) {
212469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                continue;
212569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
212669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            for (MeasureUnit unit : entry.getValue()) {
212769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                String name = toCamelCase(unit);
212869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                Pair<Integer, Integer> typeSubType = measureUnitToTypeSubType.get(unit);
212969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                if (typeSubType == null) {
213069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    throw new IllegalStateException();
213169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                }
213269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                checkForDup(seen, name, unit);
213369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                System.out.printf("MeasureUnit *MeasureUnit::create%s(UErrorCode &status) {\n", name);
213469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                System.out.printf("    return MeasureUnit::create(%d, %d, status);\n",
213569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        typeSubType.first, typeSubType.second);
213669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                System.out.println("}");
21371c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                System.out.println();
213869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
213969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
214069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
214169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
214269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private static String toCamelCase(MeasureUnit unit) {
214369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        StringBuilder result = new StringBuilder();
214469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        boolean caps = true;
214569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String code = unit.getSubtype();
214669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        int len = code.length();
214769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (int i = 0; i < len; i++) {
214869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            char ch = code.charAt(i);
214969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            if (ch == '-') {
215069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                caps = true;
215169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            } else if (caps) {
215269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                result.append(Character.toUpperCase(ch));
215369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                caps = false;
215469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            } else {
215569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                result.append(ch);
215669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
215769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
215869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        return result.toString();
215969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
21601c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
216169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    static boolean isTypeHidden(String type) {
216269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        return "currency".equals(type);
216369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
21641c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
216569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    // DO NOT DELETE THIS FUNCTION! It may appear as dead code, but we use this to generate code
216669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    // for MeasureFormat during the release process.
216769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    static void generateBackwardCompatibilityTest(String version) {
216869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Map<String, MeasureUnit> seen = new HashMap<String, MeasureUnit>();
216969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println();
217069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.printf("    public void TestCompatible%s() {\n", version.replace(".", "_"));
217169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("        MeasureUnit[] units = {");
217269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TreeMap<String, List<MeasureUnit>> allUnits = getAllUnits();
217369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        int count = 0;
217469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (Map.Entry<String, List<MeasureUnit>> entry : allUnits.entrySet()) {
217569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            if (isTypeHidden(entry.getKey())) {
217669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                continue;
217769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
217869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            for (MeasureUnit unit : entry.getValue()) {
217969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                String javaName = toJAVAName(unit);
218069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                checkForDup(seen, javaName, unit);
218169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                System.out.printf("                MeasureUnit.%s,\n", javaName);
218269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                count++;
218369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
218469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
218569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("        };");
218669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.printf("        assertEquals(\"\",  %d, units.length);\n", count);
218769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("    }");
218869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
21891c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
219069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    // DO NOT DELETE THIS FUNCTION! It may appear as dead code, but we use this to generate code
219169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    // for MeasureFormat during the release process.
219269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    static void generateCXXBackwardCompatibilityTest(String version) {
219369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println();
219469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Map<String, MeasureUnit> seen = new HashMap<String, MeasureUnit>();
219569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.printf("void MeasureFormatTest::TestCompatible%s() {\n", version.replace(".", "_"));
219669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("    UErrorCode status = U_ZERO_ERROR;");
219769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("    LocalPointer<MeasureUnit> measureUnit;");
219869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TreeMap<String, List<MeasureUnit>> allUnits = getAllUnits();
219969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (Map.Entry<String, List<MeasureUnit>> entry : allUnits.entrySet()) {
220069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            if (isTypeHidden(entry.getKey())) {
220169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                continue;
220269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
220369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            for (MeasureUnit unit : entry.getValue()) {
220469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                String camelCase = toCamelCase(unit);
220569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                checkForDup(seen, camelCase, unit);
220669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                System.out.printf("    measureUnit.adoptInstead(MeasureUnit::create%s(status));\n", camelCase);
220769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
220869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
220969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("    assertSuccess(\"\", status);");
221069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("}");
221169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
22121c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
221369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    static String toJAVAName(MeasureUnit unit) {
221469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String code = unit.getSubtype();
221569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String type = unit.getType();
221669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String name = code.toUpperCase(Locale.ENGLISH).replace("-", "_");
221769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        if (type.equals("angle")) {
221869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            if (code.equals("minute") || code.equals("second")) {
221969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                name = "ARC_" + name;
222069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
222169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
222269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        return name;
222369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
222469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
222569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    // DO NOT DELETE THIS FUNCTION! It may appear as dead code, but we use this to generate code
222669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    // for MeasureFormat during the release process.
222769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    static void generateConstants(String thisVersion) {
222869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println();
222969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        Map<String, MeasureUnit> seen = new HashMap<String, MeasureUnit>();
223069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        TreeMap<String, List<MeasureUnit>> allUnits = getAllUnits();
223169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (Map.Entry<String, List<MeasureUnit>> entry : allUnits.entrySet()) {
223269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            String type = entry.getKey();
223369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            if (isTypeHidden(type)) {
223469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                continue;
223569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
223669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            for (MeasureUnit unit : entry.getValue()) {
223769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                String name = toJAVAName(unit);
223869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                String code = unit.getSubtype();
223969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                checkForDup(seen, name, unit);
224069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                System.out.println("    /**");
224169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                System.out.println("     * Constant for unit of " + type +
224269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        ": " +
224369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                        code);
224469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                // Special case JAVA had old constants for time from before.
224569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                if ("duration".equals(type) && TIME_CODES.contains(code)) {
224669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    System.out.println("     * @stable ICU 4.0");
224769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                }
224869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                else if (isDraft(name)) {
224969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    System.out.println("     * @draft ICU " + getVersion(name, thisVersion));
225069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    System.out.println("     * @provisional This API might change or be removed in a future release.");
225169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                } else {
225269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    System.out.println("     * @stable ICU " + getVersion(name, thisVersion));
225369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                }
225469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                System.out.println("    */");
225569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                if ("duration".equals(type) && TIME_CODES.contains(code)) {
225669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    System.out.println("    public static final TimeUnit " + name + " = (TimeUnit) MeasureUnit.internalGetInstance(\"" +
225769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            type +
225869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            "\", \"" +
225969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            code +
226069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            "\");");
226169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                } else {
226269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    System.out.println("    public static final MeasureUnit " + name + " = MeasureUnit.internalGetInstance(\"" +
226369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            type +
226469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            "\", \"" +
226569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            code +
226669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            "\");");
226769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                }
226869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                System.out.println();
226969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            }
227069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
227169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("    private static HashMap<Pair<MeasureUnit, MeasureUnit>, MeasureUnit>unitPerUnitToSingleUnit =");
227269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("            new HashMap<Pair<MeasureUnit, MeasureUnit>, MeasureUnit>();");
227369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println();
227469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("    static {");
227569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        for (Map.Entry<MeasureUnit, Pair<MeasureUnit, MeasureUnit>> unitPerUnitEntry
227669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                : getUnitsToPerParts().entrySet()) {
227769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            Pair<MeasureUnit, MeasureUnit> unitPerUnit = unitPerUnitEntry.getValue();
22781c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert            System.out.println("        unitPerUnitToSingleUnit.put(Pair.<MeasureUnit, MeasureUnit>of(MeasureUnit." + toJAVAName(unitPerUnit.first) + ", MeasureUnit." + toJAVAName(unitPerUnit.second) + "), MeasureUnit." + toJAVAName(unitPerUnitEntry.getKey()) + ");");
227969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
228069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        System.out.println("    }");
228169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
22821c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
228369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private static String getVersion(String javaName, String thisVersion) {
228469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String version = JAVA_VERSION_MAP.get(javaName);
228569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        if (version == null) {
228669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            return thisVersion;
228769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
228869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        return version;
228969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
229069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
229169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private static boolean isDraft(String javaName) {
229269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        String version = JAVA_VERSION_MAP.get(javaName);
229369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        if (version == null) {
229469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            return true;
229569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
229669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        return DRAFT_VERSION_SET.contains(version);
229769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
229869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
229969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    public <T extends Serializable> void checkStreamingEquality(T item) {
230069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        try {
230169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin          ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
230269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin          ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteOut);
230369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin          objectOutputStream.writeObject(item);
230469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin          objectOutputStream.close();
230569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin          byte[] contents = byteOut.toByteArray();
230669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin          logln("bytes: " + contents.length + "; " + item.getClass() + ": " + showBytes(contents));
230769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin          ByteArrayInputStream byteIn = new ByteArrayInputStream(contents);
230869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin          ObjectInputStream objectInputStream = new ObjectInputStream(byteIn);
230969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin          Object obj = objectInputStream.readObject();
231069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin          assertEquals("Streamed Object equals ", item, obj);
231169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        } catch (IOException e) {
231269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin          e.printStackTrace();
231369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin          assertNull("Test Serialization " + item.getClass(), e);
231469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        } catch (ClassNotFoundException e) {
231569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin          assertNull("Test Serialization " + item.getClass(), e);
231669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
231769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin      }
231869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin
231969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    /**
232069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin     * @param contents
232169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin     * @return
232269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin     */
232369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private String showBytes(byte[] contents) {
232469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin      StringBuilder b = new StringBuilder('[');
232569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin      for (int i = 0; i < contents.length; ++i) {
232669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        int item = contents[i] & 0xFF;
232769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        if (item >= 0x20 && item <= 0x7F) {
232869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin          b.append((char) item);
232969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        } else {
233069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin          b.append('(').append(Utility.hex(item, 2)).append(')');
233169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
233269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin      }
233369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin      return b.append(']').toString();
233469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
23351c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
233669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    private void verifyEqualsHashCode(Object o, Object eq, Object ne) {
233769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("verifyEqualsHashCodeSame", o, o);
233869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("verifyEqualsHashCodeEq", o, eq);
233969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertNotEquals("verifyEqualsHashCodeNe", o, ne);
234069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertNotEquals("verifyEqualsHashCodeEqTrans", eq, ne);
234169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertEquals("verifyEqualsHashCodeHashEq", o.hashCode(), eq.hashCode());
23421c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
234369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // May be a flaky test, but generally should be true.
234469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        // May need to comment this out later.
234569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        assertNotEquals("verifyEqualsHashCodeHashNe", o.hashCode(), ne.hashCode());
234669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
23471c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
2348f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    public static class MeasureUnitHandler implements SerializableTestUtility.Handler
234969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    {
2350f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        @Override
235169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        public Object[] getTestObjects()
235269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {
235369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            MeasureUnit items[] = {
235469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    MeasureUnit.CELSIUS,
23551c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert                    Currency.getInstance("EUR")
235669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            };
235769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            return items;
235869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
2359f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        @Override
236069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        public boolean hasSameBehavior(Object a, Object b)
236169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {
236269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            MeasureUnit a1 = (MeasureUnit) a;
236369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            MeasureUnit b1 = (MeasureUnit) b;
236469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            return a1.getType().equals(b1.getType())
236569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    && a1.getSubtype().equals(b1.getSubtype());
236669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
236769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
23681c8a530973739aafa823d758240d2cd5dad96fe3Fredrik Roubert
2369f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    public static class MeasureFormatHandler  implements SerializableTestUtility.Handler
237069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    {
2371f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        @Override
237269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        public Object[] getTestObjects()
237369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {
237469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            MeasureFormat items[] = {
237569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    MeasureFormat.getInstance(ULocale.FRANCE, FormatWidth.SHORT),
237669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    MeasureFormat.getInstance(
237769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            ULocale.FRANCE,
237869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            FormatWidth.WIDE,
237969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                            NumberFormat.getIntegerInstance(ULocale.CANADA_FRENCH)),
238069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            };
238169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            return items;
238269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
2383f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        @Override
238469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        public boolean hasSameBehavior(Object a, Object b)
238569ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        {
238669ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            MeasureFormat a1 = (MeasureFormat) a;
238769ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            MeasureFormat b1 = (MeasureFormat) b;
238869ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin            return a1.getLocale().equals(b1.getLocale())
238969ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    && a1.getWidth().equals(b1.getWidth())
239069ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    && a1.getNumberFormat().equals(b1.getNumberFormat())
239169ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin                    ;
239269ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin        }
239369ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin    }
239469ef1baa641465e7474f8646903b8f5fc3125534Paul Duffin}
2395