mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-13 15:45:42 +08:00
@@ -16,6 +16,10 @@
|
|||||||
|
|
||||||
#include "testweather.h"
|
#include "testweather.h"
|
||||||
#include "blackmisc/weather/metardecoder.h"
|
#include "blackmisc/weather/metardecoder.h"
|
||||||
|
#include "blackmisc/weather/cloudlayerlist.h"
|
||||||
|
#include "blackmisc/weather/temperaturelayerlist.h"
|
||||||
|
#include "blackmisc/weather/visibilitylayerlist.h"
|
||||||
|
#include "blackmisc/weather/windlayerlist.h"
|
||||||
|
|
||||||
using namespace BlackMisc::Weather;
|
using namespace BlackMisc::Weather;
|
||||||
using namespace BlackMisc::Aviation;
|
using namespace BlackMisc::Aviation;
|
||||||
@@ -32,6 +36,101 @@ namespace BlackMiscTest
|
|||||||
// void
|
// void
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CTestWeather::cloudLayer()
|
||||||
|
{
|
||||||
|
const CAltitude base1 { 0, CAltitude::AboveGround, CLengthUnit::ft() };
|
||||||
|
const CAltitude top1 { 5000, CAltitude::AboveGround, CLengthUnit::ft() };
|
||||||
|
|
||||||
|
CCloudLayer cl1 (base1, top1, CCloudLayer::Scattered);
|
||||||
|
QVERIFY(cl1.getBase() == base1);
|
||||||
|
QVERIFY(cl1.getTop() == top1);
|
||||||
|
QVERIFY(cl1.getPrecipitationRate() == 0);
|
||||||
|
QVERIFY(cl1.getPrecipitation() == CCloudLayer::NoPrecipitation);
|
||||||
|
QVERIFY(cl1.getClouds() == CCloudLayer::NoClouds);
|
||||||
|
QVERIFY(cl1.getCoverage() == CCloudLayer::Scattered);
|
||||||
|
|
||||||
|
const CAltitude base2 { 15000, CAltitude::AboveGround, CLengthUnit::ft() };
|
||||||
|
const CAltitude top2 { 35000, CAltitude::AboveGround, CLengthUnit::ft() };
|
||||||
|
|
||||||
|
CCloudLayer cl2 { base2, top2, 5, CCloudLayer::Rain, CCloudLayer::Cirrus, CCloudLayer::Scattered };
|
||||||
|
QVERIFY(cl2.getBase() == base2);
|
||||||
|
QVERIFY(cl2.getTop() == top2);
|
||||||
|
QVERIFY(cl2.getPrecipitationRate() == 5);
|
||||||
|
QVERIFY(cl2.getPrecipitation() == CCloudLayer::Rain);
|
||||||
|
QVERIFY(cl2.getClouds() == CCloudLayer::Cirrus);
|
||||||
|
QVERIFY(cl2.getCoverage() == CCloudLayer::Scattered);
|
||||||
|
|
||||||
|
const CAltitude base3 { 25000, CAltitude::AboveGround, CLengthUnit::ft() };
|
||||||
|
CCloudLayerList cll { cl1, cl2 };
|
||||||
|
QVERIFY(cll.containsBase(base1));
|
||||||
|
QVERIFY(cll.containsBase(base2));
|
||||||
|
QVERIFY(!cll.containsBase(base3));
|
||||||
|
QVERIFY(cll.findByBase(base1) != CCloudLayer() );
|
||||||
|
QVERIFY(cll.findByBase(base2) != CCloudLayer() );
|
||||||
|
QVERIFY(cll.findByBase(base3) == CCloudLayer() );
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTestWeather::temperatureLayer()
|
||||||
|
{
|
||||||
|
const CAltitude level1 { 0, CAltitude::AboveGround, CLengthUnit::ft() };
|
||||||
|
const CTemperature temp1 { 25, CTemperatureUnit::C() };
|
||||||
|
const CTemperature dp1 { 15, CTemperatureUnit::C() };
|
||||||
|
const int rh = 80;
|
||||||
|
|
||||||
|
CTemperatureLayer tl1 (level1, temp1, dp1, rh);
|
||||||
|
QVERIFY(tl1.getLevel() == level1);
|
||||||
|
QVERIFY(tl1.getTemperature() == temp1);
|
||||||
|
QVERIFY(tl1.getDewPoint() == dp1);
|
||||||
|
QVERIFY(tl1.getRelativeHumidity() == rh);
|
||||||
|
|
||||||
|
CAltitude level2 { 25000, CAltitude::AboveGround, CLengthUnit::ft() };
|
||||||
|
CTemperatureLayerList tll { tl1 };
|
||||||
|
QVERIFY(tll.containsLevel(level1));
|
||||||
|
QVERIFY(!tll.containsLevel(level2));
|
||||||
|
QVERIFY(tll.findByLevel(level1) != CTemperatureLayer() );
|
||||||
|
QVERIFY(tll.findByLevel(level2) == CTemperatureLayer() );
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTestWeather::visibilityLayer()
|
||||||
|
{
|
||||||
|
const CAltitude base1 { 0, CAltitude::AboveGround, CLengthUnit::ft() };
|
||||||
|
const CAltitude top1 { 5000, CAltitude::AboveGround, CLengthUnit::ft() };
|
||||||
|
const CLength visibility1 { 10, CLengthUnit::SM() };
|
||||||
|
|
||||||
|
CVisibilityLayer vl1 (base1, top1, visibility1);
|
||||||
|
QVERIFY(vl1.getBase() == base1);
|
||||||
|
QVERIFY(vl1.getTop() == top1);
|
||||||
|
QVERIFY(vl1.getVisibility() == visibility1);
|
||||||
|
|
||||||
|
const CAltitude base2 { 25000, CAltitude::AboveGround, CLengthUnit::ft() };
|
||||||
|
CVisibilityLayerList vll { vl1 };
|
||||||
|
QVERIFY(vll.containsBase(base1));
|
||||||
|
QVERIFY(!vll.containsBase(base2));
|
||||||
|
QVERIFY(vll.findByBase(base1) != CVisibilityLayer() );
|
||||||
|
QVERIFY(vll.findByBase(base2) == CVisibilityLayer() );
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTestWeather::windLayer()
|
||||||
|
{
|
||||||
|
const CAltitude level1 { 0, CAltitude::AboveGround, CLengthUnit::ft() };
|
||||||
|
const CAngle direction1 { 25, CAngleUnit::deg() };
|
||||||
|
const CSpeed speed1 { 10, CSpeedUnit::kts() };
|
||||||
|
const CSpeed gustSpeed1 { 20, CSpeedUnit::kts() };
|
||||||
|
|
||||||
|
CWindLayer wl1 (level1, direction1, speed1, gustSpeed1);
|
||||||
|
QVERIFY(wl1.getLevel() == level1);
|
||||||
|
QVERIFY(wl1.getDirection() == direction1);
|
||||||
|
QVERIFY(wl1.getSpeed() == speed1);
|
||||||
|
QVERIFY(wl1.getGustSpeed() == gustSpeed1);
|
||||||
|
|
||||||
|
CAltitude level2 { 25000, CAltitude::AboveGround, CLengthUnit::ft() };
|
||||||
|
CWindLayerList wll { wl1 };
|
||||||
|
QVERIFY(wll.containsLevel(level1));
|
||||||
|
QVERIFY(!wll.containsLevel(level2));
|
||||||
|
QVERIFY(wll.findByLevel(level1) != CWindLayer() );
|
||||||
|
QVERIFY(wll.findByLevel(level2) == CWindLayer() );
|
||||||
|
}
|
||||||
|
|
||||||
void CTestWeather::metarDecoder()
|
void CTestWeather::metarDecoder()
|
||||||
{
|
{
|
||||||
CMetarDecoder metarDecoder;
|
CMetarDecoder metarDecoder;
|
||||||
@@ -56,12 +155,12 @@ namespace BlackMiscTest
|
|||||||
QVERIFY2((presentWeather.getWeatherPhenomena() & CPresentWeather::Snow) == 0, "Weather phenomina 'Snow' should NOT be set");
|
QVERIFY2((presentWeather.getWeatherPhenomena() & CPresentWeather::Snow) == 0, "Weather phenomina 'Snow' should NOT be set");
|
||||||
|
|
||||||
auto cloudLayers = metar.getCloudLayers();
|
auto cloudLayers = metar.getCloudLayers();
|
||||||
QVERIFY2(cloudLayers.containsCeiling(CAltitude(4500, CAltitude::AboveGround, CLengthUnit::ft())), "Cloud layer 4500 ft missing");
|
QVERIFY2(cloudLayers.containsBase(CAltitude(4500, CAltitude::AboveGround, CLengthUnit::ft())), "Cloud layer 4500 ft missing");
|
||||||
QVERIFY2(cloudLayers.containsCeiling(CAltitude(22000, CAltitude::AboveGround, CLengthUnit::ft())), "Cloud layer 22000 ft missing");
|
QVERIFY2(cloudLayers.containsBase(CAltitude(22000, CAltitude::AboveGround, CLengthUnit::ft())), "Cloud layer 22000 ft missing");
|
||||||
QVERIFY2(cloudLayers.containsCeiling(CAltitude(30000, CAltitude::AboveGround, CLengthUnit::ft())), "Cloud layer 30000 ft missing");
|
QVERIFY2(cloudLayers.containsBase(CAltitude(30000, CAltitude::AboveGround, CLengthUnit::ft())), "Cloud layer 30000 ft missing");
|
||||||
QVERIFY2(cloudLayers.findByCeiling(CAltitude(4500, CAltitude::AboveGround, CLengthUnit::ft())).getCoverage() == CCloudLayer::Few, "Failed to parse cloud layer in 4500 ft");
|
QVERIFY2(cloudLayers.findByBase(CAltitude(4500, CAltitude::AboveGround, CLengthUnit::ft())).getCoverage() == CCloudLayer::Few, "Failed to parse cloud layer in 4500 ft");
|
||||||
QVERIFY2(cloudLayers.findByCeiling(CAltitude(22000, CAltitude::AboveGround, CLengthUnit::ft())).getCoverage() == CCloudLayer::Scattered, "Failed to parse cloud layer in 22000 ft");
|
QVERIFY2(cloudLayers.findByBase(CAltitude(22000, CAltitude::AboveGround, CLengthUnit::ft())).getCoverage() == CCloudLayer::Scattered, "Failed to parse cloud layer in 22000 ft");
|
||||||
QVERIFY2(cloudLayers.findByCeiling(CAltitude(30000, CAltitude::AboveGround, CLengthUnit::ft())).getCoverage() == CCloudLayer::Scattered, "Failed to parse cloud layer in 30000 ft");
|
QVERIFY2(cloudLayers.findByBase(CAltitude(30000, CAltitude::AboveGround, CLengthUnit::ft())).getCoverage() == CCloudLayer::Scattered, "Failed to parse cloud layer in 30000 ft");
|
||||||
|
|
||||||
CMetar metar2 = metarDecoder.decode("EDDM 241753Z 20009G11KT 9000NDV FEW045 SCT220 SCT300 ///// Q1013");
|
CMetar metar2 = metarDecoder.decode("EDDM 241753Z 20009G11KT 9000NDV FEW045 SCT220 SCT300 ///// Q1013");
|
||||||
QVERIFY2(metar2.getAirportIcaoCode() == CAirportIcaoCode("EDDM"), "Failed to parse airport code");
|
QVERIFY2(metar2.getAirportIcaoCode() == CAirportIcaoCode("EDDM"), "Failed to parse airport code");
|
||||||
@@ -79,12 +178,12 @@ namespace BlackMiscTest
|
|||||||
QVERIFY2(presentWeatherList2.size() == 0, "Present weather has an incorrect size");
|
QVERIFY2(presentWeatherList2.size() == 0, "Present weather has an incorrect size");
|
||||||
|
|
||||||
auto cloudLayers2 = metar2.getCloudLayers();
|
auto cloudLayers2 = metar2.getCloudLayers();
|
||||||
QVERIFY2(cloudLayers2.containsCeiling(CAltitude(4500, CAltitude::AboveGround, CLengthUnit::ft())), "Cloud layer 4500 ft missing");
|
QVERIFY2(cloudLayers2.containsBase(CAltitude(4500, CAltitude::AboveGround, CLengthUnit::ft())), "Cloud layer 4500 ft missing");
|
||||||
QVERIFY2(cloudLayers2.containsCeiling(CAltitude(22000, CAltitude::AboveGround, CLengthUnit::ft())), "Cloud layer 22000 ft missing");
|
QVERIFY2(cloudLayers2.containsBase(CAltitude(22000, CAltitude::AboveGround, CLengthUnit::ft())), "Cloud layer 22000 ft missing");
|
||||||
QVERIFY2(cloudLayers2.containsCeiling(CAltitude(30000, CAltitude::AboveGround, CLengthUnit::ft())), "Cloud layer 30000 ft missing");
|
QVERIFY2(cloudLayers2.containsBase(CAltitude(30000, CAltitude::AboveGround, CLengthUnit::ft())), "Cloud layer 30000 ft missing");
|
||||||
QVERIFY2(cloudLayers2.findByCeiling(CAltitude(4500, CAltitude::AboveGround, CLengthUnit::ft())).getCoverage() == CCloudLayer::Few, "Failed to parse cloud layer in 4500 ft");
|
QVERIFY2(cloudLayers2.findByBase(CAltitude(4500, CAltitude::AboveGround, CLengthUnit::ft())).getCoverage() == CCloudLayer::Few, "Failed to parse cloud layer in 4500 ft");
|
||||||
QVERIFY2(cloudLayers2.findByCeiling(CAltitude(22000, CAltitude::AboveGround, CLengthUnit::ft())).getCoverage() == CCloudLayer::Scattered, "Failed to parse cloud layer in 22000 ft");
|
QVERIFY2(cloudLayers2.findByBase(CAltitude(22000, CAltitude::AboveGround, CLengthUnit::ft())).getCoverage() == CCloudLayer::Scattered, "Failed to parse cloud layer in 22000 ft");
|
||||||
QVERIFY2(cloudLayers2.findByCeiling(CAltitude(30000, CAltitude::AboveGround, CLengthUnit::ft())).getCoverage() == CCloudLayer::Scattered, "Failed to parse cloud layer in 30000 ft");
|
QVERIFY2(cloudLayers2.findByBase(CAltitude(30000, CAltitude::AboveGround, CLengthUnit::ft())).getCoverage() == CCloudLayer::Scattered, "Failed to parse cloud layer in 30000 ft");
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
@@ -32,6 +32,18 @@ namespace BlackMiscTest
|
|||||||
explicit CTestWeather(QObject *parent = nullptr);
|
explicit CTestWeather(QObject *parent = nullptr);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
//! Testing CCloudLayer/CCloudLayerList
|
||||||
|
void cloudLayer();
|
||||||
|
|
||||||
|
//! Testing CTemperatureLayer/CTemperatureLayerList
|
||||||
|
void temperatureLayer();
|
||||||
|
|
||||||
|
//! Testing CVisibilityLayer/CVisibilityLayerList
|
||||||
|
void visibilityLayer();
|
||||||
|
|
||||||
|
//! Testing CWindLayer/CWindLayerList
|
||||||
|
void windLayer();
|
||||||
|
|
||||||
//! Testing METAR decoder
|
//! Testing METAR decoder
|
||||||
void metarDecoder();
|
void metarDecoder();
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user