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()));
      }
  
      /**

Reply via email to