MeasureUnitTest.java revision f86f25d102340da66b9c7cb6b2d5ecdc0de43ecf
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