TestSuite: Shifted the YASim atmosphere test into the CppUnit framework.
This commit is contained in:
parent
ba5b472705
commit
dbe7c90115
11 changed files with 138 additions and 43 deletions
|
@ -202,28 +202,4 @@ int Atmosphere::maxTableIndex() {
|
||||||
return (sizeof(data) / (numColumns * sizeof(float))) - 1;
|
return (sizeof(data) / (numColumns * sizeof(float))) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Atmosphere::test() {
|
|
||||||
bool passed = true;
|
|
||||||
int rows = maxTableIndex() + 1;
|
|
||||||
const float maxDeviation = 0.0002f;
|
|
||||||
|
|
||||||
fprintf(stderr, "Atmosphere::test()\n");
|
|
||||||
fprintf(stderr, "Columns = %d\n", numColumns);
|
|
||||||
fprintf(stderr, "Rows = %d\n", rows);
|
|
||||||
|
|
||||||
for (int alt = 0; alt <= maxTableIndex(); alt++) {
|
|
||||||
float density = calcStdDensity(data[alt][PRESSURE], data[alt][TEMPERATURE]);
|
|
||||||
float delta = data[alt][DENSITY] - density;
|
|
||||||
fprintf(stderr, "%d : %f \n", alt, delta);
|
|
||||||
if (Math::abs(delta) > maxDeviation) {
|
|
||||||
passed = false;
|
|
||||||
fprintf(stderr,"FAIL: Deviation above limit of %1.6f\n", maxDeviation);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (passed) {
|
|
||||||
fprintf(stderr,"Deviation below %1.6f for all rows.\n", maxDeviation);
|
|
||||||
}
|
|
||||||
return passed;
|
|
||||||
}
|
|
||||||
|
|
||||||
}; // namespace yasim
|
}; // namespace yasim
|
||||||
|
|
|
@ -1,19 +1,24 @@
|
||||||
#ifndef _ATMOSPHERE_HPP
|
#ifndef _ATMOSPHERE_HPP
|
||||||
#define _ATMOSPHERE_HPP
|
#define _ATMOSPHERE_HPP
|
||||||
|
|
||||||
|
namespace FGTestApi { namespace PrivateAccessor { namespace FDM { class Accessor; } } }
|
||||||
|
|
||||||
namespace yasim {
|
namespace yasim {
|
||||||
|
|
||||||
//constexpr int Atmosphere::numColumns {4};
|
//constexpr int Atmosphere::numColumns {4};
|
||||||
|
|
||||||
class Atmosphere {
|
class Atmosphere {
|
||||||
|
friend class ::FGTestApi::PrivateAccessor::FDM::Accessor;
|
||||||
|
|
||||||
|
static const int numColumns {4};
|
||||||
|
|
||||||
|
public:
|
||||||
enum Column {
|
enum Column {
|
||||||
ALTITUDE,
|
ALTITUDE,
|
||||||
TEMPERATURE,
|
TEMPERATURE,
|
||||||
PRESSURE,
|
PRESSURE,
|
||||||
DENSITY
|
DENSITY
|
||||||
};
|
};
|
||||||
static const int numColumns {4};
|
|
||||||
public:
|
|
||||||
void setTemperature(float t) { _temperature = t; }
|
void setTemperature(float t) { _temperature = t; }
|
||||||
void setPressure(float p) { _pressure = p; }
|
void setPressure(float p) { _pressure = p; }
|
||||||
void setDensity(float d) { _density = d; }
|
void setDensity(float d) { _density = d; }
|
||||||
|
@ -46,12 +51,12 @@ public:
|
||||||
static void calcStaticAir(float p0, float t0, float d0, float v,
|
static void calcStaticAir(float p0, float t0, float d0, float v,
|
||||||
float* pOut, float* tOut, float* dOut);
|
float* pOut, float* tOut, float* dOut);
|
||||||
void calcStaticAir(float v, float* pOut, float* tOut, float* dOut);
|
void calcStaticAir(float v, float* pOut, float* tOut, float* dOut);
|
||||||
static bool test();
|
|
||||||
|
static int maxTableIndex();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static float getRecord(float alt, Atmosphere::Column recNum);
|
static float getRecord(float alt, Atmosphere::Column recNum);
|
||||||
static float data[][numColumns];
|
static float data[][numColumns];
|
||||||
static int maxTableIndex();
|
|
||||||
|
|
||||||
float _temperature = 288.11f;
|
float _temperature = 288.11f;
|
||||||
float _pressure = 101325.0f;
|
float _pressure = 101325.0f;
|
||||||
|
|
|
@ -39,7 +39,6 @@ flightgear_component(YASim "${SOURCES}")
|
||||||
|
|
||||||
add_executable(yasim yasim-test.cpp ${COMMON})
|
add_executable(yasim yasim-test.cpp ${COMMON})
|
||||||
add_executable(yasim-proptest proptest.cpp ${COMMON})
|
add_executable(yasim-proptest proptest.cpp ${COMMON})
|
||||||
add_executable(yasim-atmotest yasim-atmotest.cpp Atmosphere.cpp )
|
|
||||||
|
|
||||||
target_link_libraries(yasim SimGearCore)
|
target_link_libraries(yasim SimGearCore)
|
||||||
target_link_libraries(yasim-proptest SimGearCore)
|
target_link_libraries(yasim-proptest SimGearCore)
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
#include "Atmosphere.hpp"
|
|
||||||
|
|
||||||
using namespace yasim;
|
|
||||||
|
|
||||||
int main(int argc, char** argv)
|
|
||||||
{
|
|
||||||
Atmosphere a;
|
|
||||||
if (a.test()) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
|
@ -76,6 +76,7 @@ add_test(MktimeUnitTests ${TESTSUITE_OUTPUT_DIR}/run_test_suite --ctest -u Mktim
|
||||||
add_test(NasalSysUnitTests ${TESTSUITE_OUTPUT_DIR}/run_test_suite --ctest -u NasalSysTests)
|
add_test(NasalSysUnitTests ${TESTSUITE_OUTPUT_DIR}/run_test_suite --ctest -u NasalSysTests)
|
||||||
add_test(NavaidsUnitTests ${TESTSUITE_OUTPUT_DIR}/run_test_suite --ctest -u NavaidsTests)
|
add_test(NavaidsUnitTests ${TESTSUITE_OUTPUT_DIR}/run_test_suite --ctest -u NavaidsTests)
|
||||||
add_test(PosInitUnitTests ${TESTSUITE_OUTPUT_DIR}/run_test_suite --ctest -u PosInitTests)
|
add_test(PosInitUnitTests ${TESTSUITE_OUTPUT_DIR}/run_test_suite --ctest -u PosInitTests)
|
||||||
|
add_test(YASimAtmosphereUnitTests ${TESTSUITE_OUTPUT_DIR}/run_test_suite --ctest -u YASimAtmosphereTests)
|
||||||
|
|
||||||
# GUI test suites.
|
# GUI test suites.
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
#include <FDM/AIWake/AIWakeGroup.hxx>
|
#include <FDM/AIWake/AIWakeGroup.hxx>
|
||||||
#include <FDM/AIWake/AircraftMesh.hxx>
|
#include <FDM/AIWake/AircraftMesh.hxx>
|
||||||
#include <FDM/AIWake/WakeMesh.hxx>
|
#include <FDM/AIWake/WakeMesh.hxx>
|
||||||
|
#include <FDM/YASim/Atmosphere.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Access variables from src/FDM/AIWake/AIWakeGroup.hxx.
|
// Access variables from src/FDM/AIWake/AIWakeGroup.hxx.
|
||||||
|
@ -45,3 +47,17 @@ FGTestApi::PrivateAccessor::FDM::Accessor::read_FDM_AIWake_WakeMesh_Gamma(WakeMe
|
||||||
{
|
{
|
||||||
return instance->Gamma;
|
return instance->Gamma;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Access variables from src/FDM/YASim/Atmosphere.hxx.
|
||||||
|
float
|
||||||
|
FGTestApi::PrivateAccessor::FDM::Accessor::read_FDM_YASim_Atmosphere_numColumns(std::unique_ptr<yasim::Atmosphere> &instance) const
|
||||||
|
{
|
||||||
|
return instance->numColumns;
|
||||||
|
}
|
||||||
|
|
||||||
|
float
|
||||||
|
FGTestApi::PrivateAccessor::FDM::Accessor::read_FDM_YASim_Atmosphere_data(std::unique_ptr<yasim::Atmosphere> &instance, int i, int j) const
|
||||||
|
{
|
||||||
|
return instance->data[i][j];
|
||||||
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define _FG_PRIVATE_ACCESSOR_FDM_HXX
|
#define _FG_PRIVATE_ACCESSOR_FDM_HXX
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <simgear/math/SGMath.hxx>
|
#include <simgear/math/SGMath.hxx>
|
||||||
|
@ -15,6 +16,11 @@ class WakeMesh;
|
||||||
class AeroElement;
|
class AeroElement;
|
||||||
typedef SGSharedPtr<AeroElement> AeroElement_ptr;
|
typedef SGSharedPtr<AeroElement> AeroElement_ptr;
|
||||||
|
|
||||||
|
// Forward declaration for: src/FDM/YASim.
|
||||||
|
namespace yasim {
|
||||||
|
class Atmosphere;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
namespace FGTestApi {
|
namespace FGTestApi {
|
||||||
namespace PrivateAccessor {
|
namespace PrivateAccessor {
|
||||||
|
@ -34,6 +40,10 @@ public:
|
||||||
const std::vector<AeroElement_ptr> read_FDM_AIWake_WakeMesh_elements(WakeMesh* instance) const;
|
const std::vector<AeroElement_ptr> read_FDM_AIWake_WakeMesh_elements(WakeMesh* instance) const;
|
||||||
int read_FDM_AIWake_WakeMesh_nelm(WakeMesh* instance) const;
|
int read_FDM_AIWake_WakeMesh_nelm(WakeMesh* instance) const;
|
||||||
double **read_FDM_AIWake_WakeMesh_Gamma(WakeMesh* instance) const;
|
double **read_FDM_AIWake_WakeMesh_Gamma(WakeMesh* instance) const;
|
||||||
|
|
||||||
|
// Access variables from src/FDM/YASim/Atmosphere.hxx.
|
||||||
|
float read_FDM_YASim_Atmosphere_numColumns(std::unique_ptr<yasim::Atmosphere> &instance) const;
|
||||||
|
float read_FDM_YASim_Atmosphere_data(std::unique_ptr<yasim::Atmosphere> &instance, int i, int j) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // End of namespace FDM.
|
} // End of namespace FDM.
|
||||||
|
|
|
@ -3,6 +3,7 @@ set(TESTSUITE_SOURCES
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/TestSuite.cxx
|
${CMAKE_CURRENT_SOURCE_DIR}/TestSuite.cxx
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/test_ls_matrix.cxx
|
${CMAKE_CURRENT_SOURCE_DIR}/test_ls_matrix.cxx
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/testAeroElement.cxx
|
${CMAKE_CURRENT_SOURCE_DIR}/testAeroElement.cxx
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/testYASimAtmosphere.cxx
|
||||||
PARENT_SCOPE
|
PARENT_SCOPE
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -10,5 +11,6 @@ set(TESTSUITE_HEADERS
|
||||||
${TESTSUITE_HEADERS}
|
${TESTSUITE_HEADERS}
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/test_ls_matrix.hxx
|
${CMAKE_CURRENT_SOURCE_DIR}/test_ls_matrix.hxx
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/testAeroElement.hxx
|
${CMAKE_CURRENT_SOURCE_DIR}/testAeroElement.hxx
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/testYASimAtmosphere.hxx
|
||||||
PARENT_SCOPE
|
PARENT_SCOPE
|
||||||
)
|
)
|
||||||
|
|
|
@ -19,8 +19,10 @@
|
||||||
|
|
||||||
#include "test_ls_matrix.hxx"
|
#include "test_ls_matrix.hxx"
|
||||||
#include "testAeroElement.hxx"
|
#include "testAeroElement.hxx"
|
||||||
|
#include "testYASimAtmosphere.hxx"
|
||||||
|
|
||||||
|
|
||||||
// Set up the unit tests.
|
// Set up the unit tests.
|
||||||
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(AeroElementTests, "Unit tests");
|
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(AeroElementTests, "Unit tests");
|
||||||
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(LaRCSimMatrixTests, "Unit tests");
|
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(LaRCSimMatrixTests, "Unit tests");
|
||||||
|
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(YASimAtmosphereTests, "Unit tests");
|
||||||
|
|
44
test_suite/unit_tests/FDM/testYASimAtmosphere.cxx
Normal file
44
test_suite/unit_tests/FDM/testYASimAtmosphere.cxx
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
#include "test_suite/FGTestApi/PrivateAccessorFDM.hxx"
|
||||||
|
|
||||||
|
#include "testYASimAtmosphere.hxx"
|
||||||
|
|
||||||
|
#include <FDM/YASim/Math.hpp>
|
||||||
|
|
||||||
|
#include <simgear/debug/logstream.hxx>
|
||||||
|
|
||||||
|
|
||||||
|
using namespace yasim;
|
||||||
|
|
||||||
|
void YASimAtmosphereTests::setUp()
|
||||||
|
{
|
||||||
|
a.reset(new Atmosphere());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void YASimAtmosphereTests::tearDown()
|
||||||
|
{
|
||||||
|
a.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void YASimAtmosphereTests::testAtmosphere()
|
||||||
|
{
|
||||||
|
auto accessor = FGTestApi::PrivateAccessor::FDM::Accessor();
|
||||||
|
|
||||||
|
int numColumns = accessor.read_FDM_YASim_Atmosphere_numColumns(a);
|
||||||
|
int maxTableIndex = a->maxTableIndex();
|
||||||
|
int rows = maxTableIndex + 1;
|
||||||
|
const float maxDeviation = 0.0002f;
|
||||||
|
|
||||||
|
SG_LOG(SG_GENERAL, SG_INFO, "Columns = " << numColumns);
|
||||||
|
SG_LOG(SG_GENERAL, SG_INFO, "Rows = " << rows);
|
||||||
|
|
||||||
|
for (int alt = 0; alt <= maxTableIndex; alt++) {
|
||||||
|
float density = a->calcStdDensity(accessor.read_FDM_YASim_Atmosphere_data(a, alt, a->PRESSURE), accessor.read_FDM_YASim_Atmosphere_data(a, alt, a->TEMPERATURE));
|
||||||
|
float delta = accessor.read_FDM_YASim_Atmosphere_data(a, alt, a->DENSITY) - density;
|
||||||
|
SG_LOG(SG_GENERAL, SG_INFO, "alt: " << alt << ", delta: " << delta);
|
||||||
|
if (Math::abs(delta) > maxDeviation)
|
||||||
|
CPPUNIT_FAIL("Deviation above limit of 0.0002");
|
||||||
|
}
|
||||||
|
SG_LOG(SG_GENERAL, SG_INFO, "Deviation below " << maxDeviation << " for all rows.");
|
||||||
|
}
|
52
test_suite/unit_tests/FDM/testYASimAtmosphere.hxx
Normal file
52
test_suite/unit_tests/FDM/testYASimAtmosphere.hxx
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Edward d'Auvergne
|
||||||
|
*
|
||||||
|
* This file is part of the program FlightGear.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef _FG_YASIM_ATMOSPHERE_UNIT_TESTS_HXX
|
||||||
|
#define _FG_YASIM_ATMOSPHERE_UNIT_TESTS_HXX
|
||||||
|
|
||||||
|
#include <cppunit/extensions/HelperMacros.h>
|
||||||
|
#include <cppunit/TestFixture.h>
|
||||||
|
|
||||||
|
#include <src/FDM/YASim/Atmosphere.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
// The unit tests.
|
||||||
|
class YASimAtmosphereTests : public CppUnit::TestFixture
|
||||||
|
{
|
||||||
|
// Set up the test suite.
|
||||||
|
CPPUNIT_TEST_SUITE(YASimAtmosphereTests);
|
||||||
|
CPPUNIT_TEST(testAtmosphere);
|
||||||
|
CPPUNIT_TEST_SUITE_END();
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Set up function for each test.
|
||||||
|
void setUp();
|
||||||
|
|
||||||
|
// Clean up after each test.
|
||||||
|
void tearDown();
|
||||||
|
|
||||||
|
// The tests.
|
||||||
|
void testAtmosphere();
|
||||||
|
|
||||||
|
// Data.
|
||||||
|
std::unique_ptr<yasim::Atmosphere> a;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _FG_YASIM_ATMOSPHERE_UNIT_TESTS_HXX
|
Loading…
Reference in a new issue