All tests passing on windows; before inverse change

git-svn-id: svn://136.177.114.72/svn_GW/IPhreeqc/branches/multi_punch@7952 1feff8c3-07ed-0310-ac33-dd36852eb9cd
This commit is contained in:
Scott R Charlton 2013-08-23 04:46:35 +00:00
parent 187f8598b3
commit 7bdca161c8
5 changed files with 225 additions and 68 deletions

View File

@ -22,6 +22,8 @@ const char DUMP_FILENAME_FORMAT[] = "dump.%d.out";
std::map<size_t, IPhreeqc*> IPhreeqc::Instances;
size_t IPhreeqc::InstancesIndex = 0;
static const char empty[] = "";
IPhreeqc::IPhreeqc(void)
: DatabaseLoaded(false)
@ -39,7 +41,8 @@ IPhreeqc::IPhreeqc(void)
, ErrorReporter(0)
, WarningStringOn(true)
, WarningReporter(0)
, SelectedOutput(0)
, PtrSelectedOutput(0)
, CurrentSelectedOutputUserNumber(1)
, SelectedOutputStringOn(false)
, PhreeqcPtr(0)
, input_file(0)
@ -49,7 +52,7 @@ IPhreeqc::IPhreeqc(void)
this->ErrorReporter = new CErrorReporter<std::ostringstream>;
this->WarningReporter = new CErrorReporter<std::ostringstream>;
this->SelectedOutput = new CSelectedOutput();
this->PtrSelectedOutput = new CSelectedOutput();
this->PhreeqcPtr = new Phreeqc(this);
ASSERT(this->PhreeqcPtr->phast == 0);
@ -83,7 +86,7 @@ IPhreeqc::~IPhreeqc(void)
this->OutputFileOn = false;
#endif
delete this->PhreeqcPtr;
delete this->SelectedOutput;
delete this->PtrSelectedOutput;
delete this->WarningReporter;
delete this->ErrorReporter;
@ -329,13 +332,13 @@ bool IPhreeqc::GetOutputStringOn(void)const
int IPhreeqc::GetSelectedOutputColumnCount(void)const
{
return (int)this->SelectedOutput->GetColCount();
return (int)this->PtrSelectedOutput->GetColCount();
}
const char* IPhreeqc::GetSelectedOutputFileName(void)const
{
static const char* empty = "";
std::map< int, std::string >::const_iterator ci = this->SelectedOutputFileNameMap.find(1);
static const char empty[] = "";
std::map< int, std::string >::const_iterator ci = this->SelectedOutputFileNameMap.find(this->CurrentSelectedOutputUserNumber);
if (ci != this->SelectedOutputFileNameMap.end())
{
return (*ci).second.c_str();
@ -350,7 +353,7 @@ bool IPhreeqc::GetSelectedOutputFileOn(void)const
int IPhreeqc::GetSelectedOutputRowCount(void)const
{
return (int)this->SelectedOutput->GetRowCount();
return (int)this->PtrSelectedOutput->GetRowCount();
}
const char* IPhreeqc::GetSelectedOutputString(void)const
@ -360,7 +363,12 @@ const char* IPhreeqc::GetSelectedOutputString(void)const
{
return err_msg;
}
return this->SelectedOutputString.c_str();
std::map< int, std::string >::const_iterator cit = this->SelectedOutputStringMap.find(this->CurrentSelectedOutputUserNumber);
if (cit != this->SelectedOutputStringMap.end())
{
return (*cit).second.c_str();
}
return empty;
}
const char* IPhreeqc::GetSelectedOutputStringLine(int n)
@ -370,12 +378,17 @@ const char* IPhreeqc::GetSelectedOutputStringLine(int n)
{
return empty;
}
return this->SelectedOutputLines[n].c_str();
return this->SelectedOutputLinesMap[this->CurrentSelectedOutputUserNumber][n].c_str();
}
int IPhreeqc::GetSelectedOutputStringLineCount(void)const
{
return (int)this->SelectedOutputLines.size();
std::map< int, std::vector < std::string > >::const_iterator cit = this->SelectedOutputLinesMap.find(this->CurrentSelectedOutputUserNumber);
if (cit != this->SelectedOutputLinesMap.end())
{
return (*cit).second.size();
}
return (int)0;
}
bool IPhreeqc::GetSelectedOutputStringOn(void)const
@ -393,7 +406,7 @@ VRESULT IPhreeqc::GetSelectedOutputValue(int row, int col, VAR* pVAR)
return VR_INVALIDARG;
}
VRESULT v = this->SelectedOutput->Get(row, col, pVAR);
VRESULT v = this->PtrSelectedOutput->Get(row, col, pVAR);
switch (v)
{
case VR_OK:
@ -501,7 +514,7 @@ int IPhreeqc::LoadDatabase(const char* filename)
// cleanup
//
this->UnLoadDatabase();
this->SelectedOutput->Clear();
this->PtrSelectedOutput->Clear();
// open file
//
@ -551,7 +564,7 @@ int IPhreeqc::LoadDatabaseString(const char* input)
//
this->UnLoadDatabase();
this->SelectedOutput->Clear();
this->PtrSelectedOutput->Clear();
std::string s(input);
std::istringstream iss(s);
@ -735,6 +748,11 @@ int IPhreeqc::RunString(const char* input)
return this->PhreeqcPtr->get_input_errors();
}
void IPhreeqc::SetCurrentSelectedOutputUserNumber(int n)
{
this->CurrentSelectedOutputUserNumber = n;
}
void IPhreeqc::SetDumpFileName(const char *filename)
{
if (filename && ::strlen(filename))
@ -850,10 +868,20 @@ void IPhreeqc::UnLoadDatabase(void)
// clear selectedoutput
//
ASSERT(this->SelectedOutput);
this->SelectedOutput->Clear();
this->SelectedOutputString.clear();
this->SelectedOutputLines.clear();
ASSERT(this->PtrSelectedOutput);
this->PtrSelectedOutput->Clear();
std::map< int, std::string >::iterator mit = SelectedOutputStringMap.begin();
for (; mit != 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
//
@ -871,7 +899,7 @@ void IPhreeqc::UnLoadDatabase(void)
int IPhreeqc::EndRow(void)
{
if (this->SelectedOutput->GetRowCount() <= 1)
if (this->PtrSelectedOutput->GetRowCount() <= 1)
{
// ensure all user_punch headings are included
ASSERT(this->PhreeqcPtr->n_user_punch_index >= 0);
@ -879,17 +907,17 @@ int IPhreeqc::EndRow(void)
{
for (size_t i = this->PhreeqcPtr->n_user_punch_index; i < this->PhreeqcPtr->current_user_punch->Get_headings().size(); ++i)
{
this->SelectedOutput->PushBackEmpty(this->PhreeqcPtr->current_user_punch->Get_headings()[i].c_str());
this->PtrSelectedOutput->PushBackEmpty(this->PhreeqcPtr->current_user_punch->Get_headings()[i].c_str());
}
}
}
return this->SelectedOutput->EndRow();
return this->PtrSelectedOutput->EndRow();
}
void IPhreeqc::check_database(const char* sz_routine)
{
this->ErrorReporter->Clear();
this->SelectedOutput->Clear();
this->PtrSelectedOutput->Clear();
if (!this->DatabaseLoaded)
{
@ -912,13 +940,24 @@ void IPhreeqc::do_run(const char* sz_routine, std::istream* pis, PFN_PRERUN_CALL
pfn_pre(cookie);
}
///{{{ REPLACE WITH A CLEAR ROUTINE
// release
this->LogString.clear();
this->LogLines.clear();
this->OutputString.clear();
this->OutputLines.clear();
this->SelectedOutputString.clear();
this->SelectedOutputLines.clear();
std::map< int, std::string >::iterator mit = SelectedOutputStringMap.begin();
for (; mit != 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();
}
///}}}
/*
* set read callback
@ -953,15 +992,31 @@ void IPhreeqc::do_run(const char* sz_routine, std::istream* pis, PFN_PRERUN_CALL
if (this->PhreeqcPtr->read_input() == EOF)
break;
std::map< int, class SelectedOutput >::iterator mit = this->PhreeqcPtr->SelectedOutput_map.begin();
bool bWarning = false;
std::map< int, SelectedOutput >::iterator mit = this->PhreeqcPtr->SelectedOutput_map.begin();
for (; mit != this->PhreeqcPtr->SelectedOutput_map.end(); ++mit)
{
if (this->PhreeqcPtr->simulation > 1 && save_punch_in && (*mit).second.Get_new_def())
if (this->CurrentSelectedOutputMap.find(&(*mit).second) == this->CurrentSelectedOutputMap.end())
{
std::map< int, CSelectedOutput* >::value_type item((*mit).first, new CSelectedOutput());
this->SelectedOutputMap.insert(item);
// SelectedOutput
this->CurrentSelectedOutputMap.insert(
std::map< SelectedOutput*, CSelectedOutput* >::value_type(
&(*mit).second, item.second));
// SelectedOutputString
this->CurrentToStringMap.insert(
std::map< SelectedOutput*, std::string* >::value_type(
&(*mit).second, &this->SelectedOutputStringMap[(*mit).first]));
}
if (this->PhreeqcPtr->simulation > 1 && save_punch_in && (*mit).second.Get_new_def() && !bWarning)
{
std::ostringstream oss;
oss << sz_routine << ": Warning SELECTED_OUTPUT has been redefined.\n";
this->PhreeqcPtr->warning_msg(oss.str().c_str());
break;
bWarning = true;
}
}
if (this->PhreeqcPtr->simulation > 1 && this->PhreeqcPtr->keycount[Keywords::KEY_USER_PUNCH] > 0)
@ -1311,12 +1366,16 @@ void IPhreeqc::do_run(const char* sz_routine, std::istream* pis, PFN_PRERUN_CALL
if (this->SelectedOutputStringOn)
{
// output lines
std::istringstream iss(this->SelectedOutputString);
std::string line;
while (std::getline(iss, line))
std::map< int, std::string >::iterator mit = this->SelectedOutputStringMap.begin();
for (; mit != this->SelectedOutputStringMap.end(); ++mit)
{
this->SelectedOutputLines.push_back(line);
// output lines
std::istringstream iss((*mit).second);
std::string line;
while (std::getline(iss, line))
{
this->SelectedOutputLinesMap[(*mit).first].push_back(line);
}
}
}
}
@ -1426,7 +1485,7 @@ void IPhreeqc::punch_msg(const char *str)
{
if (this->SelectedOutputStringOn && this->punch_on)
{
this->SelectedOutputString += str;
*(this->CurrentToStringMap[this->PhreeqcPtr->current_selected_output]) += str;
}
ASSERT(!(this->SelectedOutputFileOn != (this->PhreeqcPtr->current_selected_output->Get_punch_ostream() != 0)));
this->PHRQ_io::punch_msg(str);
@ -1526,9 +1585,9 @@ void IPhreeqc::fpunchf(const char *name, const char *format, double d)
this->PHRQ_io::fpunchf(name, format, d);
if (this->SelectedOutputStringOn && this->punch_on)
{
PHRQ_io::fpunchf_helper(&this->SelectedOutputString, format, d);
PHRQ_io::fpunchf_helper(this->CurrentToStringMap[this->PhreeqcPtr->current_selected_output], format, d);
}
this->SelectedOutput->PushBackDouble(name, d);
this->PtrSelectedOutput->PushBackDouble(name, d);
}
catch (std::bad_alloc)
{
@ -1543,9 +1602,9 @@ void IPhreeqc::fpunchf(const char *name, const char *format, char *s)
this->PHRQ_io::fpunchf(name, format, s);
if (this->SelectedOutputStringOn && this->punch_on)
{
PHRQ_io::fpunchf_helper(&this->SelectedOutputString, format, s);
PHRQ_io::fpunchf_helper(this->CurrentToStringMap[this->PhreeqcPtr->current_selected_output], format, s);
}
this->SelectedOutput->PushBackString(name, s);
this->PtrSelectedOutput->PushBackString(name, s);
}
catch (std::bad_alloc)
{
@ -1560,9 +1619,9 @@ void IPhreeqc::fpunchf(const char *name, const char *format, int i)
this->PHRQ_io::fpunchf(name, format, i);
if (this->SelectedOutputStringOn && this->punch_on)
{
PHRQ_io::fpunchf_helper(&this->SelectedOutputString, format, i);
PHRQ_io::fpunchf_helper(this->CurrentToStringMap[this->PhreeqcPtr->current_selected_output], format, i);
}
this->SelectedOutput->PushBackLong(name, (long)i);
this->PtrSelectedOutput->PushBackLong(name, (long)i);
}
catch (std::bad_alloc)
{

View File

@ -23,6 +23,7 @@
class Phreeqc;
class IErrorReporter;
class CSelectedOutput;
class SelectedOutput;
/**
* @class IPhreeqcStop
@ -791,6 +792,17 @@ public:
void SetSelectedOutputStringOn(bool bValue);
/**
* Sets the selected output string switch on or off. This switch controls whether or not the data normally sent
* to the selected output file are stored in a buffer for retrieval. The initial setting is false.
* @param bValue If true, captures the output defined by the <B>SELECTED_OUTPUT</B> keyword into a string buffer;
* if false, output defined by the <B>SELECTED_OUTPUT</B> keyword is not captured to a string buffer.
* @see GetSelectedOutputFileOn, GetSelectedOutputString, GetSelectedOutputStringOn, GetSelectedOutputStringLine, GetSelectedOutputStringLineCount, SetSelectedOutputFileOn
*/
void SetCurrentSelectedOutputUserNumber(int n);
public:
// overrides
virtual void error_msg(const char *str, bool stop=false);
@ -860,8 +872,13 @@ protected:
std::string WarningString;
std::vector< std::string > WarningLines;
CSelectedOutput *SelectedOutput;
std::string StringInput;
int CurrentSelectedOutputUserNumber;
CSelectedOutput *PtrSelectedOutput;
std::map< int, CSelectedOutput* > SelectedOutputMap;
std::map< SelectedOutput*, CSelectedOutput* > CurrentSelectedOutputMap;
std::map< SelectedOutput*, std::string* > CurrentToStringMap;
std::map< class SelectedOutput*, int > InverseSelectedOutputMap;
std::string StringInput;
std::string DumpString;
std::vector< std::string > DumpLines;
@ -875,9 +892,9 @@ protected:
std::string LogFileName;
std::string DumpFileName;
bool SelectedOutputStringOn;
std::string SelectedOutputString;
std::vector< std::string > SelectedOutputLines;
bool SelectedOutputStringOn;
std::map< int, std::string > SelectedOutputStringMap;
std::map< int, std::vector< std::string > > SelectedOutputLinesMap;
protected:
Phreeqc* PhreeqcPtr;

View File

@ -3476,7 +3476,7 @@ void TestIPhreeqc::TestRunFileMultiPunchOn(void)
IPhreeqc obj;
CPPUNIT_ASSERT_EQUAL(0, obj.LoadDatabase("phreeqc.dat"));
CPPUNIT_ASSERT_EQUAL(0, obj.LoadDatabase("..\\database\\phreeqc.dat"));
obj.SetSelectedOutputFileOn(true);
CPPUNIT_ASSERT_EQUAL(0, obj.RunFile("multi_punch"));
@ -3498,7 +3498,7 @@ void TestIPhreeqc::TestRunFileMultiPunchOff(void)
IPhreeqc obj;
CPPUNIT_ASSERT_EQUAL(0, obj.LoadDatabase("phreeqc.dat"));
CPPUNIT_ASSERT_EQUAL(0, obj.LoadDatabase("..\\database\\phreeqc.dat"));
obj.SetOutputFileOn(false);
obj.SetErrorFileOn(false);
obj.SetLogFileOn(false);
@ -3527,7 +3527,7 @@ void TestIPhreeqc::TestRunFileMultiPunchSet(void)
IPhreeqc obj;
CPPUNIT_ASSERT_EQUAL(0, obj.LoadDatabase("phreeqc.dat"));
CPPUNIT_ASSERT_EQUAL(0, obj.LoadDatabase("..\\database\\phreeqc.dat"));
obj.SetSelectedOutputFileOn(true);
obj.SetSelectedOutputFileName(called.GetName().c_str());
CPPUNIT_ASSERT_EQUAL(0, obj.RunFile("multi_punch"));
@ -3555,7 +3555,7 @@ void TestIPhreeqc::TestRunFileMultiPunchNoSet(void)
FileTest unset3(obj.sel_file_name(3));
CPPUNIT_ASSERT( unset3.RemoveExisting() );
CPPUNIT_ASSERT_EQUAL(0, obj.LoadDatabase("phreeqc.dat"));
CPPUNIT_ASSERT_EQUAL(0, obj.LoadDatabase("..\\database\\phreeqc.dat"));
obj.SetSelectedOutputFileOn(true);
obj.SetSelectedOutputFileName(set.GetName().c_str());
CPPUNIT_ASSERT_EQUAL(0, obj.RunFile("multi_punch_no_set"));
@ -3565,3 +3565,82 @@ void TestIPhreeqc::TestRunFileMultiPunchNoSet(void)
CPPUNIT_ASSERT( unset2.VerifyExists() );
CPPUNIT_ASSERT( unset3.VerifyExists() );
}
void TestIPhreeqc::TestMultiPunchSelectedOutputStringOn(void)
{
IPhreeqc obj;
CPPUNIT_ASSERT_EQUAL(0, obj.LoadDatabase("..\\database\\phreeqc.dat"));
obj.SetSelectedOutputStringOn(true);
CPPUNIT_ASSERT_EQUAL(0, obj.RunFile("multi_punch"));
CPPUNIT_ASSERT_EQUAL(6, obj.GetSelectedOutputStringLineCount());
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "sim\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "state\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "soln\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "dist_x\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "time\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "step\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "pH\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "pe\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "reaction\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "temp\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "Alk\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "mu\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "mass_H2O\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "charge\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "pct_err\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "Na\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "Ca\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "m_Na+\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "m_HCO3-\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "la_Ca+2\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "la_CO3-2\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "CO2(g)\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "d_CO2(g)\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "dolomite\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "d_dolomite\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "si_Halite\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "pressure\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "total mol\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "volume\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "g_N2(g)\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "k_Calcite\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "dk_Calcite\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "s_Anhydrite\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "s_Barite\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "V_TOTAL_C\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(1), " 8\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(2), " 10\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(3), " 11\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(4), " 12\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(5), " 14\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(1), "react\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(2), "react\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(3), "i_soln\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(4), "i_soln\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(5), "react\t") != NULL );
obj.SetCurrentSelectedOutputUserNumber(2);
CPPUNIT_ASSERT_EQUAL(7, obj.GetSelectedOutputStringLineCount());
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "si_Halite\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "si_Calcite\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(2), "Dummy1\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(2), "Dummy2\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(3), "Dummy1\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(3), "Dummy2\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(4), "Dummy1\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(4), "Dummy2\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(5), "Dummy1\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(5), "Dummy2\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(6), "Dummy1\t") != NULL );
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(6), "Dummy2\t") != NULL );
}

View File

@ -68,6 +68,7 @@ class TestIPhreeqc : public CppUnit::TestFixture
CPPUNIT_TEST( TestRunFileMultiPunchOff );
CPPUNIT_TEST( TestRunFileMultiPunchSet );
CPPUNIT_TEST( TestRunFileMultiPunchNoSet );
CPPUNIT_TEST( TestMultiPunchSelectedOutputStringOn );
CPPUNIT_TEST_SUITE_END();
public:
@ -136,6 +137,7 @@ public:
void TestRunFileMultiPunchOff(void);
void TestRunFileMultiPunchSet(void);
void TestRunFileMultiPunchNoSet(void);
void TestMultiPunchSelectedOutputStringOn(void);
protected:
void TestFileOnOff(const char* FILENAME, bool output_file_on, bool error_file_on, bool log_file_on, bool selected_output_file_on, bool dump_file_on);

View File

@ -410,12 +410,12 @@ TestSelectedOutput::TestTooManyHeadings()
{
IPhreeqc p;
CPPUNIT_ASSERT_EQUAL((size_t)0, p.SelectedOutput->GetColCount());
CPPUNIT_ASSERT_EQUAL((size_t)0, p.SelectedOutput->GetRowCount());
CPPUNIT_ASSERT_EQUAL((size_t)0, p.PtrSelectedOutput->GetColCount());
CPPUNIT_ASSERT_EQUAL((size_t)0, p.PtrSelectedOutput->GetRowCount());
p.SelectedOutput->Clear();
CPPUNIT_ASSERT_EQUAL((size_t)0, p.SelectedOutput->GetColCount());
CPPUNIT_ASSERT_EQUAL((size_t)0, p.SelectedOutput->GetRowCount());
p.PtrSelectedOutput->Clear();
CPPUNIT_ASSERT_EQUAL((size_t)0, p.PtrSelectedOutput->GetColCount());
CPPUNIT_ASSERT_EQUAL((size_t)0, p.PtrSelectedOutput->GetRowCount());
// USER_PUNCH
// -headings 1.name 1.type 1.moles
@ -431,12 +431,12 @@ TestSelectedOutput::TestTooManyHeadings()
p.PhreeqcPtr->UserPunch_map[1].Set_headings(headings);
CPPUNIT_ASSERT_EQUAL(0, p.EndRow());
CPPUNIT_ASSERT_EQUAL((size_t)3, p.SelectedOutput->GetColCount());
CPPUNIT_ASSERT_EQUAL((size_t)2, p.SelectedOutput->GetRowCount());
CPPUNIT_ASSERT_EQUAL((size_t)3, p.PtrSelectedOutput->GetColCount());
CPPUNIT_ASSERT_EQUAL((size_t)2, p.PtrSelectedOutput->GetRowCount());
#if defined(_DEBUG)
p.SelectedOutput->Dump("TestTooManyHeadings");
p.PtrSelectedOutput->Dump("TestTooManyHeadings");
#endif
// clean up headings
@ -445,13 +445,13 @@ TestSelectedOutput::TestTooManyHeadings()
CVar head0, head1, head2;
CVar val0, val1, val2;
CPPUNIT_ASSERT_EQUAL(VR_OK, p.SelectedOutput->Get(0, 0, &head0));
CPPUNIT_ASSERT_EQUAL(VR_OK, p.SelectedOutput->Get(0, 1, &head1));
CPPUNIT_ASSERT_EQUAL(VR_OK, p.SelectedOutput->Get(0, 2, &head2));
CPPUNIT_ASSERT_EQUAL(VR_OK, p.PtrSelectedOutput->Get(0, 0, &head0));
CPPUNIT_ASSERT_EQUAL(VR_OK, p.PtrSelectedOutput->Get(0, 1, &head1));
CPPUNIT_ASSERT_EQUAL(VR_OK, p.PtrSelectedOutput->Get(0, 2, &head2));
CPPUNIT_ASSERT_EQUAL(VR_OK, p.SelectedOutput->Get(1, 0, &val0));
CPPUNIT_ASSERT_EQUAL(VR_OK, p.SelectedOutput->Get(1, 1, &val1));
CPPUNIT_ASSERT_EQUAL(VR_OK, p.SelectedOutput->Get(1, 2, &val2));
CPPUNIT_ASSERT_EQUAL(VR_OK, p.PtrSelectedOutput->Get(1, 0, &val0));
CPPUNIT_ASSERT_EQUAL(VR_OK, p.PtrSelectedOutput->Get(1, 1, &val1));
CPPUNIT_ASSERT_EQUAL(VR_OK, p.PtrSelectedOutput->Get(1, 2, &val2));
CPPUNIT_ASSERT_EQUAL(TT_STRING, head0.type);
CPPUNIT_ASSERT_EQUAL(TT_STRING, head1.type);
@ -466,15 +466,15 @@ TestSelectedOutput::TestTooManyHeadings()
CPPUNIT_ASSERT_EQUAL(std::string("1.moles"), std::string(head2.sVal));
CPPUNIT_ASSERT_EQUAL(0, p.SelectedOutput->PushBackLong("sim", 1));
CPPUNIT_ASSERT_EQUAL(0, p.SelectedOutput->PushBackString("state", "i_soln"));
CPPUNIT_ASSERT_EQUAL(0, p.SelectedOutput->PushBackLong("soln", 22));
CPPUNIT_ASSERT_EQUAL(0, p.PtrSelectedOutput->PushBackLong("sim", 1));
CPPUNIT_ASSERT_EQUAL(0, p.PtrSelectedOutput->PushBackString("state", "i_soln"));
CPPUNIT_ASSERT_EQUAL(0, p.PtrSelectedOutput->PushBackLong("soln", 22));
CPPUNIT_ASSERT_EQUAL(0, p.SelectedOutput->EndRow());
CPPUNIT_ASSERT_EQUAL((size_t)6, p.SelectedOutput->GetColCount());
CPPUNIT_ASSERT_EQUAL((size_t)3, p.SelectedOutput->GetRowCount());
CPPUNIT_ASSERT_EQUAL(0, p.PtrSelectedOutput->EndRow());
CPPUNIT_ASSERT_EQUAL((size_t)6, p.PtrSelectedOutput->GetColCount());
CPPUNIT_ASSERT_EQUAL((size_t)3, p.PtrSelectedOutput->GetRowCount());
#if defined(_DEBUG)
p.SelectedOutput->Dump("TestTooManyHeadings");
p.PtrSelectedOutput->Dump("TestTooManyHeadings");
#endif
}