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