This is an automated email from the ASF dual-hosted git repository. desruisseaux pushed a commit to branch geoapi-4.0 in repository https://gitbox.apache.org/repos/asf/sis.git
commit c0a2f96037c0ef8cb4723f32e1eea891fdd3c025 Merge: 55c2c40 3c7b394 Author: Martin Desruisseaux <[email protected]> AuthorDate: Wed Mar 30 13:57:50 2022 +0200 Merge branch 'feat/acceleration-units' into geoapi-4.0. .../main/java/org/apache/sis/measure/Scalar.java | 15 +++- .../java/org/apache/sis/measure/UnitRegistry.java | 14 +++- .../java/org/apache/sis/measure/UnitServices.java | 1 + .../main/java/org/apache/sis/measure/Units.java | 78 ++++++++++++++----- .../java/org/apache/sis/measure/package-info.java | 1 + .../org/apache/sis/measure/UnitNames.properties | 2 + .../org/apache/sis/measure/UnitNames_fr.properties | 3 +- .../org/apache/sis/measure/UnitFormatTest.java | 5 +- .../java/org/apache/sis/measure/UnitsTest.java | 87 ++++++++++++---------- 9 files changed, 144 insertions(+), 62 deletions(-) diff --cc core/sis-utility/src/main/java/org/apache/sis/measure/Scalar.java index 5a784c3,c0b360d..19a8539 --- a/core/sis-utility/src/main/java/org/apache/sis/measure/Scalar.java +++ b/core/sis-utility/src/main/java/org/apache/sis/measure/Scalar.java @@@ -32,7 -33,7 +32,8 @@@ import org.apache.sis.internal.util.Num * Instances of this class are unmodifiable. * * @author Martin Desruisseaux (Geomatys) -- * @version 1.1 ++ * @author Alexis Manin (Geomatys) ++ * @version 1.2 * * @param <Q> the concrete subtype. * @@@ -456,6 -457,6 +457,18 @@@ class Scalar<Q extends Quantity<Q>> ext } } ++ static final class Acceleration extends Scalar<javax.measure.quantity.Acceleration> ++ implements javax.measure.quantity.Acceleration ++ { ++ private static final long serialVersionUID = 8041442665100572880L; ++ Acceleration(double value, Unit<javax.measure.quantity.Acceleration> unit) {super(value, unit);} ++ ++ @Override ++ Quantity<javax.measure.quantity.Acceleration> create(double value, Unit<javax.measure.quantity.Acceleration> unit) { ++ return new Acceleration(value, unit); ++ } ++ } ++ static final class Mass extends Scalar<javax.measure.quantity.Mass> implements javax.measure.quantity.Mass { diff --cc core/sis-utility/src/main/java/org/apache/sis/measure/UnitRegistry.java index c475f7d,c475f7d..d80df4a --- a/core/sis-utility/src/main/java/org/apache/sis/measure/UnitRegistry.java +++ b/core/sis-utility/src/main/java/org/apache/sis/measure/UnitRegistry.java @@@ -37,7 -37,7 +37,7 @@@ import org.apache.sis.util.collection.W * rather uses the static methods directly since we define all units in terms of SI. * * @author Martin Desruisseaux (Geomatys) -- * @version 1.0 ++ * @version 1.2 * @since 0.8 * @module */ @@@ -51,6 -51,6 +51,7 @@@ final class UnitRegistry implements Sys * A bitmask specifying that the unit symbol can be combined with a SI prefix. * This is usually combined only with {@link #SI}, not {@link #ACCEPTED} except * the litre unit (cL, mL, etc) and bel (for creating the decibel unit). ++ * The gal unit can also be prefixed, but this unit is deprecated by ISO 80000-3:2006. */ static final byte PREFIXABLE = 1; @@@ -66,14 -66,14 +67,21 @@@ static final byte ACCEPTED = 4; /** ++ * Identifies units defined by the centimeter–gram–second (CGS) system. ++ * ++ * @since 1.2 ++ */ ++ static final byte CGS = 8; ++ ++ /** * Identifies units defined for use in British imperial system. */ -- static final byte IMPERIAL = 8; ++ static final byte IMPERIAL = 16; /** * Identifies units defined in another system than the above. */ -- static final byte OTHER = 16; ++ static final byte OTHER = 32; /** * All {@link UnitDimension}, {@link SystemUnit} or {@link ConventionalUnit} that are hard-coded in Apache SIS. diff --cc core/sis-utility/src/main/java/org/apache/sis/measure/UnitServices.java index 0d03c16,0d03c16..50aa386 --- a/core/sis-utility/src/main/java/org/apache/sis/measure/UnitServices.java +++ b/core/sis-utility/src/main/java/org/apache/sis/measure/UnitServices.java @@@ -65,6 -65,6 +65,7 @@@ public class UnitServices extends Servi new UnitRegistry("SI", UnitRegistry.SI), new UnitRegistry("SI + accepted", UnitRegistry.SI | UnitRegistry.ACCEPTED), new UnitRegistry("Imperial", UnitRegistry.IMPERIAL), ++ new UnitRegistry("CGS", UnitRegistry.CGS), new UnitRegistry("SI + other", -1) // Must be last. }; } diff --cc core/sis-utility/src/main/java/org/apache/sis/measure/Units.java index a86e06f,711ef44..b7cde1c --- a/core/sis-utility/src/main/java/org/apache/sis/measure/Units.java +++ b/core/sis-utility/src/main/java/org/apache/sis/measure/Units.java @@@ -32,6 -32,6 +32,7 @@@ import org.apache.sis.internal.util.Con import static org.apache.sis.measure.UnitRegistry.SI; import static org.apache.sis.measure.UnitRegistry.ACCEPTED; ++import static org.apache.sis.measure.UnitRegistry.CGS; import static org.apache.sis.measure.UnitRegistry.IMPERIAL; import static org.apache.sis.measure.UnitRegistry.OTHER; import static org.apache.sis.measure.UnitRegistry.PREFIXABLE; @@@ -74,7 -74,7 +75,8 @@@ * </table> * * @author Martin Desruisseaux (IRD, Geomatys) -- * @version 1.1 ++ * @author Alexis Manin (Geomatys) ++ * @version 1.2 * @since 0.3 * @module */ @@@ -653,6 -653,6 +655,40 @@@ public final class Units extends Stati public static final Unit<Speed> KILOMETRES_PER_HOUR; /** ++ * The SI derived unit for acceleration (m/s²). ++ * The unlocalized name is “metres per second squared”. ++ * ++ * <div class="note"> ++ * <table class="compact" style="margin-left:30px; line-height:1.25"> ++ * <caption>Related units</caption> ++ * <tr><td>SI acceleration units:</td> <td style="word-spacing:1em"><u><b>{@code METRES_PER_SECOND_SQUARED}</b></u>.</td></tr> ++ * <tr><td>In other systems:</td> <td style="word-spacing:1em">{@link #GAL}.</td></tr> ++ * <tr><td>Components:</td> <td style="word-spacing:0.5em">{@link #METRES_PER_SECOND} ∕ {@link #SECOND}</td></tr> ++ * </table></div> ++ * ++ * @since 1.2 ++ */ ++ public static final Unit<Acceleration> METRES_PER_SECOND_SQUARED; ++ ++ /** ++ * Unit of measurement defined as 1/100 metres per second squared (1 cm/s²). ++ * This is a CGS unit (not a SI unit) used in geodesy and geophysics to express acceleration due to gravity. ++ * The {@linkplain ConventionalUnit#getSystemUnit() system unit} is {@link #METRES_PER_SECOND_SQUARED}, ++ * the symbol is "Gal" (upper-case first letter) and the unlocalized name is “gal” (lower-case letter). ++ * ++ * <div class="note"> ++ * <table class="compact" style="margin-left:30px; line-height:1.25"> ++ * <caption>Related units</caption> ++ * <tr><td>SI acceleration units:</td> <td style="word-spacing:1em"><u><b>{@link #METRES_PER_SECOND_SQUARED}</b></u>.</td></tr> ++ * <tr><td>In other systems:</td> <td style="word-spacing:1em">{@code GAL}.</td></tr> ++ * <tr><td>Components:</td> <td style="word-spacing:0.5em">{@link #CENTIMETRE} ∕ {@link #SECOND}²</td></tr> ++ * </table></div> ++ * ++ * @since 1.2 ++ */ ++ public static final Unit<Acceleration> GAL; ++ ++ /** * The SI derived unit for pressure (Pa). * One pascal is equal to 1 N/m². * Pressures are often used in {@linkplain org.apache.sis.referencing.crs.DefaultParametricCRS parametric CRS} @@@ -1141,6 -1151,6 +1177,7 @@@ final UnitDimension frequency = time.pow(-1); final UnitDimension area = length.pow(2); final UnitDimension speed = length.divide(time); ++ final UnitDimension acceleration = speed.divide(time); final UnitDimension force = mass.multiply(speed).divide(time); final UnitDimension energy = force.multiply(length); final UnitDimension power = energy.divide(time); @@@ -1152,16 -1162,19 +1189,17 @@@ /* * Base, derived or alternate units that we need to reuse more than once in this static initializer. */ - final SystemUnit<Length> m = add(Length.class, Scalar.Length::new, length, "m", (byte) (SI | PREFIXABLE), Constants.EPSG_METRE); - final SystemUnit<Area> m2 = add(Area.class, Scalar.Area::new, area, "m²", (byte) (SI | PREFIXABLE), (short) 0); - final SystemUnit<Volume> m3 = add(Volume.class, Scalar.Volume::new, length.pow(3), "m³", (byte) (SI | PREFIXABLE), (short) 0); - final SystemUnit<Time> s = add(Time.class, Scalar.Time::new, time, "s", (byte) (SI | PREFIXABLE), (short) 1040); - final SystemUnit<Temperature> K = add(Temperature.class, Scalar.Temperature.FACTORY, temperature, "K", (byte) (SI | PREFIXABLE), (short) 0); - final SystemUnit<Speed> mps = add(Speed.class, Scalar.Speed::new, speed, "m∕s", (byte) (SI | PREFIXABLE), (short) 1026); - final SystemUnit<Pressure> Pa = add(Pressure.class, Scalar.Pressure::new, pressure, "Pa", (byte) (SI | PREFIXABLE), (short) 0); - final SystemUnit<Angle> rad = add(Angle.class, Scalar.Angle::new, dimensionless, "rad", (byte) (SI | PREFIXABLE), (short) 9101); - final SystemUnit<Dimensionless> one = add(Dimensionless.class, Scalar.Dimensionless::new, dimensionless, "", SI, (short) 9201); - final SystemUnit<Mass> kg = add(Mass.class, Scalar.Mass::new, mass, "kg", SI, (short) 0); + final SystemUnit<Length> m = add(Length.class, Scalar.Length::new, length, "m", (byte) (SI | PREFIXABLE), Constants.EPSG_METRE); + final SystemUnit<Area> m2 = add(Area.class, Scalar.Area::new, area, "m²", (byte) (SI | PREFIXABLE), (short) 0); + final SystemUnit<Volume> m3 = add(Volume.class, Scalar.Volume::new, length.pow(3), "m³", (byte) (SI | PREFIXABLE), (short) 0); + final SystemUnit<Time> s = add(Time.class, Scalar.Time::new, time, "s", (byte) (SI | PREFIXABLE), (short) 1040); + final SystemUnit<Temperature> K = add(Temperature.class, Scalar.Temperature.FACTORY, temperature, "K", (byte) (SI | PREFIXABLE), (short) 0); + final SystemUnit<Speed> mps = add(Speed.class, Scalar.Speed::new, speed, "m∕s", (byte) (SI | PREFIXABLE), (short) 1026); ++ final SystemUnit<Acceleration> mps2 = add(Acceleration.class, Scalar.Acceleration::new, acceleration, "m∕s²", (byte) (SI | PREFIXABLE), (short) 0); + final SystemUnit<Pressure> Pa = add(Pressure.class, Scalar.Pressure::new, pressure, "Pa", (byte) (SI | PREFIXABLE), (short) 0); + final SystemUnit<Angle> rad = add(Angle.class, Scalar.Angle::new, dimensionless, "rad", (byte) (SI | PREFIXABLE), (short) 9101); + final SystemUnit<Dimensionless> one = add(Dimensionless.class, Scalar.Dimensionless::new, dimensionless, "", SI, (short) 9201); + final SystemUnit<Mass> kg = add(Mass.class, Scalar.Mass::new, mass, "kg", SI, (short) 0); - final SystemUnit<Acceleration> mps2 = add(Acceleration.class, Scalar.Acceleration::new, acceleration, "m∕s²", (byte) (SI | PREFIXABLE), (short) 0); /* * All SI prefix to be used below, with additional converters to be used more than once. */ @@@ -1213,19 -1226,19 +1251,22 @@@ WEEK = add(s, LinearConverter.scale( 7*24*60*60, 1), "wk", OTHER, (short) 0); TROPICAL_YEAR = add(s, LinearConverter.scale(31556925445.0, 1000), "a", OTHER, (short) 1029); /* -- * All Unit<Speed>, Unit<AngularVelocity> and Unit<ScaleRateOfChange>. -- * The 'unityPerSecond' unit is not added to the registry because it is specific to the EPSG database, ++ * All Unit<Speed>, Unit<Acceleration>, Unit<AngularVelocity> and Unit<ScaleRateOfChange>. ++ * The `unityPerSecond` unit is not added to the registry because it is specific to the EPSG database, * has no clear symbol and is easy to confuse with Hertz. We create that unit only for allowing us to * create the "ppm/a" units. */ final SystemUnit<ScaleRateOfChange> unityPerSecond; unityPerSecond = new SystemUnit<>(ScaleRateOfChange.class, frequency, null, OTHER, (short) 1036, null); unityPerSecond.related(1); -- mps.related(1); -- METRES_PER_SECOND = mps; -- KILOMETRES_PER_HOUR = add(mps, LinearConverter.scale(10, 36), "km∕h", ACCEPTED, (short) 0); -- RADIANS_PER_SECOND = add(AngularVelocity.class, null, frequency, "rad∕s", SI, (short) 1035); -- add(unityPerSecond, LinearConverter.scale(1, 31556925445E6), "ppm∕a", OTHER, (short) 1030); ++ mps .related(1); ++ mps2.related(1); ++ METRES_PER_SECOND = mps; ++ METRES_PER_SECOND_SQUARED = mps2; ++ KILOMETRES_PER_HOUR = add(mps, LinearConverter.scale(10, 36), "km∕h", ACCEPTED, (short) 0); ++ RADIANS_PER_SECOND = add(AngularVelocity.class, null, frequency, "rad∕s", SI, (short) 1035); ++ GAL = add(mps2, centi, "Gal", (byte) (CGS | PREFIXABLE | ACCEPTED), (short) 0); ++ add(unityPerSecond, LinearConverter.scale(1, 31556925445E6), "ppm∕a", OTHER, (short) 1030); /* * All Unit<Pressure>. */ @@@ -1299,6 -1319,6 +1340,7 @@@ UnitRegistry.alias(CELSIUS, "Cel"); UnitRegistry.alias(FAHRENHEIT, "℉"); UnitRegistry.alias(GRAD, "gon"); ++ UnitRegistry.alias(GAL, "cm∕s²"); UnitRegistry.alias(HECTARE, "hm²"); UnitRegistry.alias(LITRE, "l"); UnitRegistry.alias(LITRE, "ℓ"); diff --cc core/sis-utility/src/main/java/org/apache/sis/measure/package-info.java index f6f01c1,f6f01c1..d0aaf2a --- a/core/sis-utility/src/main/java/org/apache/sis/measure/package-info.java +++ b/core/sis-utility/src/main/java/org/apache/sis/measure/package-info.java @@@ -96,6 -96,6 +96,7 @@@ * are also recognized at parsing time.</p> * * @author Martin Desruisseaux (MPO, IRD, Geomatys) ++ * @author Alexis Manin (Geomatys) * @version 1.2 * @since 0.3 * @module diff --cc core/sis-utility/src/main/resources/org/apache/sis/measure/UnitNames.properties index a196184,2720d65..97fc561 --- a/core/sis-utility/src/main/resources/org/apache/sis/measure/UnitNames.properties +++ b/core/sis-utility/src/main/resources/org/apache/sis/measure/UnitNames.properties @@@ -15,6 -15,6 +15,7 @@@ ft=foo ftCla=Clarke\u2019s foot ftUS=US survey foot g=gram ++Gal=gal grad=grad h=hour ha=hectare @@@ -35,6 -35,6 +36,7 @@@ m=metr m�=square metre m�=cubic metre m\u2215s=metres per second ++m\u2215s�=metres per second squared mi=statute mile min=minute mm=millimetre diff --cc core/sis-utility/src/main/resources/org/apache/sis/measure/UnitNames_fr.properties index f691c8a,2343335..b61669f --- a/core/sis-utility/src/main/resources/org/apache/sis/measure/UnitNames_fr.properties +++ b/core/sis-utility/src/main/resources/org/apache/sis/measure/UnitNames_fr.properties @@@ -21,6 -21,6 +21,7 @@@ m=m�tr m�=m�tre carr� m�=m�tre cube m\u2215s=m�tres par seconde ++m\u2215s�=m�tres par seconde au carr� mi=mille terrestre international mm=millim�tre ms=milliseconde @@@ -32,6 -32,7 +33,6 @@@ sr=st�radia unity=unit� wk=semaine %=pourcent - �=degr�e + �=degr� \u2032=arc-minute \u2033=arc-seconde -m\u2215s�=m�tres par seconde au carr� diff --cc core/sis-utility/src/test/java/org/apache/sis/measure/UnitFormatTest.java index 3a7590e,53c1cf1..e5a88a3 --- a/core/sis-utility/src/test/java/org/apache/sis/measure/UnitFormatTest.java +++ b/core/sis-utility/src/test/java/org/apache/sis/measure/UnitFormatTest.java @@@ -38,7 -38,7 +38,8 @@@ import static org.junit.Assert.* * Tests the {@link UnitFormat} class. * * @author Martin Desruisseaux (Geomatys) -- * @version 1.0 ++ * @author Alexis Manin (Geomatys) ++ * @version 1.2 * @since 0.8 * @module */ @@@ -127,6 -127,8 +128,8 @@@ public final strictfp class UnitFormatT verify(declared, "PSU", "", "psu", "practical salinity unit", Units.PSU); verify(declared, "PIXEL", "", "px", "pixel", Units.PIXEL); verify(declared, "DECIBEL", "", "dB", "decibel", Units.DECIBEL); - verify(declared, "GAL", "L∕T²", "gal", "gal", Units.GAL); - verify(declared, "METRES_PER_SECOND_SQUARED","L∕T²", "m∕s²", "metres per second squared", Units.METRES_PER_SECOND_SQUARED); ++ verify(declared, "GAL", "L∕T²", "Gal", "gal", Units.GAL); ++ verify(declared, "METRES_PER_SECOND_SQUARED", "L∕T²", "m∕s²", "metres per second squared", Units.METRES_PER_SECOND_SQUARED); assertTrue("Missing units in test:" + declared, declared.isEmpty()); } diff --cc core/sis-utility/src/test/java/org/apache/sis/measure/UnitsTest.java index c03fdeb,38be06e..81134e3 --- a/core/sis-utility/src/test/java/org/apache/sis/measure/UnitsTest.java +++ b/core/sis-utility/src/test/java/org/apache/sis/measure/UnitsTest.java @@@ -17,19 -17,9 +17,10 @@@ package org.apache.sis.measure; import javax.measure.Unit; ++import javax.measure.Quantity; + import javax.measure.quantity.*; -import javax.measure.IncommensurableException; import javax.measure.quantity.Angle; - import javax.measure.quantity.Area; - import javax.measure.quantity.Dimensionless; - import javax.measure.quantity.Length; - import javax.measure.quantity.LuminousFlux; - import javax.measure.quantity.LuminousIntensity; - import javax.measure.quantity.Mass; - import javax.measure.quantity.SolidAngle; - import javax.measure.quantity.Speed; - import javax.measure.quantity.Temperature; - import javax.measure.quantity.Time; - import javax.measure.quantity.Volume; +import javax.measure.IncommensurableException; import org.apache.sis.test.DependsOn; import org.apache.sis.test.TestCase; import org.junit.Test; @@@ -43,7 -33,7 +34,8 @@@ import static org.apache.sis.test.Asser * Test conversions using the units declared in {@link Units}. * * @author Martin Desruisseaux (Geomatys) -- * @version 1.0 ++ * @author Alexis Manin (Geomatys) ++ * @version 1.2 * @since 0.3 * @module */ @@@ -235,18 -226,19 +228,19 @@@ public final strictfp class UnitsTest e */ @Test public void testGetForQuantity() { - assertSame("Length", Units.METRE, Units.get(Length.class)); - assertSame("Mass", Units.KILOGRAM, Units.get(Mass.class)); - assertSame("Time", Units.SECOND, Units.get(Time.class)); - assertSame("Temperature", Units.KELVIN, Units.get(Temperature.class)); - assertSame("Area", Units.SQUARE_METRE, Units.get(Area.class)); - assertSame("Volume", Units.CUBIC_METRE, Units.get(Volume.class)); - assertSame("Speed", Units.METRES_PER_SECOND, Units.get(Speed.class)); - assertSame("LuminousIntensity", Units.CANDELA, Units.get(LuminousIntensity.class)); - assertSame("LuminousFlux", Units.LUMEN, Units.get(LuminousFlux.class)); - assertSame("SolidAngle", Units.STERADIAN, Units.get(SolidAngle.class)); - assertSame("Angle", Units.RADIAN, Units.get(Angle.class)); - assertSame("Dimensionless", Units.UNITY, Units.get(Dimensionless.class)); - assertSame("Length", Units.METRE, Units.get(Length.class)); - assertSame("Mass", Units.KILOGRAM, Units.get(Mass.class)); - assertSame("Time", Units.SECOND, Units.get(Time.class)); - assertSame("Temperature", Units.KELVIN, Units.get(Temperature.class)); - assertSame("Area", Units.SQUARE_METRE, Units.get(Area.class)); - assertSame("Volume", Units.CUBIC_METRE, Units.get(Volume.class)); - assertSame("Speed", Units.METRES_PER_SECOND, Units.get(Speed.class)); - assertSame("LuminousIntensity", Units.CANDELA, Units.get(LuminousIntensity.class)); - assertSame("LuminousFlux", Units.LUMEN, Units.get(LuminousFlux.class)); - assertSame("SolidAngle", Units.STERADIAN, Units.get(SolidAngle.class)); - assertSame("Angle", Units.RADIAN, Units.get(Angle.class)); - assertSame("Dimensionless", Units.UNITY, Units.get(Dimensionless.class)); - assertSame("Acceleration", METRES_PER_SECOND_SQUARED, Units.get(Acceleration.class)); ++ verifyGetFromQuantity(Length.class, METRE); ++ verifyGetFromQuantity(Mass.class, KILOGRAM); ++ verifyGetFromQuantity(Time.class, SECOND); ++ verifyGetFromQuantity(Temperature.class, KELVIN); ++ verifyGetFromQuantity(Area.class, SQUARE_METRE); ++ verifyGetFromQuantity(Volume.class, CUBIC_METRE); ++ verifyGetFromQuantity(Speed.class, METRES_PER_SECOND); ++ verifyGetFromQuantity(LuminousIntensity.class, CANDELA); ++ verifyGetFromQuantity(LuminousFlux.class, LUMEN); ++ verifyGetFromQuantity(SolidAngle.class, STERADIAN); ++ verifyGetFromQuantity(Angle.class, RADIAN); ++ verifyGetFromQuantity(Dimensionless.class, UNITY); ++ verifyGetFromQuantity(Acceleration.class, METRES_PER_SECOND_SQUARED); } /** @@@ -254,18 -246,19 +248,33 @@@ */ @Test public void testGetForDimension() { - assertSame("Length", Units.METRE, Units.get(Units.METRE .getDimension())); - assertSame("Mass", Units.KILOGRAM, Units.get(Units.KILOGRAM .getDimension())); - assertSame("Time", Units.SECOND, Units.get(Units.SECOND .getDimension())); - assertSame("Temperature", Units.KELVIN, Units.get(Units.KELVIN .getDimension())); - assertSame("Area", Units.SQUARE_METRE, Units.get(Units.SQUARE_METRE .getDimension())); - assertSame("Volume", Units.CUBIC_METRE, Units.get(Units.CUBIC_METRE .getDimension())); - assertSame("Speed", Units.METRES_PER_SECOND, Units.get(Units.METRES_PER_SECOND.getDimension())); - assertSame("LuminousIntensity", Units.CANDELA, Units.get(Units.CANDELA .getDimension())); - assertSame("LuminousFlux", Units.CANDELA, Units.get(Units.LUMEN .getDimension())); // Because lumen is candela divided by a dimensionless unit. - assertSame("SolidAngle", Units.UNITY, Units.get(Units.STERADIAN .getDimension())); - assertSame("Angle", Units.UNITY, Units.get(Units.RADIAN .getDimension())); - assertSame("Dimensionless", Units.UNITY, Units.get(Units.UNITY .getDimension())); - assertSame("Length", Units.METRE, Units.get(Units.METRE .getDimension())); - assertSame("Mass", Units.KILOGRAM, Units.get(Units.KILOGRAM .getDimension())); - assertSame("Time", Units.SECOND, Units.get(Units.SECOND .getDimension())); - assertSame("Temperature", Units.KELVIN, Units.get(Units.KELVIN .getDimension())); - assertSame("Area", Units.SQUARE_METRE, Units.get(Units.SQUARE_METRE .getDimension())); - assertSame("Volume", Units.CUBIC_METRE, Units.get(Units.CUBIC_METRE .getDimension())); - assertSame("Speed", Units.METRES_PER_SECOND, Units.get(Units.METRES_PER_SECOND .getDimension())); - assertSame("LuminousIntensity", Units.CANDELA, Units.get(Units.CANDELA .getDimension())); - assertSame("LuminousFlux", Units.CANDELA, Units.get(Units.LUMEN .getDimension())); // Because lumen is candela divided by a dimensionless unit. - assertSame("SolidAngle", Units.UNITY, Units.get(Units.STERADIAN .getDimension())); - assertSame("Angle", Units.UNITY, Units.get(Units.RADIAN .getDimension())); - assertSame("Dimensionless", Units.UNITY, Units.get(Units.UNITY .getDimension())); - assertSame("Acceleration", METRES_PER_SECOND_SQUARED, Units.get(METRES_PER_SECOND_SQUARED.getDimension())); ++ verifyGetFromDimension(Length.class, METRE, METRE); ++ verifyGetFromDimension(Mass.class, KILOGRAM, KILOGRAM); ++ verifyGetFromDimension(Time.class, SECOND, SECOND); ++ verifyGetFromDimension(Temperature.class, KELVIN, KELVIN); ++ verifyGetFromDimension(Area.class, SQUARE_METRE, SQUARE_METRE); ++ verifyGetFromDimension(Volume.class, CUBIC_METRE, CUBIC_METRE); ++ verifyGetFromDimension(Speed.class, METRES_PER_SECOND, METRES_PER_SECOND); ++ verifyGetFromDimension(LuminousIntensity.class, CANDELA, CANDELA); ++ verifyGetFromDimension(LuminousFlux.class, CANDELA, LUMEN); // Because lumen is candela divided by a dimensionless unit. ++ verifyGetFromDimension(SolidAngle.class, UNITY, STERADIAN); ++ verifyGetFromDimension(Angle.class, UNITY, RADIAN); ++ verifyGetFromDimension(Dimensionless.class, UNITY, UNITY); ++ verifyGetFromDimension(Acceleration.class, METRES_PER_SECOND_SQUARED, METRES_PER_SECOND_SQUARED); ++ } ++ ++ /** ++ * For a given {@code test} quantity class, verifies that {@link Units#get(Class)} gives the expected value. ++ */ ++ private static <Q extends Quantity<Q>> void verifyGetFromQuantity(final Class<Q> test, final Unit<Q> expected) { ++ assertSame(test.getSimpleName(), expected, Units.get(test)); ++ } ++ ++ /** ++ * For a given {@code test} dimension, verifies that {@link Units#get(Dimension)} gives the expected value. ++ */ ++ private static <Q extends Quantity<Q>> void verifyGetFromDimension(final Class<Q> label, final Unit<?> expected, final Unit<Q> test) { ++ assertSame(label.getSimpleName(), expected, Units.get(test.getDimension())); } /**
