View Javadoc
1   package org.djunits.value.vdouble.scalar;
2   
3   import static org.junit.Assert.assertEquals;
4   import static org.junit.Assert.assertSame;
5   
6   import org.djunits.unit.AccelerationUnit;
7   import org.djunits.unit.AngleSolidUnit;
8   import org.djunits.unit.AngleUnit;
9   import org.djunits.unit.AreaUnit;
10  import org.djunits.unit.DimensionlessUnit;
11  import org.djunits.unit.DirectionUnit;
12  import org.djunits.unit.EnergyUnit;
13  import org.djunits.unit.LengthUnit;
14  import org.djunits.unit.MoneyPerAreaUnit;
15  import org.djunits.unit.MoneyPerEnergyUnit;
16  import org.djunits.unit.MoneyPerLengthUnit;
17  import org.djunits.unit.MoneyUnit;
18  import org.djunits.unit.Unit;
19  import org.junit.Test;
20  
21  /**
22   * Test the instantiation utility functions.
23   * <p>
24   * Copyright (c) 2013-2017 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
25   * BSD-style license. See <a href="http://opentrafficsim.org/docs/current/license.html">OpenTrafficSim License</a>.
26   * </p>
27   * $LastChangedDate: 2015-07-24 02:58:59 +0200 (Fri, 24 Jul 2015) $, @version $Revision: 1147 $, by $Author: averbraeck $,
28   * initial version Aug 11, 2018 <br>
29   * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
30   * @author <a href="http://www.tudelft.nl/pknoppers">Peter Knoppers</a>
31   * @author <a href="http://www.transport.citg.tudelft.nl">Wouter Schakel</a>
32   */
33  public class DoubleScalarUtilTest
34  {
35      /**
36       * Test the instantiation utility function of classes.
37       */
38      @Test
39      public final void instantiateTest()
40      {
41          Dimensionless dimensionless = DoubleScalarUtil.instantiate(10.0, DimensionlessUnit.SI);
42          assertEquals("Dimensionless", 10.0, dimensionless.si, 0.0001d);
43          dimensionless = DoubleScalarUtil.instantiateSI(10.0, DimensionlessUnit.SI);
44          assertEquals("Dimensionless", 10.0, dimensionless.si, 0.0001d);
45          assertSame("Dimensionless", DimensionlessUnit.SI, dimensionless.getUnit());
46          
47          Acceleration acceleration = DoubleScalarUtil.instantiate(10.0, AccelerationUnit.SI);
48          assertEquals("Acceleration", 10.0, acceleration.si, 0.0001d);
49          acceleration = DoubleScalarUtil.instantiate(12960.0, AccelerationUnit.KM_PER_HOUR_2);
50          assertEquals("Acceleration", 1.0, acceleration.si, 0.001d);
51          acceleration = DoubleScalarUtil.instantiateSI(10.0, AccelerationUnit.KM_PER_HOUR_2);
52          assertEquals("Acceleration", 10.0, acceleration.si, 0.0001d);
53          assertSame("Acceleration", AccelerationUnit.KM_PER_HOUR_2, acceleration.getUnit());
54          
55          AngleSolid angleSolid = DoubleScalarUtil.instantiate(10.0, AngleSolidUnit.SI);
56          assertEquals("AngleSolid", 10.0, angleSolid.si, 0.0001d);
57          angleSolid = DoubleScalarUtil.instantiate(1.0, AngleSolidUnit.SQUARE_DEGREE);
58          assertEquals("AngleSolid", (Math.PI / 180.0) * (Math.PI / 180.0), angleSolid.si, 0.001d);
59          angleSolid = DoubleScalarUtil.instantiateSI(10.0, AngleSolidUnit.SQUARE_DEGREE);
60          assertEquals("AngleSolid", 10.0, angleSolid.si, 0.0001d);
61          assertSame("AngleSolid", AngleSolidUnit.SQUARE_DEGREE, angleSolid.getUnit());
62          
63          Angle angle = DoubleScalarUtil.instantiate(10.0, AngleUnit.SI);
64          assertEquals("Angle", 10.0, angle.si, 0.0001d);
65          angle = DoubleScalarUtil.instantiate(1.0, AngleUnit.DEGREE);
66          assertEquals("Angle", Math.PI / 180.0, angle.si, 0.001d);
67          angle = DoubleScalarUtil.instantiateSI(10.0, AngleUnit.DEGREE);
68          assertEquals("Angle", 10.0, angle.si, 0.0001d);
69          assertSame("Angle", AngleUnit.DEGREE, angle.getUnit());
70         
71          Direction direction = DoubleScalarUtil.instantiate(10.0, DirectionUnit.BASE);
72          assertEquals("Direction", 10.0, direction.si, 0.0001d);
73          direction = DoubleScalarUtil.instantiate(1.0, DirectionUnit.NORTH_DEGREE);
74          assertEquals("Direction", Math.PI / 180.0, direction.si, 0.001d);
75          direction = DoubleScalarUtil.instantiateSI(10.0, DirectionUnit.NORTH_DEGREE);
76          assertEquals("Direction", 10.0, direction.si, 0.0001d);
77          assertSame("Direction", DirectionUnit.NORTH_DEGREE, direction.getUnit());
78         
79          Area area = DoubleScalarUtil.instantiate(10.0, AreaUnit.SI);
80          assertEquals("Area", 10.0, area.si, 0.0001d);
81          area = DoubleScalarUtil.instantiate(1.0, AreaUnit.HECTARE);
82          assertEquals("Area", 10000.0, area.si, 0.001d);
83          area = DoubleScalarUtil.instantiateSI(10.0, AreaUnit.HECTARE);
84          assertEquals("Area", 10.0, area.si, 0.0001d);
85          assertSame("Area", AreaUnit.HECTARE, area.getUnit());
86  
87          
88          // TODO: other base units
89          
90          Money money = DoubleScalarUtil.instantiate(10.0, MoneyUnit.USD);
91          assertEquals("Money", 10.0, money.si, 0.0001d);
92          money = DoubleScalarUtil.instantiate(100.0, MoneyUnit.EUR);
93          assertEquals("Money", 100.0, money.si, 0.001d);
94          money = DoubleScalarUtil.instantiateSI(10.0, MoneyUnit.EUR);
95          assertEquals("Money", 10.0, money.si, 0.0001d);
96          assertSame("Money", MoneyUnit.EUR, money.getUnit());
97          
98          MoneyPerAreaUnit unitUSDm2 = new MoneyPerAreaUnit(MoneyUnit.USD, AreaUnit.SQUARE_METER, "USD/m2", "$/m2");
99          MoneyPerAreaUnit unitEURha = new MoneyPerAreaUnit(MoneyUnit.EUR, AreaUnit.HECTARE, "EUR/ha", "EUR/ha");
100         MoneyPerArea moneyPerArea = DoubleScalarUtil.instantiate(10.0, unitUSDm2);
101         assertEquals("MoneyPerArea", 10.0, moneyPerArea.si, 0.0001d);
102         moneyPerArea = DoubleScalarUtil.instantiate(10000.0, unitEURha);
103         assertEquals("MoneyPerArea", 1.0, moneyPerArea.si, 0.001d);
104         moneyPerArea = DoubleScalarUtil.instantiateSI(10.0, unitEURha);
105         assertEquals("MoneyPerArea", 10.0, moneyPerArea.si, 0.0001d);
106         assertSame("MoneyPerArea", unitEURha, moneyPerArea.getUnit());
107 
108         MoneyPerEnergyUnit unitUSDJ = new MoneyPerEnergyUnit(MoneyUnit.USD, EnergyUnit.JOULE, "USD/J", "$/J");
109         MoneyPerEnergyUnit unitEURKJ = new MoneyPerEnergyUnit(MoneyUnit.EUR, EnergyUnit.KILOJOULE, "EUR/MWh", "EUR/KJ");
110         MoneyPerEnergy moneyPerEnergy = DoubleScalarUtil.instantiate(10.0, unitUSDJ);
111         assertEquals("MoneyPerEnerg", 10.0, moneyPerEnergy.si, 0.0001d);
112         moneyPerEnergy = DoubleScalarUtil.instantiate(1000.0, unitEURKJ);
113         assertEquals("MoneyPerEnerg", 1.0, moneyPerEnergy.si, 0.001d);
114         moneyPerEnergy = DoubleScalarUtil.instantiateSI(10.0, unitEURKJ);
115         assertEquals("MoneyPerEnerg", 10.0, moneyPerEnergy.si, 0.0001d);
116         assertSame("MoneyPerEnerg", unitEURKJ, moneyPerEnergy.getUnit());
117 
118    }
119     
120     /**
121      * Test the instantiation utility function of classes for anonymous units, also for the compiler.
122      */
123     @Test
124     public final void anonymousUnitTest()
125     {
126         Unit<?> unitSI = LengthUnit.SI;
127         Unit<?> unitKM = LengthUnit.KILOMETER;
128         Length length = DoubleScalarUtil.instantiateAnonymous(10.0, unitSI);
129         assertEquals("Length", 10.0, length.si, 0.0001d);
130         length = DoubleScalarUtil.instantiateAnonymous(1.0, unitKM);
131         assertEquals("Length", 1000.0, length.si, 0.001d);
132         length = DoubleScalarUtil.instantiateAnonymousSI(10.0, unitKM);
133         assertEquals("Length", 10.0, length.si, 0.0001d);
134         assertSame("Length", unitKM, length.getUnit());
135         
136         // TODO: other base units
137         
138         Unit<?> unitUSD = MoneyUnit.USD;
139         Unit<?> unitEUR = MoneyUnit.EUR;
140         Money money = DoubleScalarUtil.instantiateAnonymous(10.0, unitUSD);
141         assertEquals("Money", 10.0, money.si, 0.0001d);
142         money = DoubleScalarUtil.instantiateAnonymous(100.0, unitEUR);
143         assertEquals("Money", 100.0, money.si, 0.001d);
144         money = DoubleScalarUtil.instantiateAnonymousSI(10.0, unitEUR);
145         assertEquals("Money", 10.0, money.si, 0.0001d);
146         assertSame("Money", unitEUR, money.getUnit());
147         
148         Unit<?> unitUSDm2 = new MoneyPerAreaUnit(MoneyUnit.USD, AreaUnit.SQUARE_METER, "USD/m2", "$/m2");
149         Unit<?> unitEURha = new MoneyPerAreaUnit(MoneyUnit.EUR, AreaUnit.HECTARE, "EUR/ha", "EUR/ha");
150         MoneyPerArea moneyPerArea = DoubleScalarUtil.instantiateAnonymous(10.0, unitUSDm2);
151         assertEquals("MoneyPerArea", 10.0, moneyPerArea.si, 0.0001d);
152         moneyPerArea = DoubleScalarUtil.instantiateAnonymous(10000.0, unitEURha);
153         assertEquals("MoneyPerArea", 1.0, moneyPerArea.si, 0.001d);
154         moneyPerArea = DoubleScalarUtil.instantiateAnonymousSI(10.0, unitEURha);
155         assertEquals("MoneyPerArea", 10.0, moneyPerArea.si, 0.0001d);
156         assertSame("MoneyPerArea", unitEURha, moneyPerArea.getUnit());
157 
158         Unit<?> unitUSDJ = new MoneyPerEnergyUnit(MoneyUnit.USD, EnergyUnit.JOULE, "USD/J", "$/J");
159         Unit<?> unitEURKJ = new MoneyPerEnergyUnit(MoneyUnit.EUR, EnergyUnit.KILOJOULE, "EUR/MWh", "EUR/KJ");
160         MoneyPerEnergy moneyPerEnergy = DoubleScalarUtil.instantiateAnonymous(10.0, unitUSDJ);
161         assertEquals("MoneyPerEnerg", 10.0, moneyPerEnergy.si, 0.0001d);
162         moneyPerEnergy = DoubleScalarUtil.instantiateAnonymous(1000.0, unitEURKJ);
163         assertEquals("MoneyPerEnerg", 1.0, moneyPerEnergy.si, 0.001d);
164         moneyPerEnergy = DoubleScalarUtil.instantiateAnonymousSI(10.0, unitEURKJ);
165         assertEquals("MoneyPerEnerg", 10.0, moneyPerEnergy.si, 0.0001d);
166         assertSame("MoneyPerEnerg", unitEURKJ, moneyPerEnergy.getUnit());
167 
168     }
169 }
170