6 #include "PixTestParameters.hh"
14 bool bothAreSpaces(
char lhs,
char rhs) {
15 return (lhs == rhs) && (lhs ==
' ');
20 PixTestParameters::PixTestParameters(
string file,
bool verbose) {
21 readTestParameterFile(file, verbose);
25 vector<string> PixTestParameters::getTests() {
27 for (map<
string, vector<pair<string, string> > >::iterator imap = fTests.begin(); imap != fTests.end(); ++imap) {
28 a.push_back(imap->first);
34 bool PixTestParameters::readTestParameterFile(
string file,
bool verbose) {
35 ifstream is(file.c_str());
37 LOG(logDEBUG) <<
"cannot read " << file;
41 vector<pair<string, string> > testparameters;
42 string testName, parName, parValString;
43 bool oneTooMuch(
false);
53 if (string::npos != line.find(
"--")) {
55 string::size_type m1 = line.find(
" ");
56 if (m1 < line.size()) {
57 testName = line.substr(m1+1);
58 testName.erase (std::remove(testName.begin(), testName.end(),
' '), testName.end());
62 if (string::npos != line.find(
"--")) {
68 std::string::iterator new_end = std::unique(line.begin(), line.end(), bothAreSpaces);
69 line.erase(new_end, line.end());
72 string::size_type m1 = line.find(
" ");
73 if (m1 < line.size()) {
74 parName = line.substr(0, m1);
75 std::transform(parName.begin(), parName.end(), parName.begin(), ::tolower);
76 parValString = line.substr(m1+1);
77 testparameters.push_back(make_pair(parName, parValString));
85 fTests.insert(make_pair(testName, testparameters));
86 testparameters.clear();
96 vector<pair<string, string> > PixTestParameters::getTestParameters(
string testName) {
97 return fTests[testName];
102 void PixTestParameters::dump() {
103 for (map<
string, vector<pair<string, string> > >::iterator imap = fTests.begin(); imap != fTests.end(); ++imap) {
104 LOG(logDEBUG) <<
"PixTestParameters: ->" << imap->first <<
"<-";
105 vector<pair<string, string> > pars = imap->second;
106 for (vector<pair<string, string> >::iterator imap2 = pars.begin(); imap2 != pars.end(); ++imap2) {
107 LOG(logDEBUG) <<
" " << imap2->first <<
": " << imap2->second;
115 bool PixTestParameters::setTestParameter(
string testname,
string parname,
string value) {
117 for (map<
string, vector<pair<string, string> > >::iterator imap = fTests.begin(); imap != fTests.end(); ++imap) {
118 if (imap->first.compare(testname))
continue;
119 LOG(logDEBUG) <<
"PixTestParameters: ->" << imap->first <<
"<-";
121 for (
unsigned int i = 0; i < imap->second.size(); ++i) {
122 if (!imap->second[i].first.compare(parname)) {
123 imap->second[i].second = value;
124 LOG(logDEBUG) <<
" setting " << imap->second[i].first <<
" to new value " << imap->second[i].second;
135 bool PixTestParameters::addTestParameter(
string testname,
string parname,
string value) {
137 for (map<
string, vector<pair<string, string> > >::iterator imap = fTests.begin(); imap != fTests.end(); ++imap) {
138 if (imap->first.compare(testname))
continue;
139 LOG(logDEBUG) <<
"PixTestParameters: ->" << imap->first <<
"<- adding parameter " << parname;
140 vector<pair<string, string> > pars = imap->second;
142 bool alreadyIn(
false);
143 for (
unsigned int i = 0; i < pars.size(); ++i) {
144 if (!pars[i].first.compare(parname)) {
145 if (!pars[i].second.compare(value)) alreadyIn =
true;
150 pars.push_back(make_pair(parname, value));
151 LOG(logDEBUG) <<
" adding " << parname <<
" with value " << value;
162 bool PixTestParameters::setTestParameters(
string testname, vector<std::pair<std::string, std::string> > v) {
164 for (map<
string, vector<pair<string, string> > >::iterator imap = fTests.begin(); imap != fTests.end(); ++imap) {
165 if (imap->first.compare(testname))
continue;
175 bool PixTestParameters::setTestParameters(
string testname,
string testParameters) {
177 for (map<
string, vector<pair<string, string> > >::iterator imap = fTests.begin(); imap != fTests.end(); ++imap) {
178 string ltname = imap->first;
179 if (!ltname.compare(testname)) {
180 vector<pair<string, string> > v = splitStringIntoParameters(testParameters);
181 for (
unsigned int i = 0; i < v.size(); ++i) {
182 setTestParameter(testname, v[i].first, v[i].second);
192 vector<pair<string, string> > PixTestParameters::splitStringIntoParameters(
string testParameters) {
193 vector<pair<string, string> > v;
195 replaceAll(testParameters,
" ",
"");
196 replaceAll(testParameters,
"\t",
"");
197 string::size_type m0 = 0;
198 string::size_type m1 = testParameters.find(
"=");
199 string::size_type m2 = testParameters.find(
";");
200 if (m2 == string::npos) {
201 m2 = testParameters.size();
205 var = testParameters.substr(m0, m1-m0);
206 val = testParameters.substr(m1+1, m2-m1-1);
207 v.push_back(make_pair(var, val));
208 if (m2 == testParameters.size())
break;
210 m1 = testParameters.find(
"=", m0);
211 m2 = testParameters.find(
";", m0);
212 if (m2 == string::npos) m2 = testParameters.size();
213 }
while (m1 < testParameters.size());
220 void PixTestParameters::replaceAll(
string& str,
const string& from,
const string& to) {
221 if (from.empty())
return;
222 size_t start_pos = 0;
223 while((start_pos = str.find(from, start_pos)) != string::npos) {
224 str.replace(start_pos, from.length(), to);
225 start_pos += to.length();