summaryrefslogtreecommitdiff
path: root/build/Bonmin/include/coin/OsiUnitTests.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'build/Bonmin/include/coin/OsiUnitTests.hpp')
-rw-r--r--build/Bonmin/include/coin/OsiUnitTests.hpp374
1 files changed, 0 insertions, 374 deletions
diff --git a/build/Bonmin/include/coin/OsiUnitTests.hpp b/build/Bonmin/include/coin/OsiUnitTests.hpp
deleted file mode 100644
index fbb4fc1..0000000
--- a/build/Bonmin/include/coin/OsiUnitTests.hpp
+++ /dev/null
@@ -1,374 +0,0 @@
-// Copyright (C) 2010
-// All Rights Reserved.
-// This code is licensed under the terms of the Eclipse Public License (EPL).
-
-/*! \file OsiUnitTests.hpp
-
- Utility methods for OSI unit tests.
-*/
-
-#ifndef OSISOLVERINTERFACETEST_HPP_
-#define OSISOLVERINTERFACETEST_HPP_
-
-#include <cstdio>
-#include <cstdlib>
-#include <iostream>
-#include <string>
-#include <sstream>
-#include <vector>
-#include <list>
-#include <map>
-
-class OsiSolverInterface;
-class CoinPackedVectorBase;
-
-/** A function that tests that a lot of problems given in MPS files (mostly the NETLIB problems) solve properly with all the specified solvers.
- *
- * The routine creates a vector of NetLib problems (problem name, objective,
- * various other characteristics), and a vector of solvers to be tested.
- *
- * Each solver is run on each problem. The run is deemed successful if the
- * solver reports the correct problem size after loading and returns the
- * correct objective value after optimization.
-
- * If multiple solvers are available, the results are compared pairwise against
- * the results reported by adjacent solvers in the solver vector. Due to
- * limitations of the volume solver, it must be the last solver in vecEmptySiP.
- */
-void OsiSolverInterfaceMpsUnitTest
- (const std::vector<OsiSolverInterface*> & vecEmptySiP,
- const std::string& mpsDir);
-
-/** A function that tests the methods in the OsiSolverInterface class.
- * Some time ago, if this method is compiled with optimization,
- * the compilation took 10-15 minutes and the machine pages (has 256M core memory!)...
- */
-void OsiSolverInterfaceCommonUnitTest
- (const OsiSolverInterface* emptySi,
- const std::string& mpsDir,
- const std::string& netlibDir);
-
-/** A function that tests the methods in the OsiColCut class. */
-void OsiColCutUnitTest
- (const OsiSolverInterface * baseSiP,
- const std::string & mpsDir);
-
-/** A function that tests the methods in the OsiRowCut class. */
-void OsiRowCutUnitTest
- (const OsiSolverInterface * baseSiP,
- const std::string & mpsDir);
-
-/** A function that tests the methods in the OsiRowCutDebugger class. */
-void OsiRowCutDebuggerUnitTest
- (const OsiSolverInterface * siP,
- const std::string & mpsDir);
-
-/** A function that tests the methods in the OsiCuts class. */
-void OsiCutsUnitTest();
-
-/// A namespace so we can define a few `global' variables to use during tests.
-namespace OsiUnitTest {
-
-class TestOutcomes;
-
-/*! \brief Verbosity level of unit tests
-
- 0 (default) for minimal output; larger numbers produce more output
-*/
-extern unsigned int verbosity;
-
-/*! \brief Behaviour on failing a test
-
- - 0 (= default) continue
- - 1 press any key to continue
- - 2 stop with abort()
-*/
-extern unsigned int haltonerror;
-
-/*! \brief Test outcomes
-
- A global TestOutcomes object to store test outcomes during the run of the unit test
- for an OSI.
- */
-extern TestOutcomes outcomes;
-
-/*! \brief Print an error message
-
- Formatted as "XxxSolverInterface testing issue: message" where Xxx is the string
- provided as \p solverName.
-
- Flushes std::cout before printing to std::cerr.
-*/
-void failureMessage(const std::string &solverName,
- const std::string &message) ;
-/// \overload
-void failureMessage(const OsiSolverInterface &si,
- const std::string &message) ;
-
-/*! \brief Print an error message, specifying the test name and condition
-
- Formatted as "XxxSolverInterface testing issue: testname failed: testcond" where
- Xxx is the OsiStrParam::OsiSolverName parameter of the \p si.
- Flushes std::cout before printing to std::cerr.
-*/
-void failureMessage(const std::string &solverName,
- const std::string &testname, const std::string &testcond) ;
-
-/// \overload
-void failureMessage(const OsiSolverInterface &si,
- const std::string &testname, const std::string &testcond) ;
-
-/*! \brief Print a message.
-
- Prints the message as given. Flushes std::cout before printing to std::cerr.
-*/
-void testingMessage(const char *const msg) ;
-
-/*! \brief Utility method to check equality
-
- Tests for equality using CoinRelFltEq with tolerance \p tol. Understands the
- notion of solver infinity and obtains the value for infinity from the solver
- interfaces supplied as parameters.
-*/
-bool equivalentVectors(const OsiSolverInterface * si1,
- const OsiSolverInterface * si2,
- double tol, const double * v1, const double * v2, int size) ;
-
-/*! \brief Compare two problems for equality
-
- Compares the problems held in the two solvers: constraint matrix, row and column
- bounds, column type, and objective. Rows are checked using upper and lower bounds
- and using sense, bound, and range.
-*/
-bool compareProblems(OsiSolverInterface *osi1, OsiSolverInterface *osi2) ;
-
-/*! \brief Compare a packed vector with an expanded vector
-
- Checks that all values present in the packed vector are present in the full vector
- and checks that there are no extra entries in the full vector. Uses CoinRelFltEq
- with the default tolerance.
-*/
-bool isEquivalent(const CoinPackedVectorBase &pv, int n, const double *fv) ;
-
-/*! \brief Process command line parameters.
-
- An unrecognised keyword which is not in the \p ignorekeywords map will trigger the
- help message and a return value of false. For each keyword in \p ignorekeywords, you
- can specify the number of following parameters that should be ignored.
-
- This should be replaced with the one of the standard CoinUtils parameter mechanisms.
- */
-bool processParameters (int argc, const char **argv,
- std::map<std::string,std::string>& parms,
- const std::map<std::string,int>& ignorekeywords = std::map<std::string,int>());
-
-/// A single test outcome record.
-class TestOutcome {
- public:
- /// Test result
- typedef enum {
- NOTE = 0,
- PASSED = 1,
- WARNING = 2,
- ERROR = 3,
- LAST = 4
- } SeverityLevel;
- /// Print strings for SeverityLevel
- static std::string SeverityLevelName[LAST];
- /// Name of component under test
- std::string component;
- /// Name of test
- std::string testname;
- /// Condition being tested
- std::string testcond;
- /// Test result
- SeverityLevel severity;
- /// Set to true if problem is expected
- bool expected;
- /// Name of code file where test executed
- std::string filename;
- /// Line number in code file where test executed
- int linenumber;
- /// Standard constructor
- TestOutcome(const std::string& comp, const std::string& tst,
- const char* cond, SeverityLevel sev,
- const char* file, int line, bool exp = false)
- : component(comp),testname(tst),testcond(cond),severity(sev),
- expected(exp),filename(file),linenumber(line)
- { }
- /// Print the test outcome
- void print() const;
-};
-
-/// Utility class to maintain a list of test outcomes.
-class TestOutcomes : public std::list<TestOutcome> {
- public:
- /// Add an outcome to the list
- void add(std::string comp, std::string tst, const char* cond,
- TestOutcome::SeverityLevel sev, const char* file, int line,
- bool exp = false)
- { push_back(TestOutcome(comp,tst,cond,sev,file,line,exp)); }
-
- /*! \brief Add an outcome to the list
-
- Get the component name from the solver interface.
- */
- void add(const OsiSolverInterface& si, std::string tst, const char* cond,
- TestOutcome::SeverityLevel sev, const char* file, int line,
- bool exp = false);
- /// Print the list of outcomes
- void print() const;
- /*! \brief Count total and expected outcomes at given severity level
-
- Given a severity level, walk the list of outcomes and count the total number
- of outcomes at this severity level and the number expected.
- */
- void getCountBySeverity(TestOutcome::SeverityLevel sev,
- int& total, int& expected) const;
-};
-
-/// Convert parameter to a string (stringification)
-#define OSIUNITTEST_QUOTEME_(x) #x
-/// Convert to string with one level of expansion of the parameter
-#define OSIUNITTEST_QUOTEME(x) OSIUNITTEST_QUOTEME_(x)
-
-template <typename Component>
-bool OsiUnitTestAssertSeverityExpected(
- bool condition, const char * condition_str, const char *filename,
- int line, const Component& component, const std::string& testname,
- TestOutcome::SeverityLevel severity, bool expected)
-{
- if (condition) {
- OsiUnitTest::outcomes.add(component, testname, condition_str,
- OsiUnitTest::TestOutcome::PASSED, filename, line, false);
- if (OsiUnitTest::verbosity >= 2) {
- std::ostringstream successmsg;
- successmsg << __FILE__ << ":" << __LINE__ << ": " << testname
- << " (condition \'" << condition_str << "\') passed.\n";
- OsiUnitTest::testingMessage(successmsg.str().c_str());
- }
- return true;
- }
- OsiUnitTest::outcomes.add(component, testname, condition_str,
- severity, filename, line, expected);
- OsiUnitTest::failureMessage(component, testname, condition_str);
- switch (OsiUnitTest::haltonerror) {
- case 2:
- { if (severity >= OsiUnitTest::TestOutcome::ERROR ) std::abort(); break; }
- case 1:
- { std::cout << std::endl << "press any key to continue..." << std::endl;
- std::getchar();
- break ; }
- default: ;
- }
- return false;
-}
-
-/// Add a test outcome to the list held in OsiUnitTest::outcomes
-#define OSIUNITTEST_ADD_OUTCOME(component,testname,testcondition,severity,expected) \
- OsiUnitTest::outcomes.add(component,testname,testcondition,severity,\
- __FILE__,__LINE__,expected)
-/*! \brief Test for a condition and record the result
-
- Test \p condition and record the result in OsiUnitTest::outcomes.
- If it succeeds, record the result as OsiUnitTest::TestOutcome::PASSED and print
- a message for OsiUnitTest::verbosity >= 2.
- If it fails, record the test as failed with \p severity and \p expected and
- react as specified by OsiUnitTest::haltonerror.
-
- \p failurecode is executed when failure is not fatal.
-*/
-#define OSIUNITTEST_ASSERT_SEVERITY_EXPECTED(condition,failurecode,component,\
- testname, severity, expected) \
-{ \
- if (!OsiUnitTestAssertSeverityExpected(condition, #condition, \
- __FILE__, __LINE__, component, testname, severity, expected)) { \
- failurecode; \
- } \
-}
-
-/*! \brief Perform a test with severity OsiUnitTest::TestOutcome::ERROR, failure not
- expected.
-*/
-#define OSIUNITTEST_ASSERT_ERROR(condition, failurecode, component, testname) \
- OSIUNITTEST_ASSERT_SEVERITY_EXPECTED(condition,failurecode,component,testname,\
- OsiUnitTest::TestOutcome::ERROR,false)
-
-/*! \brief Perform a test with severity OsiUnitTest::TestOutcome::WARNING, failure
- not expected.
-*/
-#define OSIUNITTEST_ASSERT_WARNING(condition, failurecode, component, testname) \
- OSIUNITTEST_ASSERT_SEVERITY_EXPECTED(condition,failurecode,component,testname,\
- OsiUnitTest::TestOutcome::WARNING,false)
-
-/*! \brief Perform a test surrounded by a try/catch block
-
- \p trycode is executed in a try/catch block; if there's no throw the test is deemed
- to have succeeded and is recorded in OsiUnitTest::outcomes with status
- OsiUnitTest::TestOutcome::PASSED. If the \p trycode throws a CoinError, the failure
- is recorded with status \p severity and \p expected and the value of
- OsiUnitTest::haltonerror is consulted. If the failure is not fatal, \p catchcode is
- executed. If any other error is thrown, the failure is recorded as for a CoinError
- and \p catchcode is executed (haltonerror is not consulted).
-*/
-#define OSIUNITTEST_CATCH_SEVERITY_EXPECTED(trycode, catchcode, component, testname,\
- severity, expected) \
-{ \
- try { \
- trycode; \
- OSIUNITTEST_ADD_OUTCOME(component,testname,#trycode " did not throw exception",\
- OsiUnitTest::TestOutcome::PASSED,false); \
- if (OsiUnitTest::verbosity >= 2) { \
- std::string successmsg( __FILE__ ":" OSIUNITTEST_QUOTEME(__LINE__) ": "); \
- successmsg = successmsg + testname; \
- successmsg = successmsg + " (code \'" #trycode "\') did not throw exception"; \
- successmsg = successmsg + ".\n" ; \
- OsiUnitTest::testingMessage(successmsg.c_str()); \
- } \
- } catch (CoinError& e) { \
- std::stringstream errmsg; \
- errmsg << #trycode " threw CoinError: " << e.message(); \
- if (e.className().length() > 0) \
- errmsg << " in " << e.className(); \
- if (e.methodName().length() > 0) \
- errmsg << " in " << e.methodName(); \
- if (e.lineNumber() >= 0) \
- errmsg << " at " << e.fileName() << ":" << e.lineNumber(); \
- OSIUNITTEST_ADD_OUTCOME(component,testname,errmsg.str().c_str(),\
- severity,expected); \
- OsiUnitTest::failureMessage(component,testname,errmsg.str().c_str()); \
- switch(OsiUnitTest::haltonerror) { \
- case 2: \
- { if (severity >= OsiUnitTest::TestOutcome::ERROR) abort(); break; } \
- case 1: \
- { std::cout << std::endl << "press any key to continue..." << std::endl; \
- getchar(); \
- break ; } \
- default: ; \
- } \
- catchcode; \
- } catch (...) { \
- std::string errmsg; \
- errmsg = #trycode; \
- errmsg = errmsg + " threw unknown exception"; \
- OSIUNITTEST_ADD_OUTCOME(component,testname,errmsg.c_str(),severity,false); \
- OsiUnitTest::failureMessage(component,testname,errmsg.c_str()); \
- catchcode; \
- } \
-}
-
-/*! \brief Perform a try/catch test with severity OsiUnitTest::TestOutcome::ERROR,
- failure not expected.
-*/
-#define OSIUNITTEST_CATCH_ERROR(trycode, catchcode, component, testname) \
- OSIUNITTEST_CATCH_SEVERITY_EXPECTED(trycode, catchcode, component, testname, OsiUnitTest::TestOutcome::ERROR, false)
-
-/*! \brief Perform a try/catch test with severity OsiUnitTest::TestOutcome::WARNING,
- failure not expected.
-*/
-#define OSIUNITTEST_CATCH_WARNING(trycode, catchcode, component, testname) \
- OSIUNITTEST_CATCH_SEVERITY_EXPECTED(trycode, catchcode, component, testname, OsiUnitTest::TestOutcome::WARNING, false)
-
-} // end namespace OsiUnitTest
-
-#endif /*OSISOLVERINTERFACETEST_HPP_*/