Skip to content

Commit

Permalink
move EMSCallFrom from DataGlobalConstants to EMSManager
Browse files Browse the repository at this point in the history
  • Loading branch information
mitchute committed Oct 11, 2020
1 parent 2d501c8 commit 73a70e7
Show file tree
Hide file tree
Showing 27 changed files with 197 additions and 196 deletions.
2 changes: 1 addition & 1 deletion src/EnergyPlus/DXCoils.cc
Original file line number Diff line number Diff line change
Expand Up @@ -6007,7 +6007,7 @@ namespace DXCoils {
lAlphaBlanks2.deallocate();
lNumericBlanks2.deallocate();
bool anyEMSRan;
ManageEMS(state, DataGlobalConstants::EMSCallFrom::ComponentGetInput, anyEMSRan, ObjexxFCL::Optional_int_const());
ManageEMS(state, EMSManager::EMSCallFrom::ComponentGetInput, anyEMSRan, ObjexxFCL::Optional_int_const());
}

void InitDXCoil(EnergyPlusData &state, int const DXCoilNum) // number of the current DX coil unit being simulated
Expand Down
25 changes: 0 additions & 25 deletions src/EnergyPlus/DataGlobalConstants.hh
Original file line number Diff line number Diff line change
Expand Up @@ -252,31 +252,6 @@ namespace DataGlobalConstants {
ReadAllWeatherData = 6 // a weather period for reading all weather data prior to the simulation
};

// Parameters for EMS Calling Points
enum class EMSCallFrom {
Unassigned,
ZoneSizing,
SystemSizing,
BeginNewEnvironment,
BeginNewEnvironmentAfterWarmUp,
BeginTimestepBeforePredictor,
BeforeHVACManagers,
AfterHVACManagers,
HVACIterationLoop,
EndSystemTimestepBeforeHVACReporting,
EndSystemTimestepAfterHVACReporting,
EndZoneTimestepBeforeZoneReporting,
EndZoneTimestepAfterZoneReporting,
SetupSimulation,
ExternalInterface,
ComponentGetInput,
UserDefinedComponentModel,
UnitarySystemSizing,
BeginZoneTimestepBeforeInitHeatBalance,
BeginZoneTimestepAfterInitHeatBalance,
BeginZoneTimestepBeforeSetCurrentWeather
};

Real64 constexpr MaxEXPArg () { return 709.78; } // maximum exponent in EXP() function
Real64 constexpr Pi () { return 3.14159265358979324; } // Pi 3.1415926535897932384626435
Real64 constexpr PiOvr2 () { return Pi() / 2.0; } // Pi/2
Expand Down
4 changes: 0 additions & 4 deletions src/EnergyPlus/DataRuntimeLanguage.cc
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@
#include <ObjexxFCL/string.functions.hh>

// EnergyPlus Headers
#include <EnergyPlus/DataPrecisionGlobals.hh>
#include <EnergyPlus/DataRuntimeLanguage.hh>
#include <EnergyPlus/UtilityRoutines.hh>

Expand All @@ -69,9 +68,6 @@ namespace DataRuntimeLanguage {

// METHODOLOGY EMPLOYED: na

// Using/Aliasing
using namespace DataPrecisionGlobals;

// Data
// module should be available to other modules and routines.
// Thus, all variables in this module must be PUBLIC.
Expand Down
5 changes: 3 additions & 2 deletions src/EnergyPlus/DataRuntimeLanguage.hh
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@

// EnergyPlus Headers
#include <EnergyPlus/DataGlobals.hh>
#include <EnergyPlus/EMSManager.hh>
#include <EnergyPlus/EnergyPlus.hh>

namespace EnergyPlus {
Expand Down Expand Up @@ -353,12 +354,12 @@ namespace DataRuntimeLanguage {
// Members
// structure for Erl program calling managers
std::string Name; // user defined name for calling manager
DataGlobalConstants::EMSCallFrom CallingPoint; // EMS Calling point for this manager, see parameters emsCallFrom*
EMSManager::EMSCallFrom CallingPoint; // EMS Calling point for this manager, see parameters emsCallFrom*
int NumErlPrograms; // count of total number of Erl programs called by this manager
Array1D_int ErlProgramARR; // list of integer pointers to Erl programs used by this manager

// Default Constructor
EMSProgramCallManagementType() : CallingPoint(DataGlobalConstants::EMSCallFrom::Unassigned), NumErlPrograms(0)
EMSProgramCallManagementType() : CallingPoint(EMSManager::EMSCallFrom::Unassigned), NumErlPrograms(0)
{
}
};
Expand Down
72 changes: 36 additions & 36 deletions src/EnergyPlus/EMSManager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ namespace EMSManager {
// MODULE SUBROUTINES:

void ManageEMS(EnergyPlusData &state,
DataGlobalConstants::EMSCallFrom const iCalledFrom, // indicates where subroutine was called from, parameters in DataGlobals.
EMSCallFrom const iCalledFrom, // indicates where subroutine was called from, parameters in DataGlobals.
bool &anyProgramRan, // true if any Erl programs ran for this call
Optional_int_const ProgramManagerToRun // specific program manager to run
)
Expand Down Expand Up @@ -283,7 +283,7 @@ namespace EMSManager {
anyProgramRan = false;
if (!AnyEnergyManagementSystemInModel) return; // quick return if nothing to do

if (iCalledFrom == DataGlobalConstants::EMSCallFrom::BeginNewEnvironment) {
if (iCalledFrom == EMSCallFrom::BeginNewEnvironment) {
BeginEnvrnInitializeRuntimeLanguage();
PluginManagement::onBeginEnvironment();
}
Expand All @@ -292,21 +292,21 @@ namespace EMSManager {

// also call plugins and callbacks here for convenience
bool anyPluginsOrCallbacksRan = false;
if (iCalledFrom != DataGlobalConstants::EMSCallFrom::UserDefinedComponentModel) { // don't run user-defined component plugins this way
if (iCalledFrom != EMSCallFrom::UserDefinedComponentModel) { // don't run user-defined component plugins this way
PluginManagement::runAnyRegisteredCallbacks(state, iCalledFrom, anyPluginsOrCallbacksRan);
if (anyPluginsOrCallbacksRan) {
anyProgramRan = true;
}
}

if (iCalledFrom == DataGlobalConstants::EMSCallFrom::SetupSimulation) {
if (iCalledFrom == EMSCallFrom::SetupSimulation) {
ProcessEMSInput(state, true);
return;
}

// Run the Erl programs depending on calling point.

if (iCalledFrom != DataGlobalConstants::EMSCallFrom::UserDefinedComponentModel) {
if (iCalledFrom != EMSCallFrom::UserDefinedComponentModel) {
for (ProgramManagerNum = 1; ProgramManagerNum <= NumProgramCallManagers; ++ProgramManagerNum) {

if (EMSProgramCallManager(ProgramManagerNum).CallingPoint == iCalledFrom) {
Expand All @@ -325,7 +325,7 @@ namespace EMSManager {
}
}

if (iCalledFrom == DataGlobalConstants::EMSCallFrom::ExternalInterface) {
if (iCalledFrom == EMSCallFrom::ExternalInterface) {
anyProgramRan = true;
}

Expand Down Expand Up @@ -375,7 +375,7 @@ namespace EMSManager {
ReportEMS();
}

void InitEMS(EnergyPlusData &state, DataGlobalConstants::EMSCallFrom const iCalledFrom) // indicates where subroutine was called from, parameters in DataGlobals.
void InitEMS(EnergyPlusData &state, EMSCallFrom const iCalledFrom) // indicates where subroutine was called from, parameters in DataGlobals.
{

// SUBROUTINE INFORMATION:
Expand Down Expand Up @@ -450,8 +450,8 @@ namespace EMSManager {

InitializeRuntimeLanguage(state);

if ((BeginEnvrnFlag) || (iCalledFrom == DataGlobalConstants::EMSCallFrom::ZoneSizing) || (iCalledFrom == DataGlobalConstants::EMSCallFrom::SystemSizing) ||
(iCalledFrom == DataGlobalConstants::EMSCallFrom::UserDefinedComponentModel)) {
if ((BeginEnvrnFlag) || (iCalledFrom == EMSCallFrom::ZoneSizing) || (iCalledFrom == EMSCallFrom::SystemSizing) ||
(iCalledFrom == EMSCallFrom::UserDefinedComponentModel)) {

// another pass at trying to setup input data.
if (FinishProcessingUserInput) {
Expand Down Expand Up @@ -942,41 +942,41 @@ namespace EMSManager {
auto const SELECT_CASE_var(cAlphaArgs(2));

if (SELECT_CASE_var == "BEGINNEWENVIRONMENT") {
EMSProgramCallManager(CallManagerNum).CallingPoint = DataGlobalConstants::EMSCallFrom::BeginNewEnvironment;
EMSProgramCallManager(CallManagerNum).CallingPoint = EMSCallFrom::BeginNewEnvironment;
} else if (SELECT_CASE_var == "BEGINZONETIMESTEPBEFORESETCURRENTWEATHER") {
EMSProgramCallManager(CallManagerNum).CallingPoint = DataGlobalConstants::EMSCallFrom::BeginZoneTimestepBeforeSetCurrentWeather;
EMSProgramCallManager(CallManagerNum).CallingPoint = EMSCallFrom::BeginZoneTimestepBeforeSetCurrentWeather;
} else if (SELECT_CASE_var == "AFTERNEWENVIRONMENTWARMUPISCOMPLETE") {
EMSProgramCallManager(CallManagerNum).CallingPoint = DataGlobalConstants::EMSCallFrom::BeginNewEnvironmentAfterWarmUp;
EMSProgramCallManager(CallManagerNum).CallingPoint = EMSCallFrom::BeginNewEnvironmentAfterWarmUp;
} else if (SELECT_CASE_var == "BEGINZONETIMESTEPBEFOREINITHEATBALANCE") {
EMSProgramCallManager(CallManagerNum).CallingPoint = DataGlobalConstants::EMSCallFrom::BeginZoneTimestepBeforeInitHeatBalance;
EMSProgramCallManager(CallManagerNum).CallingPoint = EMSCallFrom::BeginZoneTimestepBeforeInitHeatBalance;
} else if (SELECT_CASE_var == "BEGINZONETIMESTEPAFTERINITHEATBALANCE") {
EMSProgramCallManager(CallManagerNum).CallingPoint = DataGlobalConstants::EMSCallFrom::BeginZoneTimestepAfterInitHeatBalance;
EMSProgramCallManager(CallManagerNum).CallingPoint = EMSCallFrom::BeginZoneTimestepAfterInitHeatBalance;
} else if (SELECT_CASE_var == "BEGINTIMESTEPBEFOREPREDICTOR") {
EMSProgramCallManager(CallManagerNum).CallingPoint = DataGlobalConstants::EMSCallFrom::BeginTimestepBeforePredictor;
EMSProgramCallManager(CallManagerNum).CallingPoint = EMSCallFrom::BeginTimestepBeforePredictor;
} else if (SELECT_CASE_var == "AFTERPREDICTORBEFOREHVACMANAGERS") {
EMSProgramCallManager(CallManagerNum).CallingPoint = DataGlobalConstants::EMSCallFrom::BeforeHVACManagers;
EMSProgramCallManager(CallManagerNum).CallingPoint = EMSCallFrom::BeforeHVACManagers;
} else if (SELECT_CASE_var == "AFTERPREDICTORAFTERHVACMANAGERS") {
EMSProgramCallManager(CallManagerNum).CallingPoint = DataGlobalConstants::EMSCallFrom::AfterHVACManagers;
EMSProgramCallManager(CallManagerNum).CallingPoint = EMSCallFrom::AfterHVACManagers;
} else if (SELECT_CASE_var == "INSIDEHVACSYSTEMITERATIONLOOP") {
EMSProgramCallManager(CallManagerNum).CallingPoint = DataGlobalConstants::EMSCallFrom::HVACIterationLoop;
EMSProgramCallManager(CallManagerNum).CallingPoint = EMSCallFrom::HVACIterationLoop;
} else if (SELECT_CASE_var == "ENDOFZONETIMESTEPBEFOREZONEREPORTING") {
EMSProgramCallManager(CallManagerNum).CallingPoint = DataGlobalConstants::EMSCallFrom::EndZoneTimestepBeforeZoneReporting;
EMSProgramCallManager(CallManagerNum).CallingPoint = EMSCallFrom::EndZoneTimestepBeforeZoneReporting;
} else if (SELECT_CASE_var == "ENDOFZONETIMESTEPAFTERZONEREPORTING") {
EMSProgramCallManager(CallManagerNum).CallingPoint = DataGlobalConstants::EMSCallFrom::EndZoneTimestepAfterZoneReporting;
EMSProgramCallManager(CallManagerNum).CallingPoint = EMSCallFrom::EndZoneTimestepAfterZoneReporting;
} else if (SELECT_CASE_var == "ENDOFSYSTEMTIMESTEPBEFOREHVACREPORTING") {
EMSProgramCallManager(CallManagerNum).CallingPoint = DataGlobalConstants::EMSCallFrom::EndSystemTimestepBeforeHVACReporting;
EMSProgramCallManager(CallManagerNum).CallingPoint = EMSCallFrom::EndSystemTimestepBeforeHVACReporting;
} else if (SELECT_CASE_var == "ENDOFSYSTEMTIMESTEPAFTERHVACREPORTING") {
EMSProgramCallManager(CallManagerNum).CallingPoint = DataGlobalConstants::EMSCallFrom::EndSystemTimestepAfterHVACReporting;
EMSProgramCallManager(CallManagerNum).CallingPoint = EMSCallFrom::EndSystemTimestepAfterHVACReporting;
} else if (SELECT_CASE_var == "ENDOFZONESIZING") {
EMSProgramCallManager(CallManagerNum).CallingPoint = DataGlobalConstants::EMSCallFrom::ZoneSizing;
EMSProgramCallManager(CallManagerNum).CallingPoint = EMSCallFrom::ZoneSizing;
} else if (SELECT_CASE_var == "ENDOFSYSTEMSIZING") {
EMSProgramCallManager(CallManagerNum).CallingPoint = DataGlobalConstants::EMSCallFrom::SystemSizing;
EMSProgramCallManager(CallManagerNum).CallingPoint = EMSCallFrom::SystemSizing;
} else if (SELECT_CASE_var == "AFTERCOMPONENTINPUTREADIN") {
EMSProgramCallManager(CallManagerNum).CallingPoint = DataGlobalConstants::EMSCallFrom::ComponentGetInput;
EMSProgramCallManager(CallManagerNum).CallingPoint = EMSCallFrom::ComponentGetInput;
} else if (SELECT_CASE_var == "USERDEFINEDCOMPONENTMODEL") {
EMSProgramCallManager(CallManagerNum).CallingPoint = DataGlobalConstants::EMSCallFrom::UserDefinedComponentModel;
EMSProgramCallManager(CallManagerNum).CallingPoint = EMSCallFrom::UserDefinedComponentModel;
} else if (SELECT_CASE_var == "UNITARYSYSTEMSIZING") {
EMSProgramCallManager(CallManagerNum).CallingPoint = DataGlobalConstants::EMSCallFrom::UnitarySystemSizing;
EMSProgramCallManager(CallManagerNum).CallingPoint = EMSCallFrom::UnitarySystemSizing;
} else {
ShowSevereError("Invalid " + cAlphaFieldNames(2) + '=' + cAlphaArgs(2));
ShowContinueError("Entered in " + cCurrentModuleObject + '=' + cAlphaArgs(1));
Expand Down Expand Up @@ -1820,31 +1820,31 @@ namespace EMSManager {
nodeSetpointCheck.needsSetpointChecking = false;

if (nodeSetpointCheck.checkTemperatureSetPoint) {
nodeSetpointCheck.needsSetpointChecking |= !CheckIfNodeSetPointManaged(NodeNum, EMSManager::iTemperatureSetPoint, true);
nodeSetpointCheck.needsSetpointChecking |= !CheckIfNodeSetPointManaged(NodeNum, iTemperatureSetPoint, true);
}
if (nodeSetpointCheck.checkTemperatureMinSetPoint) {
nodeSetpointCheck.needsSetpointChecking |= !CheckIfNodeSetPointManaged(NodeNum, EMSManager::iTemperatureMinSetPoint, true);
nodeSetpointCheck.needsSetpointChecking |= !CheckIfNodeSetPointManaged(NodeNum, iTemperatureMinSetPoint, true);
}
if (nodeSetpointCheck.checkTemperatureMaxSetPoint) {
nodeSetpointCheck.needsSetpointChecking |= !CheckIfNodeSetPointManaged(NodeNum, EMSManager::iTemperatureMaxSetPoint, true);
nodeSetpointCheck.needsSetpointChecking |= !CheckIfNodeSetPointManaged(NodeNum, iTemperatureMaxSetPoint, true);
}
if (nodeSetpointCheck.checkHumidityRatioSetPoint) {
nodeSetpointCheck.needsSetpointChecking |= !CheckIfNodeSetPointManaged(NodeNum, EMSManager::iHumidityRatioSetPoint, true);
nodeSetpointCheck.needsSetpointChecking |= !CheckIfNodeSetPointManaged(NodeNum, iHumidityRatioSetPoint, true);
}
if (nodeSetpointCheck.checkHumidityRatioMinSetPoint) {
nodeSetpointCheck.needsSetpointChecking |= !CheckIfNodeSetPointManaged(NodeNum, EMSManager::iHumidityRatioMinSetPoint, true);
nodeSetpointCheck.needsSetpointChecking |= !CheckIfNodeSetPointManaged(NodeNum, iHumidityRatioMinSetPoint, true);
}
if (nodeSetpointCheck.checkHumidityRatioMaxSetPoint) {
nodeSetpointCheck.needsSetpointChecking |= !CheckIfNodeSetPointManaged(NodeNum, EMSManager::iHumidityRatioMaxSetPoint, true);
nodeSetpointCheck.needsSetpointChecking |= !CheckIfNodeSetPointManaged(NodeNum, iHumidityRatioMaxSetPoint, true);
}
if (nodeSetpointCheck.checkMassFlowRateSetPoint) {
nodeSetpointCheck.needsSetpointChecking |= !CheckIfNodeSetPointManaged(NodeNum, EMSManager::iMassFlowRateSetPoint, true);
nodeSetpointCheck.needsSetpointChecking |= !CheckIfNodeSetPointManaged(NodeNum, iMassFlowRateSetPoint, true);
}
if (nodeSetpointCheck.checkMassFlowRateMinSetPoint) {
nodeSetpointCheck.needsSetpointChecking |= !CheckIfNodeSetPointManaged(NodeNum, EMSManager::iMassFlowRateMinSetPoint, true);
nodeSetpointCheck.needsSetpointChecking |= !CheckIfNodeSetPointManaged(NodeNum, iMassFlowRateMinSetPoint, true);
}
if (nodeSetpointCheck.checkMassFlowRateMaxSetPoint) {
nodeSetpointCheck.needsSetpointChecking |= !CheckIfNodeSetPointManaged(NodeNum, EMSManager::iMassFlowRateMaxSetPoint, true);
nodeSetpointCheck.needsSetpointChecking |= !CheckIfNodeSetPointManaged(NodeNum, iMassFlowRateMaxSetPoint, true);
}

if (nodeSetpointCheck.needsSetpointChecking) {
Expand Down
29 changes: 27 additions & 2 deletions src/EnergyPlus/EMSManager.hh
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,31 @@ namespace EMSManager {
extern bool ZoneThermostatActuatorsHaveBeenSetup;
extern bool FinishProcessingUserInput; // Flag to indicate still need to process input

// Parameters for EMS Calling Points
enum class EMSCallFrom {
Unassigned,
ZoneSizing,
SystemSizing,
BeginNewEnvironment,
BeginNewEnvironmentAfterWarmUp,
BeginTimestepBeforePredictor,
BeforeHVACManagers,
AfterHVACManagers,
HVACIterationLoop,
EndSystemTimestepBeforeHVACReporting,
EndSystemTimestepAfterHVACReporting,
EndZoneTimestepBeforeZoneReporting,
EndZoneTimestepAfterZoneReporting,
SetupSimulation,
ExternalInterface,
ComponentGetInput,
UserDefinedComponentModel,
UnitarySystemSizing,
BeginZoneTimestepBeforeInitHeatBalance,
BeginZoneTimestepAfterInitHeatBalance,
BeginZoneTimestepBeforeSetCurrentWeather
};

// SUBROUTINE SPECIFICATIONS:

// Functions
Expand All @@ -95,12 +120,12 @@ namespace EMSManager {
// MODULE SUBROUTINES:

void ManageEMS(EnergyPlusData &state,
DataGlobalConstants::EMSCallFrom iCalledFrom, // indicates where subroutine was called from, parameters in DataGlobals.
EMSCallFrom iCalledFrom, // indicates where subroutine was called from, parameters in DataGlobals.
bool &anyProgramRan, // true if any Erl programs ran for this call
Optional_int_const ProgramManagerToRun = _ // specific program manager to run
);

void InitEMS(EnergyPlusData &state, DataGlobalConstants::EMSCallFrom iCalledFrom); // indicates where subroutine was called from, parameters in DataGlobals.
void InitEMS(EnergyPlusData &state, EMSCallFrom iCalledFrom); // indicates where subroutine was called from, parameters in DataGlobals.

void ReportEMS();

Expand Down
4 changes: 2 additions & 2 deletions src/EnergyPlus/ExternalInterface.cc
Original file line number Diff line number Diff line change
Expand Up @@ -942,7 +942,7 @@ namespace ExternalInterface {
// If we have Erl variables, we need to call ManageEMS so that they get updated in the Erl data structure
if (useEMS) {
bool anyRan;
ManageEMS(state, DataGlobalConstants::EMSCallFrom::ExternalInterface, anyRan, ObjexxFCL::Optional_int_const());
ManageEMS(state, EMSManager::EMSCallFrom::ExternalInterface, anyRan, ObjexxFCL::Optional_int_const());
}

FirstCallGetSetDoStep = false;
Expand Down Expand Up @@ -2408,7 +2408,7 @@ namespace ExternalInterface {
// If we have Erl variables, we need to call ManageEMS so that they get updated in the Erl data structure
if (useEMS) {
bool anyRan;
ManageEMS(state, DataGlobalConstants::EMSCallFrom::ExternalInterface, anyRan, ObjexxFCL::Optional_int_const());
ManageEMS(state, EMSManager::EMSCallFrom::ExternalInterface, anyRan, ObjexxFCL::Optional_int_const());
}

firstCall = false; // bug fix causing external interface to send zero at the beginning of sim, Thierry Nouidui
Expand Down
Loading

5 comments on commit 73a70e7

@nrel-bot-2c
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

global_dataGlobals_2_again (mitchute) - x86_64-Linux-Ubuntu-18.04-gcc-7.5-UnitTestsCoverage-Debug: Build Failed

Failures:\n

API Test Summary

  • Failed: 6
  • notrun: 3

Build Badge Test Badge Coverage Badge

@nrel-bot-2c
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

global_dataGlobals_2_again (mitchute) - x86_64-Linux-Ubuntu-18.04-gcc-7.5-IntegrationCoverage-Debug: Build Failed

Failures:\n

integration Test Summary

  • Passed: 2
  • Failed: 720

Build Badge Test Badge Coverage Badge

@nrel-bot-2b
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

global_dataGlobals_2_again (mitchute) - x86_64-Linux-Ubuntu-18.04-gcc-7.5: Build Failed

Failures:\n

API Test Summary

  • Failed: 6
  • notrun: 3

integration Test Summary

  • Passed: 2
  • Failed: 720

regression Test Summary

  • Passed: 735
  • Failed: 2

Build Badge Test Badge

@nrel-bot-3
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

global_dataGlobals_2_again (mitchute) - x86_64-MacOS-10.15-clang-11.0.0: OK (2983 of 2984 tests passed, 0 test warnings)

Failures:\n

integration Test Summary

  • Passed: 718
  • Failed: 1

Build Badge Test Badge

@nrel-bot
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

global_dataGlobals_2_again (mitchute) - Win64-Windows-10-VisualStudio-16: OK (2239 of 2240 tests passed, 0 test warnings)

Failures:\n

integration Test Summary

  • Passed: 718
  • Failed: 1

Build Badge Test Badge

Please sign in to comment.