Updated to pass unit tests on linux

Added two additional selected_output tests:
  TestSelectedOutputFileMultipleRuns
  TestGetSelectedOutputRowCountMultipleRuns
This commit is contained in:
Charlton, Scott R 2023-08-26 18:15:23 -06:00
parent 9919afd8ab
commit 431e4201ed
4 changed files with 100 additions and 26 deletions

View File

@ -153,3 +153,19 @@ size_t FileTest::Size(void)
{ {
return ::FileSize(_fn.c_str()); return ::FileSize(_fn.c_str());
} }
size_t FileTest::LineCount(void)
{
size_t nlines = 0;
if (::FileExists(_fn.c_str()))
{
std::ifstream ifs(_fn.c_str(), std::ifstream::in);
std::string line;
while (std::getline(ifs, line))
{
++nlines;
}
ifs.close();
}
return nlines;
}

View File

@ -25,6 +25,7 @@ public:
bool Exists(void); bool Exists(void);
int Delete(void); int Delete(void);
size_t Size(void); size_t Size(void);
size_t LineCount(void);
protected: protected:
std::string _fn; std::string _fn;

View File

@ -3261,12 +3261,88 @@ TEST(TestIPhreeqc, TestGetSelectedOutputStringLineCount)
TEST(TestIPhreeqc, TestGetSelectedOutputStringLineCountMultipleRuns) TEST(TestIPhreeqc, TestGetSelectedOutputStringLineCountMultipleRuns)
{ {
IPhreeqc obj; IPhreeqc obj;
int retval = 0;
obj.LoadDatabase("llnl.dat"); ASSERT_EQ(0, obj.LoadDatabase("llnl.dat"));
ASSERT_EQ(false, obj.GetSelectedOutputStringOn()); ASSERT_EQ(false, obj.GetSelectedOutputStringOn());
obj.SetSelectedOutputStringOn(true); obj.SetSelectedOutputStringOn(true);
ASSERT_EQ(true, obj.GetSelectedOutputStringOn()); ASSERT_EQ(true, obj.GetSelectedOutputStringOn());
retval = obj.RunString(R"(
SOLUTION 1
C 1
Ca 1
Na 1
EQUILIBRIUM_PHASES
calcite 0 0.01
SELECTED_OUTPUT
-totals C Ca Na
)");
ASSERT_EQ(0, retval);
ASSERT_EQ(3, obj.GetSelectedOutputStringLineCount()); // header + i_soln + react
retval = obj.RunString(R"(
SOLUTION 1
C 2
Ca 2
Na 2
)");
ASSERT_EQ(0, retval);
ASSERT_EQ(2, obj.GetSelectedOutputStringLineCount()); // header + i_soln
}
TEST(TestIPhreeqc, TestSelectedOutputFileMultipleRuns)
{
FileTest selout("TestSelectedOutputFileMultipleRuns.sel");
ASSERT_TRUE(selout.RemoveExisting());
IPhreeqc obj;
int retval = 0;
ASSERT_EQ(0, obj.LoadDatabase("llnl.dat"));
ASSERT_EQ(false, obj.GetSelectedOutputFileOn());
obj.SetSelectedOutputFileOn(true);
ASSERT_EQ(true, obj.GetSelectedOutputFileOn());
retval = obj.RunString(R"(
SOLUTION 1
C 1
Ca 1
Na 1
EQUILIBRIUM_PHASES
calcite 0 0.01
SELECTED_OUTPUT
-file TestSelectedOutputFileMultipleRuns.sel
-totals C Ca Na
)");
ASSERT_EQ(0, retval);
ASSERT_EQ(3, selout.LineCount()); // header + i_soln + react
retval = obj.RunString(R"(
SOLUTION 1
C 2
Ca 2
Na 2
)");
ASSERT_EQ(0, retval);
ASSERT_EQ(2, selout.LineCount()); // header + i_soln
}
TEST(TestIPhreeqc, TestGetSelectedOutputRowCountMultipleRuns)
{
IPhreeqc obj;
ASSERT_EQ(0, obj.LoadDatabase("llnl.dat"));
obj.RunString(R"( obj.RunString(R"(
SOLUTION 1 SOLUTION 1
C 1 C 1
@ -3280,7 +3356,7 @@ TEST(TestIPhreeqc, TestGetSelectedOutputStringLineCountMultipleRuns)
-totals C Ca Na -totals C Ca Na
)"); )");
ASSERT_EQ(3, obj.GetSelectedOutputStringLineCount()); // header + i_soln + react ASSERT_EQ(3, obj.GetSelectedOutputRowCount()); // header + i_soln + react
obj.RunString(R"( obj.RunString(R"(
SOLUTION 1 SOLUTION 1
@ -3288,7 +3364,7 @@ TEST(TestIPhreeqc, TestGetSelectedOutputStringLineCountMultipleRuns)
Ca 2 Ca 2
Na 2 Na 2
)"); )");
ASSERT_EQ(2, obj.GetSelectedOutputStringLineCount()); // header + i_soln ASSERT_EQ(2, obj.GetSelectedOutputRowCount()); // header + i_soln
} }
TEST(TestIPhreeqc, TestGetSelectedOutputStringLine) TEST(TestIPhreeqc, TestGetSelectedOutputStringLine)

View File

@ -1103,17 +1103,8 @@ void IPhreeqc::UnLoadDatabase(void)
delete (*itt).second; delete (*itt).second;
} }
this->SelectedOutputMap.clear(); this->SelectedOutputMap.clear();
this->SelectedOutputStringMap.clear();
std::map< int, std::string >::iterator mit = this->SelectedOutputStringMap.begin(); this->SelectedOutputLinesMap.clear();
for (; mit != this->SelectedOutputStringMap.begin(); ++mit)
{
(*mit).second.clear();
}
std::map< int, std::vector< std::string > >::iterator it = this->SelectedOutputLinesMap.begin();
for (; it != this->SelectedOutputLinesMap.begin(); ++it)
{
(*it).second.clear();
}
// clear dump string // clear dump string
@ -1164,6 +1155,8 @@ void IPhreeqc::check_database(const char* sz_routine)
delete (*it).second; delete (*it).second;
} }
this->SelectedOutputMap.clear(); this->SelectedOutputMap.clear();
this->SelectedOutputStringMap.clear();
this->SelectedOutputLinesMap.clear();
// release // release
this->LogString.clear(); this->LogString.clear();
@ -1171,18 +1164,6 @@ void IPhreeqc::check_database(const char* sz_routine)
this->OutputString.clear(); this->OutputString.clear();
this->OutputLines.clear(); this->OutputLines.clear();
// clear selected_output string storage
// GetSelectedOutputStringLine and GetSelectedOutputString
std::map< int, std::string >::iterator mit = SelectedOutputStringMap.begin();
for (; mit != SelectedOutputStringMap.end(); ++mit)
{
(*mit).second.clear();
}
std::map< int, std::vector< std::string > >::iterator lit = this->SelectedOutputLinesMap.begin();
for (; lit != this->SelectedOutputLinesMap.end(); ++lit)
{
(*lit).second.clear();
}
if (!this->DatabaseLoaded) if (!this->DatabaseLoaded)
{ {