#include #include #include template class TTestGetSet { private: bool (TClass::*_get)(void)const; void (TClass::*_set)(bool); TClass* _p; public: TTestGetSet(TClass* p, bool(TClass::*get)(void)const, void(TClass::*set)(bool)) { _p = p; _get = get; _set = set; } int Test(void) { if ((*_p.*_get)()) { return EXIT_FAILURE; } (*_p.*_set)(true); if (!(*_p.*_get)()) { return EXIT_FAILURE; } (*_p.*_set)(false); if ((*_p.*_get)()) { return EXIT_FAILURE; } return EXIT_SUCCESS; } }; int main(int argc, const char* argv[]) { IPhreeqc iphreeqc; // Dump TTestGetSet testDump(&iphreeqc, &IPhreeqc::GetDumpOn, &IPhreeqc::SetDumpOn); if (testDump.Test() != EXIT_SUCCESS) { return EXIT_FAILURE; } // Dump string TTestGetSet testDumpString(&iphreeqc, &IPhreeqc::GetDumpStringOn, &IPhreeqc::SetDumpStringOn); if (testDumpString.Test() != EXIT_SUCCESS) { return EXIT_FAILURE; } // Error TTestGetSet testError(&iphreeqc, &IPhreeqc::GetErrorOn, &IPhreeqc::SetErrorOn); if (testError.Test() != EXIT_SUCCESS) { return EXIT_FAILURE; } // Log TTestGetSet testLog(&iphreeqc, &IPhreeqc::GetLogOn, &IPhreeqc::SetLogOn); if (testLog.Test() != EXIT_SUCCESS) { return EXIT_FAILURE; } // Output TTestGetSet testOutput(&iphreeqc, &IPhreeqc::GetOutputOn, &IPhreeqc::SetOutputOn); if (testOutput.Test() != EXIT_SUCCESS) { return EXIT_FAILURE; } // Selected output TTestGetSet testSelectedOutput(&iphreeqc, &IPhreeqc::GetSelectedOutputOn, &IPhreeqc::SetSelectedOutputOn); if (testSelectedOutput.Test() != EXIT_SUCCESS) { return EXIT_FAILURE; } if (iphreeqc.LoadDatabase("phreeqc.dat") != 0) { std::cout << iphreeqc.GetErrorString(); return EXIT_FAILURE; } if (iphreeqc.RunFile("ex2") != 0) { std::cout << iphreeqc.GetErrorString(); return EXIT_FAILURE; } for (int r = 0; r < iphreeqc.GetSelectedOutputRowCount(); ++r) { for (int c = 0; c < iphreeqc.GetSelectedOutputColumnCount(); ++c) { VAR v; if (iphreeqc.GetSelectedOutputValue(r, c, &v) != VR_OK) { return EXIT_FAILURE; } if (VarClear(&v) != VR_OK) { return EXIT_FAILURE; } } } return EXIT_SUCCESS; }