added SetCurrentSelectedOutputUserNumber GetCurrentSelectedOutputUserNumber GetSelectedOutputCount GetNthSelectedOutputUserNumber

git-svn-id: svn://136.177.114.72/svn_GW/IPhreeqc/trunk@8008 1feff8c3-07ed-0310-ac33-dd36852eb9cd
This commit is contained in:
Scott R Charlton 2013-09-05 06:39:13 +00:00
parent ad321ba6e6
commit ce2cfdf6d5
8 changed files with 965 additions and 195 deletions

View File

@ -169,6 +169,11 @@ size_t IPhreeqc::GetComponentCount(void)
return this->Components.size(); return this->Components.size();
} }
int IPhreeqc::GetCurrentSelectedOutputUserNumber(void)const
{
return this->CurrentSelectedOutputUserNumber;
}
const char* IPhreeqc::GetDumpFileName(void)const const char* IPhreeqc::GetDumpFileName(void)const
{ {
return this->DumpFileName.c_str(); return this->DumpFileName.c_str();
@ -295,6 +300,21 @@ bool IPhreeqc::GetLogStringOn(void)const
return this->LogStringOn; return this->LogStringOn;
} }
int IPhreeqc::GetNthSelectedOutputUserNumber(int n)const
{
int nth = VR_INVALIDARG;
std::map< int, SelectedOutput >::const_iterator ci = this->PhreeqcPtr->SelectedOutput_map.begin();
for (int i = 0; ci != this->PhreeqcPtr->SelectedOutput_map.end(); ++ci, ++i)
{
if (i == n)
{
nth = (*ci).first;
break;
}
}
return nth;
}
const char* IPhreeqc::GetOutputFileName(void)const const char* IPhreeqc::GetOutputFileName(void)const
{ {
return this->OutputFileName.c_str(); return this->OutputFileName.c_str();
@ -345,6 +365,11 @@ int IPhreeqc::GetSelectedOutputColumnCount(void)const
return 0; return 0;
} }
int IPhreeqc::GetSelectedOutputCount(void)const
{
return this->PhreeqcPtr->SelectedOutput_map.size();
}
const char* IPhreeqc::GetSelectedOutputFileName(void)const const char* IPhreeqc::GetSelectedOutputFileName(void)const
{ {
static const char empty[] = ""; static const char empty[] = "";
@ -784,9 +809,14 @@ void IPhreeqc::SetBasicFortranCallback(double (*fcn)(double *x1, double *x2, cha
this->PhreeqcPtr->register_fortran_basic_callback(fcn); this->PhreeqcPtr->register_fortran_basic_callback(fcn);
} }
void IPhreeqc::SetCurrentSelectedOutputUserNumber(int n) VRESULT IPhreeqc::SetCurrentSelectedOutputUserNumber(int n)
{
if (this->PhreeqcPtr->SelectedOutput_map.find(n) != this->PhreeqcPtr->SelectedOutput_map.end())
{ {
this->CurrentSelectedOutputUserNumber = n; this->CurrentSelectedOutputUserNumber = n;
return VR_OK;
}
return VR_INVALIDARG;
} }
void IPhreeqc::SetDumpFileName(const char *filename) void IPhreeqc::SetDumpFileName(const char *filename)

View File

@ -69,7 +69,7 @@ extern "C" {
* Internally used to create an error condition. * Internally used to create an error condition.
* @param id The instance id returned from \ref CreateIPhreeqc. * @param id The instance id returned from \ref CreateIPhreeqc.
* @param error_msg The error message to display. * @param error_msg The error message to display.
* @returns The current error count if successful; otherwise a negative value indicates an error occured (see \ref IPQ_RESULT). * @return The current error count if successful; otherwise a negative value indicates an error occured (see \ref IPQ_RESULT).
* @see GetErrorString, GetErrorStringLine, GetErrorStringLineCount, OutputErrorString * @see GetErrorString, GetErrorStringLine, GetErrorStringLineCount, OutputErrorString
* @par Fortran90 Interface: * @par Fortran90 Interface:
* @htmlonly * @htmlonly
@ -92,7 +92,7 @@ extern "C" {
* Internally used to create a warning condition. * Internally used to create a warning condition.
* @param id The instance id returned from \ref CreateIPhreeqc. * @param id The instance id returned from \ref CreateIPhreeqc.
* @param warn_msg The warning message to display. * @param warn_msg The warning message to display.
* @returns The current warning count if successful; otherwise a negative value indicates an error occured (see \ref IPQ_RESULT). * @return The current warning count if successful; otherwise a negative value indicates an error occured (see \ref IPQ_RESULT).
* @see GetWarningString, GetWarningStringLine, GetWarningStringLineCount, OutputWarningString * @see GetWarningString, GetWarningStringLine, GetWarningStringLineCount, OutputWarningString
* @par Fortran90 Interface: * @par Fortran90 Interface:
* @htmlonly * @htmlonly
@ -242,6 +242,25 @@ extern "C" {
*/ */
IPQ_DLL_EXPORT int GetComponentCount(int id); IPQ_DLL_EXPORT int GetComponentCount(int id);
/**
* Sets the currently active <b>SELECTED_OUTPUT</b> user number for use in subsequent calls to GetSelectedOutputXXX routines.
* The initial setting after calling \ref CreateIPhreeqc is 1.
* @param id The instance id returned from \ref CreateIPhreeqc.
* @return The current active <b>SELECTED_OUTPUT</b> user number.
* @see GetNthSelectedOutputUserNumber, GetSelectedOutputCount, SetCurrentSelectedOutputUserNumber
* @par Fortran90 Interface:
* @htmlonly
* <CODE>
* <PRE>
* FUNCTION GetCurrentSelectedOutputUserNumber(ID)
* INTEGER(KIND=4), INTENT(IN) :: ID
* INTEGER(KIND=4) :: GetCurrentSelectedOutputUserNumber
* END FUNCTION GetCurrentSelectedOutputUserNumber
* </PRE>
* </CODE>
* @endhtmlonly
*/
IPQ_DLL_EXPORT int GetCurrentSelectedOutputUserNumber(int id);
/** /**
* Retrieves the name of the dump file. This file name is used if not specified within <B>DUMP</B> input. * Retrieves the name of the dump file. This file name is used if not specified within <B>DUMP</B> input.
@ -493,7 +512,6 @@ extern "C" {
*/ */
IPQ_DLL_EXPORT int GetErrorStringOn(int id); IPQ_DLL_EXPORT int GetErrorStringOn(int id);
/** /**
* Retrieves the name of the log file. The default name is <B><I>phreeqc.id.log</I></B>. * Retrieves the name of the log file. The default name is <B><I>phreeqc.id.log</I></B>.
* @param id The instance id returned from \ref CreateIPhreeqc. * @param id The instance id returned from \ref CreateIPhreeqc.
@ -624,6 +642,27 @@ extern "C" {
IPQ_DLL_EXPORT int GetLogStringOn(int id); IPQ_DLL_EXPORT int GetLogStringOn(int id);
/**
* Retrieves the nth user number of the currently defined <B>SELECTED_OUTPUT</B> keyword blocks.
* @param id The instance id returned from \ref CreateIPhreeqc.
* @return The nth defined user number; a negative value indicates an error occured.
* @see GetCurrentSelectedOutputUserNumber, GetSelectedOutputCount, SetCurrentSelectedOutputUserNumber
* @par Fortran90 Interface:
* @htmlonly
* (Note: N is one-based for the Fortran interface.)
* <CODE>
* <PRE>
* FUNCTION GetNthSelectedOutputUserNumber(ID)
* INTEGER(KIND=4), INTENT(IN) :: ID
* INTEGER(KIND=4), INTENT(IN) :: N
* INTEGER(KIND=4) :: GetNthSelectedOutputUserNumber
* END FUNCTION GetNthSelectedOutputUserNumber
* </PRE>
* </CODE>
* @endhtmlonly
*/
IPQ_DLL_EXPORT int GetNthSelectedOutputUserNumber(int id, int n);
/** /**
* Retrieves the name of the output file. The default name is <B><I>phreeqc.id.out</I></B>. * Retrieves the name of the output file. The default name is <B><I>phreeqc.id.out</I></B>.
* @param id The instance id returned from \ref CreateIPhreeqc. * @param id The instance id returned from \ref CreateIPhreeqc.
@ -768,6 +807,25 @@ extern "C" {
*/ */
IPQ_DLL_EXPORT int GetSelectedOutputColumnCount(int id); IPQ_DLL_EXPORT int GetSelectedOutputColumnCount(int id);
/**
* Retrieves the count of <B>SELECTED_OUTPUT</B> blocks that are currently defined.
* @param id The instance id returned from \ref CreateIPhreeqc.
* @return The number of <B>SELECTED_OUTPUT</B> blocks.
* @see GetCurrentSelectedOutputUserNumber, GetNthSelectedOutputUserNumber, SetCurrentSelectedOutputUserNumber
* @par Fortran90 Interface:
* @htmlonly
* <CODE>
* <PRE>
* FUNCTION GetSelectedOutputCount(ID)
* INTEGER(KIND=4), INTENT(IN) :: ID
* INTEGER(KIND=4) :: GetSelectedOutputCount
* END FUNCTION GetSelectedOutputCount
* </PRE>
* </CODE>
* @endhtmlonly
*/
IPQ_DLL_EXPORT int GetSelectedOutputCount(int id);
/** /**
* Retrieves the name of the selected output file. This file name is used if not specified within <B>SELECTED_OUTPUT</B> input. * Retrieves the name of the selected output file. This file name is used if not specified within <B>SELECTED_OUTPUT</B> input.
@ -1573,6 +1631,30 @@ Headings
IPQ_DLL_EXPORT IPQ_RESULT SetBasicFortranCallback(int id, double (*fcn)(double *x1, double *x2, char *str, int l)); IPQ_DLL_EXPORT IPQ_RESULT SetBasicFortranCallback(int id, double (*fcn)(double *x1, double *x2, char *str, int l));
/**
* Sets the currently active SELECTED_OUTPUT user number for use in subsequent calls to GetSelectedOutputXXX routines.
* The initial setting after calling \ref CreateIPhreeqc is 1.
* @param id The instance id returned from \ref CreateIPhreeqc.
* @param n The user number as specified in the <B>SELECTED_OUTPUT</B> block.
* @retval IPQ_OK Success.
* @retval IPQ_BADINSTANCE The given id is invalid.
* @retval IPQ_INVALIDARG The given user number is invalid.
* @see GetSelectedOutputColumnCount, GetSelectedOutputFileName, GetSelectedOutputRowCount, GetSelectedOutputString, GetSelectedOutputStringLine, GetSelectedOutputStringLineCount, GetSelectedOutputValue
* @par Fortran90 Interface:
* @htmlonly
* <CODE>
* <PRE>
* FUNCTION SetCurrentSelectedOutputUserNumber(ID,N)
* INTEGER(KIND=4), INTENT(IN) :: ID
* INTEGER(KIND=4), INTENT(IN) :: N
* INTEGER(KIND=4) :: SetCurrentSelectedOutputUserNumber
* END FUNCTION SetCurrentSelectedOutputUserNumber
* </PRE>
* </CODE>
* @endhtmlonly
*/
IPQ_DLL_EXPORT IPQ_RESULT SetCurrentSelectedOutputUserNumber(int id, int n);
/** /**
* Sets the name of the dump file. This file name is used if not specified within <B>DUMP</B> input. * Sets the name of the dump file. This file name is used if not specified within <B>DUMP</B> input.
* The default value is <B><I>dump.id.out</I></B>. * The default value is <B><I>dump.id.out</I></B>.

View File

@ -73,7 +73,7 @@ public:
* Appends the given error message and increments the error count. * Appends the given error message and increments the error count.
* Internally used to create an error condition. * Internally used to create an error condition.
* @param error_msg The error message to display. * @param error_msg The error message to display.
* @returns The current error count. * @return The current error count.
* @see GetErrorString, GetErrorStringLine, GetErrorStringLineCount, OutputErrorString * @see GetErrorString, GetErrorStringLine, GetErrorStringLineCount, OutputErrorString
*/ */
size_t AddError(const char* error_msg); size_t AddError(const char* error_msg);
@ -82,7 +82,7 @@ public:
* Appends the given warning message and increments the warning count. * Appends the given warning message and increments the warning count.
* Internally used to create a warning condition. * Internally used to create a warning condition.
* @param warning_msg The warning message to display. * @param warning_msg The warning message to display.
* @returns The current warning count. * @return The current warning count.
* @see GetWarningString, GetWarningStringLine, GetWarningStringLineCount, OutputWarningString * @see GetWarningString, GetWarningStringLine, GetWarningStringLineCount, OutputWarningString
*/ */
size_t AddWarning(const char* warning_msg); size_t AddWarning(const char* warning_msg);
@ -96,7 +96,7 @@ public:
/** /**
* Retrieve the accumulated input string. The accumulated input string can be run * Retrieve the accumulated input string. The accumulated input string can be run
* with \ref RunAccumulated. * with \ref RunAccumulated.
* @returns The accumulated input string. * @return The accumulated input string.
* @see AccumulateLine, ClearAccumulatedLines, OutputAccumulatedLines, RunAccumulated * @see AccumulateLine, ClearAccumulatedLines, OutputAccumulatedLines, RunAccumulated
*/ */
const std::string& GetAccumulatedLines(void); const std::string& GetAccumulatedLines(void);
@ -117,6 +117,12 @@ public:
*/ */
size_t GetComponentCount(void); size_t GetComponentCount(void);
/**
* Retrieves the currently active SELECTED_OUTPUT user number.
* @return The current active SELECTED_OUTPUT user number.
* @see GetSelectedOutputColumnCount, GetSelectedOutputFileName, GetSelectedOutputRowCount, GetSelectedOutputString, GetSelectedOutputStringLine, GetSelectedOutputStringLineCount, GetSelectedOutputValue, SetCurrentSelectedOutputUserNumber
*/
int GetCurrentSelectedOutputUserNumber(void)const;
/** /**
* Retrieves the name of the dump file. This file name is used if not specified within <B>DUMP</B> input. * Retrieves the name of the dump file. This file name is used if not specified within <B>DUMP</B> input.
@ -273,6 +279,14 @@ public:
*/ */
bool GetLogStringOn(void)const; bool GetLogStringOn(void)const;
/**
* Retrieves the nth user number of the currently defined <B>SELECTED_OUTPUT</B> blocks.
* @param n The zero-based index of the <B>SELECTED_OUTPUT</B> user number to retrieve.
* @return The nth defined user number; a negative value indicates an error occured.
* @see GetCurrentSelectedOutputUserNumber, GetSelectedOutputCount, SetCurrentSelectedOutputUserNumber
*/
int GetNthSelectedOutputUserNumber(int n)const;
/** /**
* Retrieves the name of the output file. The default value is <B><I>phreeqc.id.out</I></B>, where id is obtained from \ref GetId. * Retrieves the name of the output file. The default value is <B><I>phreeqc.id.out</I></B>, where id is obtained from \ref GetId.
* @return filename The name of the file to write phreeqc output to. * @return filename The name of the file to write phreeqc output to.
@ -326,16 +340,22 @@ public:
/** /**
* Retrieves the number of columns in the selected-output buffer. * Retrieves the number of columns in the selected-output buffer.
* @return The number of columns. * @return The number of columns.
* @see GetSelectedOutputRowCount, GetSelectedOutputValue, SetCurrentSelectedOutputUserNumber * @see GetCurrentSelectedOutputUserNumber, GetSelectedOutputRowCount, GetSelectedOutputValue, SetCurrentSelectedOutputUserNumber
*/ */
int GetSelectedOutputColumnCount(void)const; int GetSelectedOutputColumnCount(void)const;
/** /**
* Retrieves the count of <B>SELECTED_OUTPUT</B> blocks that are currently defined.
* @return The number of <B>SELECTED_OUTPUT</B> blocks.
* @see GetCurrentSelectedOutputUserNumber, GetNthSelectedOutputUserNumber, SetCurrentSelectedOutputUserNumber
*/
int GetSelectedOutputCount(void)const;
/**
* Retrieves the name of the selected output file. This file name is used if not specified within <B>SELECTED_OUTPUT</B> input. * Retrieves the name of the selected output file. This file name is used if not specified within <B>SELECTED_OUTPUT</B> input.
* The default value is <B><I>selected.id.out</I></B>, where id is obtained from \ref GetId. * The default value is <B><I>selected.id.out</I></B>, where id is obtained from \ref GetId.
* @return filename The name of the file to write to. * @return filename The name of the file to write to.
* @see GetSelectedOutputFileOn, GetSelectedOutputString, GetSelectedOutputStringOn, GetSelectedOutputStringLine, GetSelectedOutputStringLineCount, SetCurrentSelectedOutputUserNumber, SetSelectedOutputFileName, SetSelectedOutputFileOn, SetSelectedOutputStringOn * @see GetCurrentSelectedOutputUserNumber, GetSelectedOutputFileOn, GetSelectedOutputString, GetSelectedOutputStringOn, GetSelectedOutputStringLine, GetSelectedOutputStringLineCount, SetCurrentSelectedOutputUserNumber, SetSelectedOutputFileName, SetSelectedOutputFileOn, SetSelectedOutputStringOn
*/ */
const char* GetSelectedOutputFileName(void)const; const char* GetSelectedOutputFileName(void)const;
@ -350,7 +370,7 @@ public:
/** /**
* Retrieves the number of rows in the selected-output buffer. * Retrieves the number of rows in the selected-output buffer.
* @return The number of rows. * @return The number of rows.
* @see GetSelectedOutputColumnCount, GetSelectedOutputFileOn, GetSelectedOutputValue, SetCurrentSelectedOutputUserNumber, SetSelectedOutputFileOn * @see GetCurrentSelectedOutputUserNumber, GetSelectedOutputColumnCount, GetSelectedOutputFileOn, GetSelectedOutputValue, SetCurrentSelectedOutputUserNumber, SetSelectedOutputFileOn
*/ */
int GetSelectedOutputRowCount(void)const; int GetSelectedOutputRowCount(void)const;
@ -359,7 +379,7 @@ public:
* @return A null terminated string containing <b>SELECTED_OUTPUT</b>. * @return A null terminated string containing <b>SELECTED_OUTPUT</b>.
* @pre * @pre
* \ref SetSelectedOutputStringOn must have been set to true in order to receive <b>SELECTED_OUTPUT</b>. * \ref SetSelectedOutputStringOn must have been set to true in order to receive <b>SELECTED_OUTPUT</b>.
* @see GetSelectedOutputStringLine, GetSelectedOutputFileOn, GetSelectedOutputStringLineCount, GetSelectedOutputStringOn, GetSelectedOutputString, SetCurrentSelectedOutputUserNumber, SetSelectedOutputFileOn, SetSelectedOutputStringOn * @see GetCurrentSelectedOutputUserNumber, GetSelectedOutputStringLine, GetSelectedOutputFileOn, GetSelectedOutputStringLineCount, GetSelectedOutputStringOn, GetSelectedOutputString, SetCurrentSelectedOutputUserNumber, SetSelectedOutputFileOn, SetSelectedOutputStringOn
*/ */
const char* GetSelectedOutputString(void)const; const char* GetSelectedOutputString(void)const;
@ -369,7 +389,7 @@ public:
* @return A null terminated string containing the given line. * @return A null terminated string containing the given line.
* Returns an empty string if n is out of range. * Returns an empty string if n is out of range.
* @pre \ref SetSelectedOutputStringOn must have been set to true. * @pre \ref SetSelectedOutputStringOn must have been set to true.
* @see GetSelectedOutputFileOn, GetSelectedOutputString, GetSelectedOutputStringLineCount, GetSelectedOutputStringOn, SetCurrentSelectedOutputUserNumber, SetSelectedOutputFileOn, SetSelectedOutputStringOn * @see GetCurrentSelectedOutputUserNumber, GetSelectedOutputFileOn, GetSelectedOutputString, GetSelectedOutputStringLineCount, GetSelectedOutputStringOn, SetCurrentSelectedOutputUserNumber, SetSelectedOutputFileOn, SetSelectedOutputStringOn
*/ */
const char* GetSelectedOutputStringLine(int n); const char* GetSelectedOutputStringLine(int n);
@ -377,7 +397,7 @@ public:
* Retrieves the number of lines in the current selected output string buffer. * Retrieves the number of lines in the current selected output string buffer.
* @return The number of lines. * @return The number of lines.
* @pre \ref SetSelectedOutputStringOn must have been set to true. * @pre \ref SetSelectedOutputStringOn must have been set to true.
* @see GetSelectedOutputFileOn, GetSelectedOutputString, GetSelectedOutputStringLine, GetSelectedOutputStringOn, SetCurrentSelectedOutputUserNumber, SetSelectedOutputFileOn, SetSelectedOutputStringOn * @see GetCurrentSelectedOutputUserNumber, GetSelectedOutputFileOn, GetSelectedOutputString, GetSelectedOutputStringLine, GetSelectedOutputStringOn, SetCurrentSelectedOutputUserNumber, SetSelectedOutputFileOn, SetSelectedOutputStringOn
*/ */
int GetSelectedOutputStringLineCount(void)const; int GetSelectedOutputStringLineCount(void)const;
@ -399,7 +419,7 @@ public:
* @retval VR_INVALIDCOL The given column is out of range. * @retval VR_INVALIDCOL The given column is out of range.
* @retval VR_OUTOFMEMORY Memory could not be allocated. * @retval VR_OUTOFMEMORY Memory could not be allocated.
* @retval VR_BADINSTANCE The given id is invalid. * @retval VR_BADINSTANCE The given id is invalid.
* @see GetSelectedOutputColumnCount, GetSelectedOutputFileOn, GetSelectedOutputRowCount, GetSelectedOutputValue2, SetCurrentSelectedOutputUserNumber, SetSelectedOutputFileOn * @see GetCurrentSelectedOutputUserNumber, GetSelectedOutputColumnCount, GetSelectedOutputFileOn, GetSelectedOutputRowCount, GetSelectedOutputValue2, SetCurrentSelectedOutputUserNumber, SetSelectedOutputFileOn
* @remarks * @remarks
* Row 0 contains the column headings to the selected_ouput. * Row 0 contains the column headings to the selected_ouput.
* @par Examples: * @par Examples:
@ -655,6 +675,16 @@ public:
*/ */
int RunFile(const char* filename); int RunFile(const char* filename);
/**
* Runs the specified string as input to phreeqc.
* @param input String containing phreeqc input.
* @return The number of errors encountered during the run.
* @see RunAccumulated, RunFile
* @pre
* \ref LoadDatabase/\ref LoadDatabaseString must have been called and returned 0 (zero) errors.
*/
int RunString(const char* input);
/** /**
* Sets a C callback function for Basic programs. The syntax for the Basic command is * Sets a C callback function for Basic programs. The syntax for the Basic command is
* 10 result = CALLBACK(x1, x2, string$) * 10 result = CALLBACK(x1, x2, string$)
@ -676,14 +706,14 @@ public:
void SetBasicFortranCallback(double (*fcn)(double *x1, double *x2, char *str, int l)); void SetBasicFortranCallback(double (*fcn)(double *x1, double *x2, char *str, int l));
/** /**
* Runs the specified string as input to phreeqc. * Sets the currently active SELECTED_OUTPUT user number for use in subsequent calls to GetSelectedOutputXXX routines.
* @param input String containing phreeqc input. * The initial setting is 1.
* @return The number of errors encountered during the run. * @param n The user number as specified in the <B>SELECTED_OUTPUT</B> block.
* @see RunAccumulated, RunFile * @retval VR_OK Success
* @pre * @retval VR_INVALIDARG The given user number has not been defined.
* \ref LoadDatabase/\ref LoadDatabaseString must have been called and returned 0 (zero) errors. * @see GetCurrentSelectedOutputUserNumber, GetSelectedOutputColumnCount, GetSelectedOutputFileName, GetSelectedOutputRowCount, GetSelectedOutputString, GetSelectedOutputStringLine, GetSelectedOutputStringLineCount, GetSelectedOutputValue
*/ */
int RunString(const char* input); VRESULT SetCurrentSelectedOutputUserNumber(int n);
/** /**
* Sets the name of the dump file. This file name is used if not specified within <B>DUMP</B> input. * Sets the name of the dump file. This file name is used if not specified within <B>DUMP</B> input.
@ -811,17 +841,6 @@ public:
*/ */
void SetSelectedOutputStringOn(bool bValue); void SetSelectedOutputStringOn(bool bValue);
/**
* Sets the given user number for use in subsequent calls to GetSelectedOutputXXX routines.
* The initial setting is 1.
* @param n The user number as specified in the <B>SELECTED_OUTPUT</B> block.
* @see GetSelectedOutputColumnCount, GetSelectedOutputFileName, GetSelectedOutputRowCount, GetSelectedOutputString, GetSelectedOutputStringLine, GetSelectedOutputStringLineCount, GetSelectedOutputValue
*/
void SetCurrentSelectedOutputUserNumber(int n);
public: public:
// overrides // overrides
virtual void error_msg(const char *str, bool stop=false); virtual void error_msg(const char *str, bool stop=false);

View File

@ -106,6 +106,17 @@ GetComponentCount(int id)
return IPQ_BADINSTANCE; return IPQ_BADINSTANCE;
} }
int
GetCurrentSelectedOutputUserNumber(int id)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return IPhreeqcPtr->GetCurrentSelectedOutputUserNumber();
}
return IPQ_BADINSTANCE;
}
const char* const char*
GetDumpFileName(int id) GetDumpFileName(int id)
{ {
@ -355,6 +366,22 @@ GetLogStringOn(int id)
return IPQ_BADINSTANCE; return IPQ_BADINSTANCE;
} }
int
GetNthSelectedOutputUserNumber(int id, int n)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
int nth = IPhreeqcPtr->GetNthSelectedOutputUserNumber(n);
switch (nth)
{
case VR_INVALIDARG: return IPQ_INVALIDARG;
}
return nth;
}
return IPQ_BADINSTANCE;
}
const char* const char*
GetOutputFileName(int id) GetOutputFileName(int id)
{ {
@ -449,6 +476,17 @@ GetSelectedOutputColumnCount(int id)
return IPQ_BADINSTANCE; return IPQ_BADINSTANCE;
} }
int
GetSelectedOutputCount(int id)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
return IPhreeqcPtr->GetSelectedOutputCount();
}
return IPQ_BADINSTANCE;
}
const char* const char*
GetSelectedOutputFileName(int id) GetSelectedOutputFileName(int id)
{ {
@ -737,6 +775,23 @@ SetBasicFortranCallback(int id, double (*fcn)(double *x1, double *x2, char *str,
} }
return IPQ_BADINSTANCE; return IPQ_BADINSTANCE;
} }
IPQ_RESULT
SetCurrentSelectedOutputUserNumber(int id, int n)
{
IPhreeqc* IPhreeqcPtr = IPhreeqcLib::GetInstance(id);
if (IPhreeqcPtr)
{
switch (IPhreeqcPtr->SetCurrentSelectedOutputUserNumber(n))
{
case VR_INVALIDARG: return IPQ_INVALIDARG;
case VR_OK: return IPQ_OK;
default: assert(false);
}
}
return IPQ_BADINSTANCE;
}
IPQ_RESULT IPQ_RESULT
SetDumpFileName(int id, const char* filename) SetDumpFileName(int id, const char* filename)
{ {

View File

@ -3620,11 +3620,6 @@ void TestIPhreeqc::TestMultiPunchSelectedOutputStringOn(void)
CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(8), "Dummy2\t") != NULL ); CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(8), "Dummy2\t") != NULL );
} }
#if 0
#include <windows.h>
#include "Debug.h"
#endif
void TestIPhreeqc::TestMultiPunchCSelectedOutput(void) void TestIPhreeqc::TestMultiPunchCSelectedOutput(void)
{ {
CVar var; CVar var;
@ -3636,38 +3631,6 @@ void TestIPhreeqc::TestMultiPunchCSelectedOutput(void)
CPPUNIT_ASSERT_EQUAL(6, obj.GetSelectedOutputRowCount()); CPPUNIT_ASSERT_EQUAL(6, obj.GetSelectedOutputRowCount());
CPPUNIT_ASSERT_EQUAL(35, obj.GetSelectedOutputColumnCount()); CPPUNIT_ASSERT_EQUAL(35, obj.GetSelectedOutputColumnCount());
#if 0
char buffer[80];
for (int r = 0; r < obj.GetSelectedOutputRowCount(); ++r)
{
for (int c = 0; c < obj.GetSelectedOutputColumnCount(); ++c)
{
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(r, c, &var));
switch (var.type)
{
case TT_EMPTY:
break;
case TT_LONG:
sprintf(buffer, "%d\t", (int)var.lVal);
::OutputDebugString(buffer);
break;
case TT_DOUBLE:
sprintf(buffer, "%g\t", var.dVal);
::OutputDebugString(buffer);
break;
case TT_STRING:
sprintf(buffer, "%s\t", var.sVal);
::OutputDebugString(buffer);
break;
default:
ASSERT(FALSE);
}
}
::OutputDebugString("\n");
}
#endif
// headings // headings
int ncol = 0; int ncol = 0;
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("sim"), std::string(var.sVal)); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("sim"), std::string(var.sVal));
@ -3735,72 +3698,298 @@ void TestIPhreeqc::TestMultiPunchCSelectedOutput(void)
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(5, 34, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 4.2784e-003, var.dVal, ::pow(10., -6) ); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(5, 34, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 4.2784e-003, var.dVal, ::pow(10., -6) );
// edge cases // edge cases
int r = obj.GetSelectedOutputRowCount();
int c = obj.GetSelectedOutputColumnCount();
CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, obj.GetSelectedOutputValue(-1, 0, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, var.vresult); CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, obj.GetSelectedOutputValue(-1, 0, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, var.vresult);
CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, obj.GetSelectedOutputValue( 6, 0, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, var.vresult); CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, obj.GetSelectedOutputValue( r, 0, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, var.vresult);
CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, obj.GetSelectedOutputValue( 0, -1, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, var.vresult); CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, obj.GetSelectedOutputValue( 0, -1, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, var.vresult);
CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, obj.GetSelectedOutputValue( 0, 35, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, var.vresult); CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, obj.GetSelectedOutputValue( 0, c, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, var.vresult);
obj.SetCurrentSelectedOutputUserNumber(2); obj.SetCurrentSelectedOutputUserNumber(2);
CPPUNIT_ASSERT_EQUAL(7, obj.GetSelectedOutputRowCount()); CPPUNIT_ASSERT_EQUAL(7, obj.GetSelectedOutputRowCount());
CPPUNIT_ASSERT_EQUAL(16, obj.GetSelectedOutputColumnCount()); CPPUNIT_ASSERT_EQUAL(16, obj.GetSelectedOutputColumnCount());
#if 0 // headings
for (int r = 0; r < obj.GetSelectedOutputRowCount(); ++r) ncol = 0;
{ CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("si_Halite"), std::string(var.sVal));
for (int c = 0; c < obj.GetSelectedOutputColumnCount(); ++c) CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("si_Calcite"), std::string(var.sVal));
{ CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("DUMMY_1"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(r, c, &var)); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("DUMMY_2"), std::string(var.sVal));
switch (var.type) CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Sum_resid"), std::string(var.sVal));
{ CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Sum_Delta/U"), std::string(var.sVal));
case TT_EMPTY: CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("MaxFracErr"), std::string(var.sVal));
break; CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_2"), std::string(var.sVal));
case TT_LONG: CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_2_min"), std::string(var.sVal));
sprintf(buffer, "%d\t", (int)var.lVal); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_2_max"), std::string(var.sVal));
::OutputDebugString(buffer); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_3"), std::string(var.sVal));
break; CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_3_min"), std::string(var.sVal));
case TT_DOUBLE: CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_3_max"), std::string(var.sVal));
sprintf(buffer, "%g\t", var.dVal); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Halite"), std::string(var.sVal));
::OutputDebugString(buffer); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Halite_min"), std::string(var.sVal));
break; CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Halite_max"), std::string(var.sVal));
case TT_STRING:
sprintf(buffer, "%s\t", var.sVal);
::OutputDebugString(buffer);
break;
default:
ASSERT(FALSE);
}
}
::OutputDebugString("\n");
}
#endif
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "si_Halite\t") != NULL ); // si_Halite
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(0), "si_Calcite\t") != NULL ); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 0, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( -7.70857, var.dVal, ::pow(10., -2) );
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(2), "Dummy1\t") != NULL ); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(2, 0, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( -7.67087, var.dVal, ::pow(10., -2) );
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(2), "Dummy2\t") != NULL ); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(3, 0, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( -7.6362, var.dVal, ::pow(10., -2) );
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(4, 0, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( -999.999, var.dVal, ::pow(10., -2) );
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(3), "Dummy1\t") != NULL ); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(5, 0, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( -7.60092, var.dVal, ::pow(10., -2) );
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(3), "Dummy2\t") != NULL ); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(6, 0, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( -7.60411, var.dVal, ::pow(10., -2) );
// COMMENT: {8/26/2013 11:32:00 PM}
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(4), "Dummy1\t") != NULL ); // si_Calcite
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(4), "Dummy2\t") != NULL ); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 1, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.692077, var.dVal, ::pow(10., -2) );
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(2, 1, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.678847, var.dVal, ::pow(10., -2) );
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(5), "Dummy1\t") != NULL ); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(3, 1, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.678847, var.dVal, ::pow(10., -2) );
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(5), "Dummy2\t") != NULL ); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(4, 1, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( -999.999, var.dVal, ::pow(10., -2) );
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(5, 1, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( -999.999, var.dVal, ::pow(10., -2) );
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(6), "Sum_resid\t") != NULL ); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(6, 1, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.672429, var.dVal, ::pow(10., -2) );
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(6), "Sum_Delta/U\t") != NULL );
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(6), "MaxFracErr\t") != NULL ); // DUMMY_1
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(6), "Soln_2\t") != NULL ); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 2, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(6), "Soln_2_min\t") != NULL ); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(2, 2, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Dummy1"), std::string(var.sVal));
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(6), "Soln_2_max\t") != NULL ); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(3, 2, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Dummy1"), std::string(var.sVal));
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(6), "Soln_3\t") != NULL ); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(4, 2, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Dummy1"), std::string(var.sVal));
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(6), "Soln_3_min\t") != NULL ); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(5, 2, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Dummy1"), std::string(var.sVal));
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(6), "Soln_3_max\t") != NULL ); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(6, 2, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Dummy1"), std::string(var.sVal));
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(6), "Halite\t") != NULL );
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(6), "Halite_max\t") != NULL ); // DUMMY_2
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 3, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(8), "Dummy1\t") != NULL ); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(2, 3, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Dummy2"), std::string(var.sVal));
// COMMENT: {8/26/2013 11:32:00 PM} CPPUNIT_ASSERT( ::strstr(obj.GetSelectedOutputStringLine(8), "Dummy2\t") != NULL ); CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(3, 3, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Dummy2"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(4, 3, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Dummy2"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(5, 3, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Dummy2"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(6, 3, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Dummy2"), std::string(var.sVal));
// Sum_resid
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 4, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(2, 4, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(3, 4, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(4, 4, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(5, 4, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(6, 4, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 3.69E-13, var.dVal, ::pow(10., log10(3.69E-13)-2) );
// Sum_Delta/U
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 5, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(2, 5, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(3, 5, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(4, 5, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(5, 5, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(6, 5, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// MaxFracErr
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 6, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(2, 6, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(3, 6, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(4, 6, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(5, 6, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(6, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Soln_2
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 7, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(2, 7, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(3, 7, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(4, 7, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(5, 7, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(6, 7, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 1, var.dVal, ::pow(10., -3) );
// Soln_2_min
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 8, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(2, 8, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(3, 8, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(4, 8, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(5, 8, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(6, 8, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Soln_2_max
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 9, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(2, 9, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(3, 9, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(4, 9, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(5, 9, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(6, 9, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Soln_3
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 10, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(2, 10, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(3, 10, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(4, 10, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(5, 10, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(6, 10, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 1, var.dVal, ::pow(10., -3) );
// Soln_3_min
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 11, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(2, 11, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(3, 11, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(4, 11, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(5, 11, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(6, 11, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Soln_3_max
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 12, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(2, 12, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(3, 12, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(4, 12, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(5, 12, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(6, 12, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Halite
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 13, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(2, 13, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(3, 13, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(4, 13, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(5, 13, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(6, 13, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.001, var.dVal, ::pow(10., -3) );
// Halite_min
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 14, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(2, 14, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(3, 14, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(4, 14, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(5, 14, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(6, 14, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Halite_max
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 15, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(2, 15, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(3, 15, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(4, 15, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(5, 15, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(6, 15, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// edge cases
r = obj.GetSelectedOutputRowCount();
c = obj.GetSelectedOutputColumnCount();
CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, obj.GetSelectedOutputValue(-1, 0, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, var.vresult);
CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, obj.GetSelectedOutputValue( r, 0, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, var.vresult);
CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, obj.GetSelectedOutputValue( 0, -1, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, var.vresult);
CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, obj.GetSelectedOutputValue( 0, c, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, var.vresult);
obj.SetCurrentSelectedOutputUserNumber(3);
CPPUNIT_ASSERT_EQUAL(2, obj.GetSelectedOutputRowCount());
CPPUNIT_ASSERT_EQUAL(12, obj.GetSelectedOutputColumnCount());
// headings
ncol = 0;
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Sum_resid"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Sum_Delta/U"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("MaxFracErr"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_2"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_2_min"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_2_max"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_3"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_3_min"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_3_max"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Halite"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Halite_min"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Halite_max"), std::string(var.sVal));
// Sum_resid
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 0, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 3.69E-13, var.dVal, ::pow(10., log10(3.69E-13)-2) );
// Sum_Delta/U
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 1, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// MaxFracErr
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 2, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Soln_2
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 3, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 1, var.dVal, ::pow(10., -3) );
// Soln_2_min
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 4, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Soln_2_max
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 5, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Soln_3
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 1, var.dVal, ::pow(10., -3) );
// Soln_3_min
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 7, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Soln_3_max
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 8, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Halite
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 9, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.001, var.dVal, ::pow(10., -3) );
// Halite_min
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 10, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Halite_max
CPPUNIT_ASSERT_EQUAL(VR_OK, obj.GetSelectedOutputValue(1, 11, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// edge cases
r = obj.GetSelectedOutputRowCount();
c = obj.GetSelectedOutputColumnCount();
CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, obj.GetSelectedOutputValue(-1, 0, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, var.vresult);
CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, obj.GetSelectedOutputValue( r, 0, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, var.vresult);
CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, obj.GetSelectedOutputValue( 0, -1, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, var.vresult);
CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, obj.GetSelectedOutputValue( 0, c, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, var.vresult);
CPPUNIT_ASSERT_EQUAL(VR_INVALIDARG, obj.SetCurrentSelectedOutputUserNumber(-1));
CPPUNIT_ASSERT_EQUAL(VR_INVALIDARG, obj.SetCurrentSelectedOutputUserNumber(0));
}
void TestIPhreeqc::TestGetSelectedOutputCount(void)
{
CVar var;
IPhreeqc obj;
CPPUNIT_ASSERT_EQUAL(0, obj.GetSelectedOutputCount());
CPPUNIT_ASSERT_EQUAL(0, obj.LoadDatabase("../database/phreeqc.dat"));
CPPUNIT_ASSERT_EQUAL(0, obj.GetSelectedOutputCount());
CPPUNIT_ASSERT_EQUAL(0, obj.RunFile("multi_punch"));
CPPUNIT_ASSERT_EQUAL(3, obj.GetSelectedOutputCount());
}
void TestIPhreeqc::TestGetNthSelectedOutputUserNumber(void)
{
CVar var;
IPhreeqc obj;
CPPUNIT_ASSERT_EQUAL(0, obj.LoadDatabase("../database/phreeqc.dat"));
CPPUNIT_ASSERT_EQUAL(0, obj.RunFile("multi_punch"));
CPPUNIT_ASSERT_EQUAL(3, obj.GetSelectedOutputCount());
CPPUNIT_ASSERT_EQUAL(1, obj.GetNthSelectedOutputUserNumber(0));
CPPUNIT_ASSERT_EQUAL(2, obj.GetNthSelectedOutputUserNumber(1));
CPPUNIT_ASSERT_EQUAL(3, obj.GetNthSelectedOutputUserNumber(2));
// edge cases
CPPUNIT_ASSERT_EQUAL((int)VR_INVALIDARG, obj.GetNthSelectedOutputUserNumber(-1));
CPPUNIT_ASSERT_EQUAL((int)VR_INVALIDARG, obj.GetNthSelectedOutputUserNumber(4));
}
void TestIPhreeqc::TestGetCurrentSelectedOutputUserNumber(void)
{
IPhreeqc obj;
CPPUNIT_ASSERT_EQUAL(1, obj.GetCurrentSelectedOutputUserNumber());
CPPUNIT_ASSERT_EQUAL(0, obj.LoadDatabase("../database/phreeqc.dat"));
CPPUNIT_ASSERT_EQUAL(1, obj.GetCurrentSelectedOutputUserNumber());
CPPUNIT_ASSERT_EQUAL(0, obj.RunFile("multi_punch"));
CPPUNIT_ASSERT_EQUAL(1, obj.GetCurrentSelectedOutputUserNumber());
CPPUNIT_ASSERT_EQUAL(6, obj.GetSelectedOutputRowCount());
CPPUNIT_ASSERT_EQUAL(35, obj.GetSelectedOutputColumnCount());
obj.SetCurrentSelectedOutputUserNumber(2);
CPPUNIT_ASSERT_EQUAL(2, obj.GetCurrentSelectedOutputUserNumber());
CPPUNIT_ASSERT_EQUAL(7, obj.GetSelectedOutputRowCount());
CPPUNIT_ASSERT_EQUAL(16, obj.GetSelectedOutputColumnCount());
obj.SetCurrentSelectedOutputUserNumber(3);
CPPUNIT_ASSERT_EQUAL(3, obj.GetCurrentSelectedOutputUserNumber());
CPPUNIT_ASSERT_EQUAL(2, obj.GetSelectedOutputRowCount());
CPPUNIT_ASSERT_EQUAL(12, obj.GetSelectedOutputColumnCount());
// edge cases
CPPUNIT_ASSERT_EQUAL(VR_INVALIDARG, obj.SetCurrentSelectedOutputUserNumber(-1));
CPPUNIT_ASSERT_EQUAL(3, obj.GetCurrentSelectedOutputUserNumber());
CPPUNIT_ASSERT_EQUAL(VR_INVALIDARG, obj.SetCurrentSelectedOutputUserNumber(0));
CPPUNIT_ASSERT_EQUAL(3, obj.GetCurrentSelectedOutputUserNumber());
} }

View File

@ -70,6 +70,9 @@ class TestIPhreeqc : public CppUnit::TestFixture
CPPUNIT_TEST( TestRunFileMultiPunchNoSet ); CPPUNIT_TEST( TestRunFileMultiPunchNoSet );
CPPUNIT_TEST( TestMultiPunchSelectedOutputStringOn ); CPPUNIT_TEST( TestMultiPunchSelectedOutputStringOn );
CPPUNIT_TEST( TestMultiPunchCSelectedOutput ); CPPUNIT_TEST( TestMultiPunchCSelectedOutput );
CPPUNIT_TEST( TestGetSelectedOutputCount );
CPPUNIT_TEST( TestGetNthSelectedOutputUserNumber );
CPPUNIT_TEST( TestGetCurrentSelectedOutputUserNumber );
CPPUNIT_TEST_SUITE_END(); CPPUNIT_TEST_SUITE_END();
public: public:
@ -140,6 +143,9 @@ public:
void TestRunFileMultiPunchNoSet(void); void TestRunFileMultiPunchNoSet(void);
void TestMultiPunchSelectedOutputStringOn(void); void TestMultiPunchSelectedOutputStringOn(void);
void TestMultiPunchCSelectedOutput(void); void TestMultiPunchCSelectedOutput(void);
void TestGetSelectedOutputCount(void);
void TestGetNthSelectedOutputUserNumber(void);
void TestGetCurrentSelectedOutputUserNumber(void);
protected: 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); 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

@ -3813,7 +3813,8 @@ void TestIPhreeqcLib::TestBasicSURF(void)
CPPUNIT_ASSERT_EQUAL(13, ::GetSelectedOutputColumnCount(n)); CPPUNIT_ASSERT_EQUAL(13, ::GetSelectedOutputColumnCount(n));
CPPUNIT_ASSERT_EQUAL(3, ::GetSelectedOutputRowCount(n)); CPPUNIT_ASSERT_EQUAL(3, ::GetSelectedOutputRowCount(n));
CVar v; VAR v;
VarInit(&v);
const int offset = 8; const int offset = 8;
@ -3970,3 +3971,383 @@ void TestIPhreeqcLib::TestDelete(void)
CPPUNIT_ASSERT(::DeleteFile(OUTPUT_FILE)); CPPUNIT_ASSERT(::DeleteFile(OUTPUT_FILE));
} }
} }
void TestIPhreeqcLib::TestMultiPunchCSelectedOutput(void)
{
VAR var;
::VarInit(&var);
int id = ::CreateIPhreeqc();
CPPUNIT_ASSERT(id >= 0);
CPPUNIT_ASSERT_EQUAL(0, ::LoadDatabase(id, "../database/phreeqc.dat"));
CPPUNIT_ASSERT_EQUAL(0, ::RunFile(id, "multi_punch"));
CPPUNIT_ASSERT_EQUAL(6, ::GetSelectedOutputRowCount(id));
CPPUNIT_ASSERT_EQUAL(35, ::GetSelectedOutputColumnCount(id));
// headings
int ncol = 0;
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("sim"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("state"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("soln"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("dist_x"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("time"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("step"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("pH"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("pe"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("reaction"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("temp(C)"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Alk(eq/kgw)"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("mu"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("mass_H2O"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("charge(eq)"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("pct_err"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Na(mol/kgw)"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Ca(mol/kgw)"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("m_Na+(mol/kgw)"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("m_HCO3-(mol/kgw)"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("la_Ca+2"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("la_CO3-2"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("CO2(g)"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("d_CO2(g)"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("dolomite"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("d_dolomite"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("si_Halite"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("pressure"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("total mol"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("volume"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("g_N2(g)"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("k_Calcite"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("dk_Calcite"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("s_Anhydrite"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("s_Barite"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("V_TOTAL_C"), std::string(var.sVal));
// sim
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 0, &var)); CPPUNIT_ASSERT_EQUAL((long) 8, var.lVal);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 2, 0, &var)); CPPUNIT_ASSERT_EQUAL((long)10, var.lVal);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 3, 0, &var)); CPPUNIT_ASSERT_EQUAL((long)11, var.lVal);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 4, 0, &var)); CPPUNIT_ASSERT_EQUAL((long)12, var.lVal);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 5, 0, &var)); CPPUNIT_ASSERT_EQUAL((long)14, var.lVal);
// state
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 1, &var)); CPPUNIT_ASSERT_EQUAL(std::string("react"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 2, 1, &var)); CPPUNIT_ASSERT_EQUAL(std::string("react"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 3, 1, &var)); CPPUNIT_ASSERT_EQUAL(std::string("i_soln"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 4, 1, &var)); CPPUNIT_ASSERT_EQUAL(std::string("i_soln"), std::string(var.sVal));
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) );
// 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) );
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 2, 34, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 4.3090e-003, var.dVal, ::pow(10., -6) );
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 3, 34, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0000e+000, var.dVal, ::pow(10., -6) );
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 4, 34, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0000e+000, var.dVal, ::pow(10., -6) );
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 5, 34, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 4.2784e-003, var.dVal, ::pow(10., -6) );
// edge cases
int r = ::GetSelectedOutputRowCount(id);
int c = ::GetSelectedOutputColumnCount(id);
CPPUNIT_ASSERT_EQUAL(IPQ_INVALIDROW, ::GetSelectedOutputValue(id, -1, 0, &var));
CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type);
CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, var.vresult);
CPPUNIT_ASSERT_EQUAL(IPQ_INVALIDROW, ::GetSelectedOutputValue(id, r, 0, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, var.vresult);
CPPUNIT_ASSERT_EQUAL(IPQ_INVALIDCOL, ::GetSelectedOutputValue(id, 0, -1, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, var.vresult);
CPPUNIT_ASSERT_EQUAL(IPQ_INVALIDCOL, ::GetSelectedOutputValue(id, 0, c, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, var.vresult);
::SetCurrentSelectedOutputUserNumber(id, 2);
CPPUNIT_ASSERT_EQUAL(7, ::GetSelectedOutputRowCount(id));
CPPUNIT_ASSERT_EQUAL(16, ::GetSelectedOutputColumnCount(id));
// headings
ncol = 0;
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("si_Halite"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("si_Calcite"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("DUMMY_1"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("DUMMY_2"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Sum_resid"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Sum_Delta/U"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("MaxFracErr"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_2"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_2_min"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_2_max"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_3"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_3_min"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_3_max"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Halite"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Halite_min"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Halite_max"), std::string(var.sVal));
// si_Halite
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 0, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( -7.70857, var.dVal, ::pow(10., -2) );
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 2, 0, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( -7.67087, var.dVal, ::pow(10., -2) );
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 3, 0, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( -7.6362, var.dVal, ::pow(10., -2) );
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 4, 0, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( -999.999, var.dVal, ::pow(10., -2) );
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 5, 0, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( -7.60092, var.dVal, ::pow(10., -2) );
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 6, 0, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( -7.60411, var.dVal, ::pow(10., -2) );
// si_Calcite
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 1, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.692077, var.dVal, ::pow(10., -2) );
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 2, 1, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.678847, var.dVal, ::pow(10., -2) );
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 3, 1, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.678847, var.dVal, ::pow(10., -2) );
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 4, 1, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( -999.999, var.dVal, ::pow(10., -2) );
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 5, 1, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( -999.999, var.dVal, ::pow(10., -2) );
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 6, 1, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.672429, var.dVal, ::pow(10., -2) );
// DUMMY_1
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 2, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 2, 2, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Dummy1"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 3, 2, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Dummy1"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 4, 2, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Dummy1"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 5, 2, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Dummy1"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 6, 2, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Dummy1"), std::string(var.sVal));
// DUMMY_2
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 3, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 2, 3, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Dummy2"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 3, 3, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Dummy2"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 4, 3, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Dummy2"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 5, 3, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Dummy2"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 6, 3, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Dummy2"), std::string(var.sVal));
// Sum_resid
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 4, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 2, 4, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 3, 4, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 4, 4, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 5, 4, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 6, 4, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 3.69E-13, var.dVal, ::pow(10., log10(3.69E-13)-2) );
// Sum_Delta/U
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 5, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 2, 5, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 3, 5, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 4, 5, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 5, 5, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 6, 5, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// MaxFracErr
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 6, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 2, 6, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 3, 6, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 4, 6, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 5, 6, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 6, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Soln_2
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 7, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 2, 7, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 3, 7, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 4, 7, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 5, 7, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 6, 7, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 1, var.dVal, ::pow(10., -3) );
// Soln_2_min
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 8, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 2, 8, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 3, 8, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 4, 8, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 5, 8, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 6, 8, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Soln_2_max
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 9, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 2, 9, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 3, 9, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 4, 9, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 5, 9, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 6, 9, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Soln_3
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 10, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 2, 10, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 3, 10, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 4, 10, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 5, 10, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 6, 10, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 1, var.dVal, ::pow(10., -3) );
// Soln_3_min
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 11, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 2, 11, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 3, 11, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 4, 11, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 5, 11, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 6, 11, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Soln_3_max
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 12, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 2, 12, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 3, 12, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 4, 12, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 5, 12, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 6, 12, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Halite
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 13, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 2, 13, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 3, 13, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 4, 13, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 5, 13, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 6, 13, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.001, var.dVal, ::pow(10., -3) );
// Halite_min
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 14, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 2, 14, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 3, 14, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 4, 14, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 5, 14, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 6, 14, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Halite_max
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 15, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 2, 15, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 3, 15, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 4, 15, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 5, 15, &var)); CPPUNIT_ASSERT_EQUAL(TT_EMPTY, var.type);
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 6, 15, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// edge cases
r = ::GetSelectedOutputRowCount(id);
c = ::GetSelectedOutputColumnCount(id);
CPPUNIT_ASSERT_EQUAL(IPQ_INVALIDROW, ::GetSelectedOutputValue(id, -1, 0, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, var.vresult);
CPPUNIT_ASSERT_EQUAL(IPQ_INVALIDROW, ::GetSelectedOutputValue(id, r, 0, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, var.vresult);
CPPUNIT_ASSERT_EQUAL(IPQ_INVALIDCOL, ::GetSelectedOutputValue(id, 0, -1, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, var.vresult);
CPPUNIT_ASSERT_EQUAL(IPQ_INVALIDCOL, ::GetSelectedOutputValue(id, 0, c, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, var.vresult);
::SetCurrentSelectedOutputUserNumber(id, 3);
CPPUNIT_ASSERT_EQUAL(2, ::GetSelectedOutputRowCount(id));
CPPUNIT_ASSERT_EQUAL(12, ::GetSelectedOutputColumnCount(id));
// headings
ncol = 0;
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Sum_resid"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Sum_Delta/U"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("MaxFracErr"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_2"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_2_min"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_2_max"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_3"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_3_min"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Soln_3_max"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Halite"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Halite_min"), std::string(var.sVal));
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 0, ncol++, &var)); CPPUNIT_ASSERT_EQUAL(std::string("Halite_max"), std::string(var.sVal));
// Sum_resid
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 0, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 3.69E-13, var.dVal, ::pow(10., log10(3.69E-13)-2) );
// Sum_Delta/U
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 1, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// MaxFracErr
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 2, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Soln_2
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 3, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 1, var.dVal, ::pow(10., -3) );
// Soln_2_min
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 4, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Soln_2_max
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 5, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Soln_3
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 6, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 1, var.dVal, ::pow(10., -3) );
// Soln_3_min
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 7, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Soln_3_max
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 8, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Halite
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 9, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.001, var.dVal, ::pow(10., -3) );
// Halite_min
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 10, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// Halite_max
CPPUNIT_ASSERT_EQUAL(IPQ_OK, ::GetSelectedOutputValue(id, 1, 11, &var)); CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, var.dVal, ::pow(10., -3) );
// edge cases
r = ::GetSelectedOutputRowCount(id);
c = ::GetSelectedOutputColumnCount(id);
CPPUNIT_ASSERT_EQUAL(IPQ_INVALIDROW, ::GetSelectedOutputValue(id, -1, 0, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, var.vresult);
CPPUNIT_ASSERT_EQUAL(IPQ_INVALIDROW, ::GetSelectedOutputValue(id, r, 0, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDROW, var.vresult);
CPPUNIT_ASSERT_EQUAL(IPQ_INVALIDCOL, ::GetSelectedOutputValue(id, 0, -1, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, var.vresult);
CPPUNIT_ASSERT_EQUAL(IPQ_INVALIDCOL, ::GetSelectedOutputValue(id, 0, c, &var)); CPPUNIT_ASSERT_EQUAL(TT_ERROR, var.type); CPPUNIT_ASSERT_EQUAL(VR_INVALIDCOL, var.vresult);
CPPUNIT_ASSERT_EQUAL(IPQ_INVALIDARG, ::SetCurrentSelectedOutputUserNumber(id, -1));
CPPUNIT_ASSERT_EQUAL(IPQ_INVALIDARG, ::SetCurrentSelectedOutputUserNumber(id, 0));
}
void TestIPhreeqcLib::TestGetSelectedOutputCount(void)
{
int id = ::CreateIPhreeqc();
CPPUNIT_ASSERT(id >= 0);
CPPUNIT_ASSERT_EQUAL(0, ::GetSelectedOutputCount(id));
CPPUNIT_ASSERT_EQUAL(0, ::LoadDatabase(id, "../database/phreeqc.dat"));
CPPUNIT_ASSERT_EQUAL(0, ::GetSelectedOutputCount(id));
CPPUNIT_ASSERT_EQUAL(0, ::RunFile(id, "multi_punch"));
CPPUNIT_ASSERT_EQUAL(3, ::GetSelectedOutputCount(id));
}
void TestIPhreeqcLib::TestGetNthSelectedOutputUserNumber(void)
{
int id = ::CreateIPhreeqc();
CPPUNIT_ASSERT(id >= 0);
CPPUNIT_ASSERT_EQUAL(0, ::LoadDatabase(id, "../database/phreeqc.dat"));
CPPUNIT_ASSERT_EQUAL(0, ::RunFile(id, "multi_punch"));
CPPUNIT_ASSERT_EQUAL(3, ::GetSelectedOutputCount(id));
CPPUNIT_ASSERT_EQUAL(1, ::GetNthSelectedOutputUserNumber(id, 0));
CPPUNIT_ASSERT_EQUAL(2, ::GetNthSelectedOutputUserNumber(id, 1));
CPPUNIT_ASSERT_EQUAL(3, ::GetNthSelectedOutputUserNumber(id, 2));
// edge cases
CPPUNIT_ASSERT_EQUAL((int)IPQ_INVALIDARG, ::GetNthSelectedOutputUserNumber(id, -1));
CPPUNIT_ASSERT_EQUAL((int)IPQ_INVALIDARG, ::GetNthSelectedOutputUserNumber(id, 4));
}
void TestIPhreeqcLib::TestGetCurrentSelectedOutputUserNumber(void)
{
int id = ::CreateIPhreeqc();
CPPUNIT_ASSERT(id >= 0);
CPPUNIT_ASSERT_EQUAL(1, ::GetCurrentSelectedOutputUserNumber(id));
CPPUNIT_ASSERT_EQUAL(0, ::LoadDatabase(id, "../database/phreeqc.dat"));
CPPUNIT_ASSERT_EQUAL(1, ::GetCurrentSelectedOutputUserNumber(id));
CPPUNIT_ASSERT_EQUAL(0, ::RunFile(id, "multi_punch"));
CPPUNIT_ASSERT_EQUAL(1, ::GetCurrentSelectedOutputUserNumber(id));
CPPUNIT_ASSERT_EQUAL(6, ::GetSelectedOutputRowCount(id));
CPPUNIT_ASSERT_EQUAL(35, ::GetSelectedOutputColumnCount(id));
::SetCurrentSelectedOutputUserNumber(id, 2);
CPPUNIT_ASSERT_EQUAL(2, ::GetCurrentSelectedOutputUserNumber(id));
CPPUNIT_ASSERT_EQUAL(7, ::GetSelectedOutputRowCount(id));
CPPUNIT_ASSERT_EQUAL(16, ::GetSelectedOutputColumnCount(id));
::SetCurrentSelectedOutputUserNumber(id, 3);
CPPUNIT_ASSERT_EQUAL(3, ::GetCurrentSelectedOutputUserNumber(id));
CPPUNIT_ASSERT_EQUAL(2, ::GetSelectedOutputRowCount(id));
CPPUNIT_ASSERT_EQUAL(12, ::GetSelectedOutputColumnCount(id));
// edge cases
CPPUNIT_ASSERT_EQUAL(IPQ_INVALIDARG, ::SetCurrentSelectedOutputUserNumber(id, -1));
CPPUNIT_ASSERT_EQUAL(3, ::GetCurrentSelectedOutputUserNumber(id));
CPPUNIT_ASSERT_EQUAL(IPQ_INVALIDARG, ::SetCurrentSelectedOutputUserNumber(id, 0));
CPPUNIT_ASSERT_EQUAL(3, ::GetCurrentSelectedOutputUserNumber(id));
}

View File

@ -71,6 +71,10 @@ class TestIPhreeqcLib : public CppUnit::TestFixture
CPPUNIT_TEST( TestBasicSURF ); CPPUNIT_TEST( TestBasicSURF );
CPPUNIT_TEST( TestIEEE ); CPPUNIT_TEST( TestIEEE );
CPPUNIT_TEST( TestDelete ); CPPUNIT_TEST( TestDelete );
CPPUNIT_TEST( TestMultiPunchCSelectedOutput );
CPPUNIT_TEST( TestGetSelectedOutputCount );
CPPUNIT_TEST( TestGetNthSelectedOutputUserNumber );
CPPUNIT_TEST( TestGetCurrentSelectedOutputUserNumber );
CPPUNIT_TEST_SUITE_END(); CPPUNIT_TEST_SUITE_END();
public: public:
@ -142,6 +146,10 @@ public:
void TestBasicSURF(void); void TestBasicSURF(void);
void TestIEEE(void); void TestIEEE(void);
void TestDelete(void); void TestDelete(void);
void TestMultiPunchCSelectedOutput(void);
void TestGetSelectedOutputCount(void);
void TestGetNthSelectedOutputUserNumber(void);
void TestGetCurrentSelectedOutputUserNumber(void);
protected: 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); 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);