From d62fa566ba513a0f726ebd5a7914a43bd9b7cd05 Mon Sep 17 00:00:00 2001 From: Phil Ahrenkiel Date: Thu, 4 Jan 2024 11:14:13 -0700 Subject: [PATCH] Organize test code. --- src/HPWH.cc | 9 ++++- test/testCalcUEF.cc | 94 ++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 96 insertions(+), 7 deletions(-) diff --git a/src/HPWH.cc b/src/HPWH.cc index 1c226914..40536c1a 100644 --- a/src/HPWH.cc +++ b/src/HPWH.cc @@ -5403,7 +5403,14 @@ HPWH::Usage HPWH::findUsageFromFirstHourRating() { return Usage::Medium; } HPWH::Usage HPWH::findUsageFromMaximumGPM_Rating() { - if (tankVolume_L < L_TO_GAL(1.7)) + // Assume flow rate unlimited for heat-exchange models + if (hasHeatExchanger) + { + return Usage::High; + } + + // Assume max. flow rate = tankVolume / (1 min) + else if (tankVolume_L < L_TO_GAL(1.7)) { return Usage::VerySmall; } diff --git a/test/testCalcUEF.cc b/test/testCalcUEF.cc index 69059a14..77f9b801 100644 --- a/test/testCalcUEF.cc +++ b/test/testCalcUEF.cc @@ -20,14 +20,96 @@ static bool testCalcUEF(const std::string& sModelName, double& UEF) return hpwh.calcUEF(hpwh.findUsageFromMaximumGPM_Rating(), UEF); } -int main(int, char**) +int main(int argc, char* argv[]) { - double UEF; - ASSERTTRUE(testCalcUEF("AOSmithHPTS50", UEF)); - ASSERTTRUE(cmpd(UEF, 4.4091)); + bool validNumArgs = false; + bool runUnitTests = false; - ASSERTTRUE(testCalcUEF("AquaThermAire", UEF)); - ASSERTTRUE(cmpd(UEF, 3.5848)); + // process command line arguments + std::string sPresetOrFile = "Preset"; + std::string sModelName; + if (argc == 1) + { + runUnitTests = true; + } + else if (argc == 2) + { + sModelName = argv[1]; + validNumArgs = true; + runUnitTests = false; + } + else if (argc == 3) + { + sPresetOrFile = argv[1]; + sModelName = argv[2]; + validNumArgs = true; + runUnitTests = false; + } + + if (runUnitTests) + { + double UEF; + ASSERTTRUE(testCalcUEF("AOSmithHPTS50", UEF)); + ASSERTTRUE(cmpd(UEF, 4.4091)); + + ASSERTTRUE(testCalcUEF("AquaThermAire", UEF)); + ASSERTTRUE(cmpd(UEF, 3.5848)); + + return 0; + } + + if (!validNumArgs) { + cout << "Invalid input:\n\ + To run all unit tests, provide ZERO arguments.\n\ + To determine the UEF for a particular model spec, provide ONE or TWO arguments:\n\ + \t[model spec Type (i.e., Preset (default) or File)]\n\ + \t[model spec Name (i.e., Sanden80)]\n"; + exit(1); + } + + for (auto& c : sPresetOrFile) + { + c = static_cast(std::tolower(static_cast(c))); + } + + HPWH hpwh; + bool validModel = false; + if (sPresetOrFile == "preset") + { + HPWH::MODELS model = mapStringToPreset(sModelName); + if (hpwh.HPWHinit_presets(model) == 0) + { + validModel = true; + } + } + else + { + std::string inputFile = sModelName + ".txt"; + if (hpwh.HPWHinit_file(inputFile) == 0) + { + validModel = true; + } + } + + if (!validModel) + { + cout << "Invalid input: Model name not found.\n"; + exit(1); + } + + sPresetOrFile[0] = static_cast(std::toupper(static_cast(sPresetOrFile[0]))); + std::cout << "Spec type: " << sPresetOrFile << "\n"; + std::cout << "Model name: " << sModelName << "\n"; + + double UEF = 0.; + if(hpwh.calcUEF(hpwh.findUsageFromMaximumGPM_Rating(), UEF)) + { + std::cout << "UEF: " << UEF << "\n"; + } + else + { + std::cout << "Unable to determine UEF.\n"; + } return 0; }