What’s New in the Pulse Physiology Engine 4.4.0
×
EngineTest.h
1/* Distributed under the Apache License, Version 2.0.
2 See accompanying NOTICE file for details.*/
3
4#include "cdm/utils/testing/SETestManager.h"
5#include "engine/human_adult/whole_body/Engine.h"
6#include "engine/human_adult/whole_body/controller/Controller.h"
7
8class SESubstance;
9class SETestSuite;
10class HowToTracker;
11
12namespace pulse { namespace human_adult_whole_body
13{
14 class EngineTest : public SETestManager
15 {
16 public:
17 EngineTest(Logger* logger = nullptr);
18 virtual ~EngineTest();
19
20 virtual bool RunTest(const std::string& testName, const std::string& sOutputDirectory) override;
21
22 protected:
23 virtual void FillFunctionMap() override;
24 typedef void(EngineTest::* testFunction)(const std::string&);
25 std::map<std::string, testFunction> testMap;
26 std::stringstream m_ss;
27
28
30 // Circuit Hemodynamics and Compartment Transport Tests //
31 // System Specific Functions Tests as well //
33 public:
35 // Cardiovascular //
37 void CardiovascularCircuitAndTransportTest(const std::string& sTestDirectory);
38 void CardiovascularAndRenalCircuitAndTransportTest(const std::string& sTestDirectory);
39 void CardiovascularAndTissueCircuitAndTransportTest(const std::string& sTestDirectory);
40 void CardiovascularAndCerebrospinalFluidCircuitAndTransportTest(const std::string& sTestDirectory);
41 void ExpandedLungsCardiovascularCircuitAndTransportTest(const std::string& sTestDirectory);
42 void FullCardiovascularCircuitAndTransportTest(const std::string& sTestDirectory);
43 void ExpandedLungsFullCardiovascularCircuitAndTransportTest(const std::string& sTestDirectory);
44 void CardiovascularBloodGasesTest(const std::string& sTestDirectory);// Everything with Saturation
45 void ExpandedLungsCardiovascularBloodGasesTest(const std::string& sTestDirectory);// Everything with Saturation
46 // Cardiovascular Utilities //
47 void TuneCardiovascularCircuitTest(const std::string& sTestDirectory);
48 void CardiovascularCircuitScaleTests(const std::string& sTestDirectory);
49 protected:
50 enum CardiovascularDriver { Sinusoid = 0, Heart };
51 enum Expanded { None=0, Vasculature, Respiratory }; // Vasculature expansion defined by ComputationalLife
52 void SinusoidHeartDriver(double time_s, double heartRate_s, double& lHeartElastance, double& rHeartElastance);
53 void CardiovascularCircuitAndTransportTest(CardiovascularDriver driverType,
54 double complianceScale, double resistanceScale, double volumeScale, double heartRate_bpm,
55 double sysRes, double sysComp, double aortaRes, double aortaComp, double rightHeartRes, double venaCavaComp,
56 bool balanceBloodGases, bool connectCSF, bool connectTissue, bool expandedKidneys, bool expandedLungs,
57 const std::string& sTestDirectory, const std::string& sTestName, bool breakOutResults);
58 void TuneCardiovascularCircuitTest(SETestSuite& testSuite, const std::string& sTestDirectory, const std::string& sTestName, SEPatient& patient);
59
60 double m_MeanAortaPressure;
61 double m_MeanCVPressure;
62 double m_Systolic;
63 double m_Diastolic;
64 double m_Pulse;
65 double m_CardiacOutput;
66
67 public:
69 // Renal //
71 void RenalCircuitAndTransportTest(const std::string& sTestDirectory);
72 void RenalTGFFeedbackTest(const std::string& sTestDirectory);
73 void RenalTGFandUPRFeedbackTest(const std::string& sTestDirectory);
74 void RenalSecretionTest(const std::string& sTestDirectory);
75 void RenalUrinateTest(const std::string& sTestDirectory);
76 protected:
77 enum RenalFeedback { TGF, TGFandUPR };
78 void RenalFeedbackTest(RenalFeedback feedback, const std::string& sTestDirectory, const std::string& sTestName);
79 enum RenalSystems { Secretion, Urinating};
80 void RenalSystemTest(RenalSystems systemtest, const std::string& sTestDirectory, const std::string& sTestName);
81
82 public:
84 // Respiratory //
86 void RespiratoryCircuitAndTransportTest(const std::string& sTestDirectory);
87 void ExpandedLungsRespiratoryCircuitAndTransportTest(const std::string& sTestDirectory);
88 void RespiratoryDriverTest(const std::string& sTestDirectory);
89 protected:
90 enum RespiratoryConfiguration { RespiratorySolo,
91 ExpandedLungsRespiratorySolo,
92 AnesthesiaMachineSolo,
93 RespiratoryWithAnesthesiaMachine,
94 ExpandedLungsRespiratoryWithAnesthesiaMachine,
95 RespiratoryWithInhaler,
96 ExpandedLungsRespiratoryWithInhaler,
97 RespiratoryWithMechanicalVentilation,
98 ExpandedLungsRespiratoryWithMechanicalVentilation,
99 MechanicalVentilatorSolo,
100 RespiratoryWithMechanicalVentilator,
101 ExpandedLungsRespiratoryWithMechanicalVentilator
102 };
103 void RespiratoryCircuitAndTransportTest(RespiratoryConfiguration config, bool expandedLungs, const std::string& sTestDirectory);
104
105 public:
107 // Anesthesia Machine //
109 void AnesthesiaMachineCircuitAndTransportTest(const std::string& sTestDirectory);
110 void RespiratoryWithAnesthesiaMachineCircuitAndTransportTest(const std::string& sTestDirectory);
111 void ExpandedLungsRespiratoryWithAnesthesiaMachineCircuitAndTransportTest(const std::string& sTestDirectory);
112 protected:
113 void AnesthesiaMachineCircuitAndTransportTest(RespiratoryConfiguration config, bool expandedLungs, const std::string& sTestDirectory);
114
115 public:
117 // Inhaler //
119 void RespiratoryWithInhalerCircuitAndTransportTest(const std::string& sTestDirectory);
120 void ExpandedLungsRespiratoryWithInhalerCircuitAndTransportTest(const std::string& sTestDirectory);
121 protected:
122
123 public:
125 // Mechanical Ventilator //
127 void MechanicalVentilatorCircuitAndTransportTest(const std::string& sTestDirectory);
128 void RespiratoryWithMechanicalVentilatorCircuitAndTransportTest(const std::string& sTestDirectory);
129 void ExpandedLungsRespiratoryWithMechanicalVentilatorCircuitAndTransportTest(const std::string& sTestDirectory);
130 protected:
131 void MechanicalVentilatorCircuitAndTransportTest(RespiratoryConfiguration config, bool expandedLungs, const std::string& sTestDirectory);
132
133 public:
135 // Mechanical Ventilation //
137 void RespiratoryWithMechanicalVentilationCircuitAndTransportTest(const std::string& sTestDirectory);
138 void ExpandedLungsRespiratoryWithMechanicalVentilationCircuitAndTransportTest(const std::string& sTestDirectory);
139 protected:
140
141 public:
143 // Environment and Energy //
144 void InternalTemperatureVariableBMRCircuitTest(const std::string& sTestDirectory);
145 void InternalTemperatureVariableSkinCircuitTest(const std::string& sTestDirectory);
146 void InternalTemperatureVariableCoreCircuitTest(const std::string& sTestDirectory);
147 void EnvironmentVariableTemperatureCircuitTest(const std::string& sTestDirectory);
148 void CombinedInternalAndEnvironmentVariableBMRandTemperatureCircuitTest(const std::string& sTestDirectory);
149 void CombinedInternalAndEnvironmentSkinTempDropCircuitTest(const std::string& sTestDirectory);
150 void EnvironmentISO7730ComparisonTest(const std::string& sTestDirectory);
151 protected:
152
153 public:
155 // Tissue Tests //
157 void DiffusionClearanceExcretionTests(const std::string& rptDirectory);
158 void AlveolarCarbonDioxideDiffusionTest(const std::string& rptDirectory);
159 void AlveolarOxygenDiffusionTest(const std::string& rptDirectory);
160 void InstantPlusSimpleDiffusionTest(const std::string& rptDirectory);
161 void SimpleDiffusionTwoCompartmentTest(const std::string& rptDirectory);
162 void SimpleDiffusionFourCompartmentTest(const std::string& rptDirectory);
163 void SimpleDiffusionHierarchyTest(const std::string& rptDirectory);
164 void FacilitatedDiffusionTest(const std::string& rptDirectory);
165 protected:
166 void DistributeMass(SETestSuite& testSuite);
167 void PerfusionLimitedDiffusionTest(SETestSuite& testSuite);
168 void InstantDiffusionTest(SETestSuite& testSuite);
169 void ActiveTransportTest(SETestSuite& testSuite);
170 void GenericClearanceTest(SETestSuite& testSuite);
171 void GenericExcretionTest(SETestSuite& testSuite);
172
173 public:
175 // Nervous Tests //
177 void BrainInjuryTest(const std::string& rptDirectory);
178 protected:
179
180 public:
182 // Acid Base Engine Tests //
184 void FourCompartmentTestSimple(const std::string& sOutputDirectory);
185 void AcidBaseFourCompartmentTest(const std::string& sOutputDirectory);
186 void FiveCompartmentTestWithDiffusion(const std::string& sOutputDirectory);
187 void AcidBaseFourCompartmentTestWithProductionConsumption(const std::string& sOutputDirectory);
188 void AcidBaseFiveCompartmentTestWithDiffusion(const std::string& sOutputDirectory);
189 void AcidBaseFiveCompartmentTestWithProductionConsumptionAndDiffusion(const std::string& sOutputDirectory);
190 protected:
191 void FourCompartmentTest(bool usingAcidBase, bool usingProductionConsumption, bool usingDiffusion, const std::string& sOutputDirectory);
192 bool usingAcidBase;
193 bool usingProductionConsumption;
194 bool usingDiffusion;
195
196 public:
198 // Acid Base Tests //
200 void AcidBaseMathTest(const std::string& sOutputDirectory);
201 void AcidBaseFeedbackTest(const std::string& sOutputDirectory);
202 void AcidBaseLimitsTest(const std::string& sOutputDirectory);
203 void AcidBaseExtremeTest(const std::string & rptDirectory);
204 void AcidBaseBloodGasTests(const std::string& sOutputDirectory);
205 protected:
206 enum bloodType { ARTERIAL, VENOUS, CAPILLARY, RESPIRATORY_ACIDOSIS, METABOLIC_ALKALOSIS, METABOLIC_ACIDOSIS, RESPIRATORY_ALKALOSIS, CUSTOM };
207 void AcidBaseBloodGasTest(Controller& bg, bloodType compartment, SETestSuite& testSuite);
208
209 public:
211 // Aerosol Tests //
213 void AerosolTest(const std::string& sOutputDirectory);
214 protected:
215 void SizeIndependentDepositionEfficencyCoefficientsTest(SETestSuite& suite, SESubstance& substance, double expectedAirwayCoeff, double expectedTracheaCoeff, double expectedDeadSpaceCoeff, double expectedAlveoliCoeff);
216 void DepositionFractionTest(SETestSuite& suite, SESubstance& substance, double expectedAirwayDepFrac, double expectedTracheaDepFrac,
217 double expectedLeftDeadSpaceDepFrac, double expectedLeftAlveoliDepFrac, double expectedRightDeadSpaceDepFrac, double expectedRightAlveoliDepFrac);
218
219 public:
221 // General Engine Tests //
223 void ReadScenarios(const std::string& sOutputDirectory);
224 void ReuseEngine(const std::string& sOutputDirectory);
225 void SerializationTest(const std::string& sTestDirectory);
226 void SetupPatientTest(const std::string& sTestDirectory);
227
228 void ConditionCombinations(const std::string& rptDirectory);
229 void SolverSpeedTest(const std::string& sTestDirectory);
230
231 protected:
232 void InhalerState(PhysiologyEngine* bg, HowToTracker& tracker);
233 void InjectSuccsState(PhysiologyEngine* bg, HowToTracker& tracker, const SESubstance& succs);
234
235 void SetupPatient(SETestSuite& testSuite, const std::string& sTestDirectory, const std::string& sTestName, SEPatient* patient, SEPatient* expectedPatient, bool expectedPass);
236 bool CheckSetupPatient(SEPatient& setupPatient, SEPatient& expectedPatient, std::vector<std::string>& errs);
237 public:
239 // Black Box Tests //
241 void EmptyBlackBoxTest(const std::string& sOutputDirectory);
242 void ImposeFlowBlackBoxTest(const std::string& sOutputDirectory);
243 void ImposePressureAndFlowBlackBoxTest(const std::string& sOutputDirectory);
244 protected:
245
246 };
247END_NAMESPACE_EX
Definition: Logger.h:71
Definition: PhysiologyEngine.h:70
Definition: SEPatient.h:13
Definition: SESubstance.h:16
Definition: SETestManager.h:10
Definition: SETestSuite.h:10
Definition: Logger.h:14

Distributed under the Apache License, Version 2.0.

See accompanying NOTICE file for details.