1 package org.opentrafficsim.core.network.factory.xml.units;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.fail;
5
6 import org.djunits.unit.DurationUnit;
7 import org.djunits.unit.LengthUnit;
8 import org.djunits.unit.PositionUnit;
9 import org.djunits.unit.SpeedUnit;
10 import org.djunits.unit.TimeUnit;
11 import org.djunits.value.vdouble.scalar.Duration;
12 import org.djunits.value.vdouble.scalar.Length;
13 import org.djunits.value.vdouble.scalar.Position;
14 import org.djunits.value.vdouble.scalar.Speed;
15 import org.djunits.value.vdouble.scalar.Time;
16 import org.junit.Test;
17 import org.opentrafficsim.core.network.NetworkException;
18 import org.opentrafficsim.core.units.distributions.ContinuousDistDoubleScalar;
19
20 import nl.tudelft.simulation.jstats.distributions.DistBeta;
21 import nl.tudelft.simulation.jstats.distributions.DistConstant;
22 import nl.tudelft.simulation.jstats.distributions.DistErlang;
23 import nl.tudelft.simulation.jstats.distributions.DistExponential;
24 import nl.tudelft.simulation.jstats.distributions.DistGamma;
25 import nl.tudelft.simulation.jstats.distributions.DistLogNormal;
26 import nl.tudelft.simulation.jstats.distributions.DistNormal;
27 import nl.tudelft.simulation.jstats.distributions.DistPearson5;
28 import nl.tudelft.simulation.jstats.distributions.DistPearson6;
29 import nl.tudelft.simulation.jstats.distributions.DistTriangular;
30 import nl.tudelft.simulation.jstats.distributions.DistUniform;
31 import nl.tudelft.simulation.jstats.distributions.DistWeibull;
32
33
34
35
36
37
38
39
40
41
42
43
44 public class DistributionsTest
45 {
46
47
48
49
50
51 @Test
52 public final void testDistributions() throws NetworkException
53 {
54
55 ContinuousDistDoubleScalar.Rel<Length, LengthUnit> lengthDist = Distributions.parseLengthDist("UNIFORM(1, 3) m");
56 assertEquals("unit is length", LengthUnit.METER, lengthDist.getUnit());
57 assertEquals("distribution is uniform", DistUniform.class, lengthDist.getDistribution().getClass());
58 ContinuousDistDoubleScalar.Abs<Position, PositionUnit, LengthUnit> positionDist =
59 Distributions.parsePositionDist("UNIFORM(1, 3) m");
60 assertEquals("unit is position", PositionUnit.METER, positionDist.getUnit());
61 assertEquals("distribution is uniform", DistUniform.class, positionDist.getDistribution().getClass());
62 ContinuousDistDoubleScalar.Rel<Duration, DurationUnit> durationDist =
63 Distributions.parseDurationDist("UNIFORM(1, 3) s");
64 assertEquals("unit is duration", DurationUnit.SI, durationDist.getUnit());
65 assertEquals("distribution is uniform", DistUniform.class, durationDist.getDistribution().getClass());
66 ContinuousDistDoubleScalar.Abs<Time, TimeUnit, DurationUnit> timeDist = Distributions.parseTimeDist("UNIFORM(1, 3) s");
67 assertEquals("unit is time", TimeUnit.BASE, timeDist.getUnit());
68 assertEquals("distribution is uniform", DistUniform.class, positionDist.getDistribution().getClass());
69 ContinuousDistDoubleScalar.Rel<Speed, SpeedUnit> speedDist = Distributions.parseSpeedDist("UNIFORM(1, 3) m/s");
70 assertEquals("unit is speed", SpeedUnit.METER_PER_SECOND, speedDist.getUnit());
71 assertEquals("distribution is uniform", DistUniform.class, speedDist.getDistribution().getClass());
72
73 ContinuousDistDoubleScalar.Rel<Length, LengthUnit> dist = Distributions.parseLengthDist("CONST(123) m");
74 assertEquals("distribution is constant", DistConstant.class, dist.getDistribution().getClass());
75 dist = Distributions.parseLengthDist("CONSTANT(456) km");
76 assertEquals("distribution is constant", DistConstant.class, dist.getDistribution().getClass());
77 assertEquals("Const value in SI", 456000, dist.draw().si, 0);
78 dist = Distributions.parseLengthDist("EXPO(456) km");
79 assertEquals("distribution is exponential", DistExponential.class, dist.getDistribution().getClass());
80 dist = Distributions.parseLengthDist("EXPONENTIAL(456) km");
81 assertEquals("distribution is exponential", DistExponential.class, dist.getDistribution().getClass());
82 dist = Distributions.parseLengthDist("TRIA(1, 3, 4) km");
83 assertEquals("distribution is triangular", DistTriangular.class, dist.getDistribution().getClass());
84 dist = Distributions.parseLengthDist("TRIANGULAR( 1 , 3 , 4) km");
85 assertEquals("distribution is triangular", DistTriangular.class, dist.getDistribution().getClass());
86 dist = Distributions.parseLengthDist("NORM(1,3) km");
87 assertEquals("distribution is normal", DistNormal.class, dist.getDistribution().getClass());
88 dist = Distributions.parseLengthDist("NORMAL(1,3) km");
89 assertEquals("distribution is normal", DistNormal.class, dist.getDistribution().getClass());
90 dist = Distributions.parseLengthDist("BETA(1,3) km");
91 assertEquals("distribution is Beta", DistBeta.class, dist.getDistribution().getClass());
92 dist = Distributions.parseLengthDist("ERLANG(1,3) km");
93 assertEquals("distribution is Erlang", DistErlang.class, dist.getDistribution().getClass());
94 dist = Distributions.parseLengthDist("GAMMA(1,3) km");
95 assertEquals("distribution is Gamma", DistGamma.class, dist.getDistribution().getClass());
96 dist = Distributions.parseLengthDist("LOGNORMAL(1,3) km");
97 assertEquals("distribution is lognormal", DistLogNormal.class, dist.getDistribution().getClass());
98 dist = Distributions.parseLengthDist("PEARSON5(1,3) km");
99 assertEquals("distribution is Pearson5", DistPearson5.class, dist.getDistribution().getClass());
100 dist = Distributions.parseLengthDist("PEARSON6(1,3, 5) km");
101 assertEquals("distribution is Pearson6", DistPearson6.class, dist.getDistribution().getClass());
102 dist = Distributions.parseLengthDist("WEIB(1,3, 5) km");
103 assertEquals("distribution is Weibull", DistWeibull.class, dist.getDistribution().getClass());
104 dist = Distributions.parseLengthDist("WEIBULL(1,3, 5) km");
105 assertEquals("distribution is Weibull", DistWeibull.class, dist.getDistribution().getClass());
106
107
108 try
109 {
110 Distributions.parseLengthDist("UNIFORM(3, 1) km");
111 fail("illegal interval should have thrown an IllegalArgumentException");
112 }
113 catch (IllegalArgumentException iae)
114 {
115
116 }
117 try
118 {
119 Distributions.parseLengthDist("NONEXISTENTDIST(1,2) km");
120 fail("non existent distribution name should have thrown a NetworkException");
121 }
122 catch (NetworkException ne)
123 {
124
125 }
126 try
127 {
128 Distributions.parseLengthDist("CONST(2)");
129 fail("distribution with missing unit should have thrown an ArrayIndexOutOfBoundsException");
130 }
131 catch (ArrayIndexOutOfBoundsException aioobe)
132 {
133
134 }
135 }
136 }