diff --git a/src/IPhreeqc.cpp b/src/IPhreeqc.cpp index 491bc31b..e8115972 100644 --- a/src/IPhreeqc.cpp +++ b/src/IPhreeqc.cpp @@ -897,13 +897,12 @@ void IPhreeqc::SetSelectedOutputFileName(const char *filename) { // Can't use this->PhreeqcPtr->SelectedOutput_map since it's necessary // to override the default filename "selected_output_%d.%d.sel" - this->SelectedOutputFileNameMap[1] = std::string(filename); + this->SelectedOutputFileNameMap[this->CurrentSelectedOutputUserNumber] = std::string(filename); } } void IPhreeqc::SetSelectedOutputFileOn(bool bValue) { -// COMMENT: {9/12/2013 6:40:50 PM} this->SelectedOutputFileOn = bValue; if (0 <= this->CurrentSelectedOutputUserNumber) { this->SelectedOutputFileOnMap[this->CurrentSelectedOutputUserNumber] = bValue; @@ -1147,18 +1146,6 @@ void IPhreeqc::do_run(const char* sz_routine, std::istream* pis, PFN_PRERUN_CALL // TRUE ??? // // -// COMMENT: {9/12/2013 6:47:53 PM} if (!this->SelectedOutputFileOn) -// COMMENT: {9/12/2013 6:47:53 PM} { -// COMMENT: {9/12/2013 6:47:53 PM} std::map< int, SelectedOutput >::iterator it = this->PhreeqcPtr->SelectedOutput_map.begin(); -// COMMENT: {9/12/2013 6:47:53 PM} for (; it != this->PhreeqcPtr->SelectedOutput_map.end(); ++it) -// COMMENT: {9/12/2013 6:47:53 PM} { -// COMMENT: {9/12/2013 6:47:53 PM} ASSERT((*it).second.Get_punch_ostream() == 0); -// COMMENT: {9/12/2013 6:47:53 PM} } -// COMMENT: {9/12/2013 6:47:53 PM} } -// COMMENT: {9/12/2013 6:47:53 PM} else -// COMMENT: {9/12/2013 6:47:53 PM} { -// COMMENT: {9/12/2013 6:47:53 PM} ASSERT(TRUE); -// COMMENT: {9/12/2013 6:47:53 PM} } std::map< int, SelectedOutput >::iterator ai = this->PhreeqcPtr->SelectedOutput_map.begin(); for (; ai != this->PhreeqcPtr->SelectedOutput_map.end(); ++ai) { @@ -1182,7 +1169,6 @@ void IPhreeqc::do_run(const char* sz_routine, std::istream* pis, PFN_PRERUN_CALL std::map< int, SelectedOutput >::iterator it = this->PhreeqcPtr->SelectedOutput_map.begin(); for (; it != this->PhreeqcPtr->SelectedOutput_map.end(); ++it) { -// COMMENT: {9/12/2013 6:42:03 PM} if (this->SelectedOutputFileOn && !(*it).second.Get_punch_ostream()) if (this->SelectedOutputFileOnMap[(*it).first] && !(*it).second.Get_punch_ostream()) { // @@ -1225,7 +1211,6 @@ void IPhreeqc::do_run(const char* sz_routine, std::istream* pis, PFN_PRERUN_CALL std::map< int, SelectedOutput >::iterator it = this->PhreeqcPtr->SelectedOutput_map.begin(); for (; it != this->PhreeqcPtr->SelectedOutput_map.end(); ++it) { -// COMMENT: {9/12/2013 6:53:23 PM} if (this->SelectedOutputFileOn) if (this->SelectedOutputFileOnMap[(*it).first]) { ASSERT((*it).second.Get_punch_ostream()); diff --git a/unit/TestIPhreeqc.cpp b/unit/TestIPhreeqc.cpp index 427e4693..6cc37374 100644 --- a/unit/TestIPhreeqc.cpp +++ b/unit/TestIPhreeqc.cpp @@ -3540,6 +3540,7 @@ void TestIPhreeqc::TestRunFileMultiPunchNoSet(void) obj.SetCurrentSelectedOutputUserNumber(3); obj.SetSelectedOutputFileOn(true); + obj.SetCurrentSelectedOutputUserNumber(1); obj.SetSelectedOutputFileName(set.GetName().c_str()); CPPUNIT_ASSERT_EQUAL(0, obj.RunFile("multi_punch_no_set")); @@ -3704,11 +3705,11 @@ void TestIPhreeqc::TestMultiPunchCSelectedOutput(void) CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(5, 1, &var)); CPPUNIT_ASSERT_EQUAL(std::string("react"), std::string(var.sVal)); // pH - CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 7.30475, var.dVal, ::pow(10., -5) ); - CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(2, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 7.29765, var.dVal, ::pow(10., -5) ); - CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(3, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 6.99738, var.dVal, ::pow(10., -5) ); - CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(4, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 6.99698, var.dVal, ::pow(10., -5) ); - CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(5, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 7.2942 , var.dVal, ::pow(10., -5) ); + CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 7.30475, var.dVal, ::pow(10., -2) ); + CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(2, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 7.29765, var.dVal, ::pow(10., -2) ); + CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(3, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 6.99738, var.dVal, ::pow(10., -2) ); + CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(4, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 6.99698, var.dVal, ::pow(10., -2) ); + CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(5, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 7.2942 , var.dVal, ::pow(10., -2) ); // V_TOTAL_C CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 34, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 4.3729e-003, var.dVal, ::pow(10., -6) ); @@ -4017,5 +4018,48 @@ void TestIPhreeqc::TestGetCurrentSelectedOutputUserNumber(void) CPPUNIT_ASSERT_EQUAL(0, obj.LoadDatabase("../database/phreeqc.dat")); CPPUNIT_ASSERT_EQUAL(1, obj.GetCurrentSelectedOutputUserNumber()); CPPUNIT_ASSERT_EQUAL(0, obj.GetSelectedOutputCount()); - +} + +void TestIPhreeqc::TestMultiSetSelectedOutputFileName(void) +{ + FileTest set1("state.sel"); + CPPUNIT_ASSERT( set1.RemoveExisting() ); + + FileTest set2("si.sel"); + CPPUNIT_ASSERT( set2.RemoveExisting() ); + + IPhreeqc obj; + + CPPUNIT_ASSERT_EQUAL(0, obj.LoadDatabase("../database/phreeqc.dat")); + + CPPUNIT_ASSERT_EQUAL(VR_OK, obj.SetCurrentSelectedOutputUserNumber(1)); + obj.SetSelectedOutputStringOn(true); + obj.SetSelectedOutputFileOn(true); + obj.SetSelectedOutputFileName(set1.GetName().c_str()); + + CPPUNIT_ASSERT_EQUAL(VR_OK, obj.SetCurrentSelectedOutputUserNumber(2)); + obj.SetSelectedOutputStringOn(true); + obj.SetSelectedOutputFileOn(true); + obj.SetSelectedOutputFileName(set2.GetName().c_str()); + + obj.AccumulateLine("TITLE Temperature dependence of solubility"); + obj.AccumulateLine(" of gypsum and anhydrite "); + obj.AccumulateLine("SOLUTION 1 Pure water "); + obj.AccumulateLine(" pH 7.0 "); + obj.AccumulateLine(" temp 25.0 "); + obj.AccumulateLine("EQUILIBRIUM_PHASES 1 "); + obj.AccumulateLine(" Gypsum 0.0 1.0 "); + obj.AccumulateLine(" Anhydrite 0.0 1.0 "); + obj.AccumulateLine("REACTION_TEMPERATURE 1 "); + obj.AccumulateLine(" 25.0 75.0 in 51 steps "); + obj.AccumulateLine("SELECTED_OUTPUT 1 "); + obj.AccumulateLine(" -temperature "); + obj.AccumulateLine("SELECTED_OUTPUT 2 "); + obj.AccumulateLine(" -si anhydrite gypsum "); + obj.AccumulateLine("END "); + + CPPUNIT_ASSERT_EQUAL(0, obj.RunAccumulated()); + + CPPUNIT_ASSERT( set1.VerifyExists() ); + CPPUNIT_ASSERT( set2.VerifyExists() ); } diff --git a/unit/TestIPhreeqc.h b/unit/TestIPhreeqc.h index ced63c3a..d57e1bd0 100644 --- a/unit/TestIPhreeqc.h +++ b/unit/TestIPhreeqc.h @@ -73,6 +73,7 @@ class TestIPhreeqc : public CppUnit::TestFixture CPPUNIT_TEST( TestGetSelectedOutputCount ); CPPUNIT_TEST( TestGetNthSelectedOutputUserNumber ); CPPUNIT_TEST( TestGetCurrentSelectedOutputUserNumber ); + CPPUNIT_TEST( TestMultiSetSelectedOutputFileName ); CPPUNIT_TEST_SUITE_END(); public: @@ -146,6 +147,7 @@ public: void TestGetSelectedOutputCount(void); void TestGetNthSelectedOutputUserNumber(void); void TestGetCurrentSelectedOutputUserNumber(void); + void TestMultiSetSelectedOutputFileName(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); diff --git a/unit/TestIPhreeqcLib.cpp b/unit/TestIPhreeqcLib.cpp index 4cca28fc..36fde1b2 100644 --- a/unit/TestIPhreeqcLib.cpp +++ b/unit/TestIPhreeqcLib.cpp @@ -13,6 +13,8 @@ #include #include +#include "FileTest.h" + #if defined(_WIN32) || defined(__CYGWIN32__) // DeleteFile defined in #else @@ -4039,11 +4041,11 @@ void TestIPhreeqcLib::TestMultiPunchCSelectedOutput(void) CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 5, 1, &var)); CPPUNIT_ASSERT_EQUAL(std::string("react"), std::string(var.sVal)); // pH - CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 7.30475, var.dVal, ::pow(10., -5) ); - CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 2, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 7.29765, var.dVal, ::pow(10., -5) ); - CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 3, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 6.99738, var.dVal, ::pow(10., -5) ); - CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 4, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 6.99698, var.dVal, ::pow(10., -5) ); - CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 5, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 7.2942 , var.dVal, ::pow(10., -5) ); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 7.30475, var.dVal, ::pow(10., -2) ); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 2, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 7.29765, var.dVal, ::pow(10., -2) ); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 3, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 6.99738, var.dVal, ::pow(10., -2) ); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 4, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 6.99698, var.dVal, ::pow(10., -2) ); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 5, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 7.2942 , var.dVal, ::pow(10., -2) ); // V_TOTAL_C CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 34, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 4.3729e-003, var.dVal, ::pow(10., -6) ); @@ -4356,3 +4358,48 @@ void TestIPhreeqcLib::TestGetCurrentSelectedOutputUserNumber(void) CPPUNIT_ASSERT_EQUAL(0, ::LoadDatabase(id, "../database/phreeqc.dat")); CPPUNIT_ASSERT_EQUAL(1, ::GetCurrentSelectedOutputUserNumber(id)); } + +void TestIPhreeqcLib::TestMultiSetSelectedOutputFileName(void) +{ + FileTest set1("state.sel"); + CPPUNIT_ASSERT( set1.RemoveExisting() ); + + FileTest set2("si.sel"); + CPPUNIT_ASSERT( set2.RemoveExisting() ); + + int id = ::CreateIPhreeqc(); + CPPUNIT_ASSERT(id >= 0); + + CPPUNIT_ASSERT_EQUAL(0, ::LoadDatabase(id, "../database/phreeqc.dat")); + + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::SetCurrentSelectedOutputUserNumber(id, 1)); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::SetSelectedOutputStringOn(id, true)); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::SetSelectedOutputFileOn(id, true)); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::SetSelectedOutputFileName(id, set1.GetName().c_str())); + + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::SetCurrentSelectedOutputUserNumber(id, 2)); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::SetSelectedOutputStringOn(id, true)); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::SetSelectedOutputFileOn(id, true)); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::SetSelectedOutputFileName(id, set2.GetName().c_str())); + + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::AccumulateLine(id, "TITLE Temperature dependence of solubility")); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::AccumulateLine(id, " of gypsum and anhydrite ")); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::AccumulateLine(id, "SOLUTION 1 Pure water ")); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::AccumulateLine(id, " pH 7.0 ")); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::AccumulateLine(id, " temp 25.0 ")); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::AccumulateLine(id, "EQUILIBRIUM_PHASES 1 ")); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::AccumulateLine(id, " Gypsum 0.0 1.0 ")); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::AccumulateLine(id, " Anhydrite 0.0 1.0 ")); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::AccumulateLine(id, "REACTION_TEMPERATURE 1 ")); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::AccumulateLine(id, " 25.0 75.0 in 51 steps ")); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::AccumulateLine(id, "SELECTED_OUTPUT 1 ")); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::AccumulateLine(id, " -temperature ")); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::AccumulateLine(id, "SELECTED_OUTPUT 2 ")); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::AccumulateLine(id, " -si anhydrite gypsum ")); + CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::AccumulateLine(id, "END ")); + + CPPUNIT_ASSERT_EQUAL(0, ::RunAccumulated(id)); + + CPPUNIT_ASSERT( set1.VerifyExists() ); + CPPUNIT_ASSERT( set2.VerifyExists() ); +} \ No newline at end of file diff --git a/unit/TestIPhreeqcLib.h b/unit/TestIPhreeqcLib.h index 0e2efa68..a0b6ccb7 100644 --- a/unit/TestIPhreeqcLib.h +++ b/unit/TestIPhreeqcLib.h @@ -75,6 +75,7 @@ class TestIPhreeqcLib : public CppUnit::TestFixture CPPUNIT_TEST( TestGetSelectedOutputCount ); CPPUNIT_TEST( TestGetNthSelectedOutputUserNumber ); CPPUNIT_TEST( TestGetCurrentSelectedOutputUserNumber ); + CPPUNIT_TEST( TestMultiSetSelectedOutputFileName ); CPPUNIT_TEST_SUITE_END(); public: @@ -150,6 +151,7 @@ public: void TestGetSelectedOutputCount(void); void TestGetNthSelectedOutputUserNumber(void); void TestGetCurrentSelectedOutputUserNumber(void); + void TestMultiSetSelectedOutputFileName(void); protected: void TestFileOnOff(const char* FILENAME, int output_file_on, int error_file_on, int log_file_on, int selected_output_file_on, int dump_file_on);