@@ -81,33 +81,29 @@ public void AbsoluteHumidityIsCalculatedCorrectly(double expected, double fahren
8181 }
8282
8383 [ Theory ]
84- [ InlineData ( 1011.22 , 900 ) ]
85- [ InlineData ( 111.18 , 1000 ) ]
86- [ InlineData ( 547.1 , 950 ) ]
84+ [ InlineData ( 988.50 , 900 ) ]
85+ [ InlineData ( 110.88 , 1000 ) ]
8786 public void AltitudeIsCalculatedCorrectlyAtMslpAndDefaultTemp ( double expected , double hpa )
8887 {
8988 Length altitude = WeatherHelper . CalculateAltitude ( Pressure . FromHectopascals ( hpa ) ) ;
90- Assert . Equal ( expected , Math . Round ( altitude . Meters , 2 ) ) ;
89+ Assert . Equal ( altitude . Meters , expected , 0.5 ) ;
9190 }
9291
9392 [ Theory ]
94- [ InlineData ( 1011.22 , 900 , 1013.25 ) ]
95- [ InlineData ( 111.18 , 1000 , 1013.25 ) ]
96- [ InlineData ( 547.1 , 950 , 1013.25 ) ]
97- public void AltitudeIsCalculatedCorrectlyAtDefaultTemp ( double expected , double hpa , double seaLevelHpa )
93+ [ InlineData ( 0 , 1013.25 , 1013.25 , 15 ) ]
94+ [ InlineData ( 1000.13 , 898.75 , 1013.25 , 15 ) ]
95+ [ InlineData ( 3000.43 , 701.09 , 1013.25 , 15 ) ]
96+ [ InlineData ( 540.43 , 950 , 1013.25 , 15 ) ]
97+ public void AltitudeIsCalculatedCorrectly ( double expected , double hpa , double seaLevelHpa , double celsius )
9898 {
9999 Length altitude = WeatherHelper . CalculateAltitude ( Pressure . FromHectopascals ( hpa ) , Pressure . FromHectopascals ( seaLevelHpa ) ) ;
100- Assert . Equal ( expected , Math . Round ( altitude . Meters , 2 ) ) ;
101- }
102100
103- [ Theory ]
104- [ InlineData ( 1011.22 , 900 , 1013.25 , 15 ) ]
105- [ InlineData ( 111.18 , 1000 , 1013.25 , 15 ) ]
106- [ InlineData ( 547.1 , 950 , 1013.25 , 15 ) ]
107- public void AltitudeIsCalculatedCorrectly ( double expected , double hpa , double seaLevelHpa , double celsius )
108- {
109- Length altitude = WeatherHelper . CalculateAltitude ( Pressure . FromHectopascals ( hpa ) , Pressure . FromHectopascals ( seaLevelHpa ) , Temperature . FromDegreesCelsius ( celsius ) ) ;
101+ // These two formulas should be equivalent.
102+ double meters1 = ( Math . Pow ( seaLevelHpa / hpa , - 1 / 5.255 ) - 1 ) * ( ( celsius + 273.15 ) / - WeatherHelper . DefaultTemperatureGradient ) ;
103+ double meters2 = ( ( celsius + 273.15 ) / WeatherHelper . DefaultTemperatureGradient ) * ( 1 - Math . Pow ( hpa / seaLevelHpa , 1.0 / 5.255 ) ) ;
110104 Assert . Equal ( expected , Math . Round ( altitude . Meters , 2 ) ) ;
105+ Assert . Equal ( meters1 , expected , 0.01 ) ;
106+ Assert . Equal ( meters2 , expected , 0.01 ) ;
111107 }
112108
113109 [ Theory ]
@@ -159,6 +155,17 @@ public void CalculateBarometricPressure(double measuredValue, double temperature
159155 Assert . Equal ( expected , result . Hectopascals , 2 ) ;
160156 }
161157
158+ [ Theory ]
159+ [ InlineData ( 1113.25 , - 801.147 ) ]
160+ [ InlineData ( 1013.25 , 0.0 ) ]
161+ [ InlineData ( 913.25 , 867.955 ) ]
162+ [ InlineData ( 813.25 , 1816.617 ) ]
163+ public void Pressure2Msl ( double pressureHPa , double expectedHeightMsl )
164+ {
165+ var heightMsl = WeatherHelper . CalculateAltitude ( Pressure . FromHectopascals ( pressureHPa ) ) ;
166+ Assert . Equal ( heightMsl . Meters , expectedHeightMsl , 0.1 ) ;
167+ }
168+
162169 [ Theory ]
163170 [ InlineData ( 950 , 15 , 546.89 , 10 , 1013.19 ) ]
164171 [ InlineData ( 950 , 15 , 546.89 , 50 , 1013.01 ) ]
@@ -235,5 +242,23 @@ public void CalculateWindForce(double temperature, double windSpeed, double pres
235242 var density = WeatherHelper . CalculateWindForce ( airDensity , Speed . FromKilometersPerHour ( windSpeed ) , 1.0 ) ;
236243 Assert . Equal ( expected , density . NewtonsPerSquareMeter , 1 ) ;
237244 }
245+
246+ [ Theory ]
247+ [ InlineData ( 0 , 1013.25 , 15 , 0 ) ]
248+ [ InlineData ( 0 , 1020 , 15 , 0 ) ]
249+ [ InlineData ( 0 , 1020 , - 20 , 0 ) ]
250+ [ InlineData ( 400 , 970 , 15 , 397.989 ) ]
251+ [ InlineData ( 400 , 970 , - 5 , 399.047 ) ]
252+ [ InlineData ( 2000 , 940 , - 5 , 1995.953 ) ]
253+ public void RoundTripAltitudeAndPressure ( double originalAltitude , double originalPressure , double originalTemperature , double expectedResult )
254+ {
255+ // The expectedResult and the originalAltitude should ideally be equal.
256+ Pressure qnh = WeatherHelper . CalculateBarometricPressure ( Pressure . FromHectopascals ( originalPressure ) ,
257+ Temperature . FromDegreesCelsius ( originalTemperature ) , Length . FromMeters ( originalAltitude ) ) ;
258+
259+ Length altitudeResult = WeatherHelper . CalculateAltitude ( Pressure . FromHectopascals ( originalPressure ) , qnh , Temperature . FromDegreesCelsius ( originalTemperature ) ) ;
260+
261+ Assert . Equal ( expectedResult , altitudeResult . Meters , 1E-3 ) ;
262+ }
238263 }
239264}
0 commit comments