00001 #include "TestResult.h" 00002 #include "FitScanResult.h" 00003 #include "RawScanResult.h" 00004 #include "ConfigurationVariable.h" 00005 #include "NullVariable.h" 00006 #include "UniqueID.h" 00007 #include "Sct/SctNames.h" 00008 #include "Sct/IS/IOManagerIS.h" 00009 #include "Sct/IS/IONameIS.h" 00010 #include <algorithm> 00011 #include <sstream> 00012 00013 using namespace std; 00014 using namespace Sct; 00015 using namespace Sct::IS; 00016 using namespace boost; 00017 00018 namespace SctData { 00019 00020 TestResult::TestResult(const unsigned int runNumber, const string & moduleName, 00021 const ConfigurationVariable& testVariable, const ConfigurationVariable& scanVariable) throw () 00022 : header(0, runNumber, moduleName, scanVariable), testVariable(&testVariable), 00023 passed(false), problem(false) { 00024 } 00025 00026 00027 TestResult::TestResult() throw() : testVariable(&NullVariable::instance()), 00028 passed(false), problem(false) { 00029 } 00030 00031 const ResultHeader& TestResult::getHeader() const { 00032 return header; 00033 } 00034 00035 ResultHeader& TestResult::getHeader() { 00036 return header; 00037 } 00038 00039 unsigned int TestResult::getRunNumber() const throw() { 00040 return getHeader().getRunNumber(); 00041 } 00042 00043 void TestResult::setRunNumber(unsigned int runNumber) throw() { 00044 getHeader().setRunNumber(runNumber); 00045 } 00046 00047 string TestResult::getModuleName() const throw() { 00048 return getHeader().getModuleName(); 00049 } 00050 00051 void TestResult::setModuleName(string name) throw() { 00052 getHeader().setModuleName(name); 00053 } 00054 00055 const DefectList& TestResult::getDefects() const throw() { 00056 return defects; 00057 } 00058 00059 DefectList& TestResult::getDefects() throw() { 00060 return defects; 00061 } 00062 00063 const ConfigurationVariable& TestResult::getScanVariable() const throw() { 00064 return getHeader().getVariable(); 00065 } 00066 00067 void TestResult::setScanVariable(const ConfigurationVariable& scanVariable) throw() { 00068 getHeader().setVariable(scanVariable); 00069 } 00070 00071 const ConfigurationVariable& TestResult::getTestVariable() const throw() { 00072 return *testVariable; 00073 } 00074 00075 void TestResult::setTestVariable(const ConfigurationVariable& testVariable) throw() { 00076 this->testVariable = &testVariable; 00077 } 00078 00079 bool TestResult::getPassed() const throw() { 00080 return passed; 00081 } 00082 00083 void TestResult::setPassed(bool passed) throw() { 00084 this->passed = passed; 00085 } 00086 00087 bool TestResult::getProblem() const throw() { 00088 return problem; 00089 } 00090 00091 void TestResult::setProblem(bool problem) throw() { 00092 this->problem = problem; 00093 } 00094 00095 vector<string> TestResult::getComments() const throw() { 00096 return comments; 00097 } 00098 00099 void TestResult::addComment(string comment) throw() { 00100 comments.push_back(comment); 00101 } 00102 00103 void TestResult::addScan(const unsigned int scanNumber, const double testPoint) throw(LogicError) { 00104 if (data.size() == 0) { 00105 getHeader().setScanNumber(scanNumber); 00106 } 00107 data.push_back(ScanData(scanNumber, testPoint)); 00108 sort(data.begin(), data.end()); 00109 } 00110 00111 string TestResult::getUniqueID() const throw(LogicError) { 00112 if (data.size() > 0) { 00113 return getHeader().getUniqueID(); 00114 } 00115 throw IllegalStateError("TestResult::getUniqueID() : empty test result", __FILE__, __LINE__); 00116 } 00117 00118 unsigned TestResult::getScanNumberAt(unsigned int i) const throw(LogicError) { 00119 if ( i>=data.size() ) 00120 throw OutOfRangeError<unsigned>("TestPoint::getScanNumberAt", __FILE__, __LINE__,i,0,data.size()-1); 00121 return data[i].scanNumber; 00122 } 00123 00124 double TestResult::getTestPointAt(unsigned int i) const throw(LogicError) { 00125 if ( i>=data.size() ) 00126 throw OutOfRangeError<unsigned>("TestPoint::getTestPointAt", __FILE__, __LINE__,i,0,data.size()-1); 00127 return data[i].testPoint; 00128 } 00129 00130 unsigned int TestResult::getIndex(unsigned int scanNumber) const throw(LogicError) { 00131 vector<ScanData>::const_iterator i=find(data.begin(), data.end(), scanNumber); 00132 if (i==data.end() ) { 00133 ostringstream text; 00134 text << "TestResult::findScanData scan not found scanNumber="<< scanNumber; 00135 throw InvalidArgumentError( text.str(), __FILE__, __LINE__ ); 00136 } 00137 return i-data.begin(); 00138 } 00139 00141 TestResult::ScanData::ScanData(const unsigned int scanNumber, const double testPoint) throw() 00142 : scanNumber(scanNumber), testPoint(testPoint) {} 00143 00144 bool TestResult::ScanData::operator<(const ScanData& s) const throw() { 00145 if (this->scanNumber<s.scanNumber) 00146 return true; 00147 return false; 00148 } 00149 00150 bool TestResult::ScanData::operator>(const ScanData& s) const throw() { 00151 if (this->scanNumber>s.scanNumber) 00152 return true; 00153 return false; 00154 } 00155 00156 bool TestResult::ScanData::operator==(const unsigned int aScanNumber) const throw() { 00157 if (this->scanNumber==aScanNumber) 00158 return true; 00159 return false; 00160 } 00161 00162 void TestResult::setDcsData(boost::shared_ptr<const DcsData> data){ 00163 m_dcsData = data; 00164 } 00165 00166 boost::shared_ptr<const DcsData> TestResult::getDcsData() const { 00167 return m_dcsData; 00168 } 00169 00170 }