95 std::ostringstream strs;
104 std::string value_str = valtol_str.substr(0,valtol_str.find(
","));
105 value = atof(value_str.c_str());
106 std::string tol_str = valtol_str.substr(valtol_str.find(
",")+1);
107 if(tol_str.find(
",")<=tol_str.length()) {
109 std::string lower_str = tol_str.substr(0,tol_str.find(
","));
110 lower = atof(lower_str.c_str());
111 std::string upper_str = tol_str.substr(tol_str.find(
",")+1);
112 upper = atof(upper_str.c_str());
128 addAttribute<double>(name,val);
132 addAttribute<int>(name,val);
136 addAttribute<bool>(name,val);
140 addAttribute<std::string>(name,val.
as_string());
144 addAttribute<std::string>(name,val);
159 ptr_->appendContentLine(i,str);
200 std::string cpuname(
"Undefined");
201 unsigned int threads = 0;
202 unsigned int cores_per_socket = 0;
203 unsigned int highest_socketid = 0;
206 std::ifstream cpuinfo(
"/proc/cpuinfo");
208 if((cpuinfo.rdstate()&cpuinfo.failbit)) std::cout<<
"Failed to open filen\n";
209 while (!cpuinfo.eof() && !(cpuinfo.rdstate()&cpuinfo.failbit)) {
210 getline (cpuinfo,line);
211 if (line.find(
"model name") < line.size()) {
212 cpuname = line.substr(line.find(
":")+2);
215 if (line.find(
"physical id") < line.size()) {
216 unsigned int socketid = atoi(line.substr(line.find(
":")+2).c_str());
217 highest_socketid = highest_socketid>socketid?highest_socketid:socketid;
219 if (line.find(
"cpu cores") < line.size()) {
220 cores_per_socket = atoi(line.substr(line.find(
":")+2).c_str());
226 XMLTestNode machine_config(
"MachineConfiguration");
230 machine_config.
addString(
"CPU_Name", cpuname);
231 machine_config.
addInt(
"CPU_Sockets", highest_socketid+1);
232 machine_config.
addInt(
"CPU_Cores_Per_Socket", cores_per_socket);
233 machine_config.
addInt(
"CPU_Total_HyperThreads", threads);
234 return machine_config;
241 const std::string ext_hostname)
245 bool is_new_config =
true;
250 if (std::ifstream (
filename.c_str ())) {
256 memset (hostname, 0, 256);
257 if (ext_hostname.empty ()) {
258 gethostname (hostname, 255);
260 strncat (hostname, ext_hostname.c_str (), 255);
276 configuration.
getTag ().compare (
"Configuration") != 0,
277 std::runtime_error,
"Unexpected Tag \"" << configuration.
getTag ()
278 <<
"\"; only children with Tag = \"Configuration\" are allowed in a "
282 ! configuration.
hasChild (
"MachineConfiguration") ||
285 "A Configuration needs to have a child \"MachineConfiguration\" and a "
291 if (machine_configuration.hasSameElements (machine_config)) {
292 is_new_config =
false;
299 int new_test_config = -1;
300 for (
int k = 0; k < old_test.
numChildren (); ++k) {
304 ! old_test_entry.
hasChild (
"TestConfiguration") ||
305 ! new_test_entry.
hasChild (
"TestResults"),
306 std::runtime_error,
"A TestEntry needs to have a child "
307 "\"TestConfiguration\" and a child \"TestResults\".");
314 if (new_test_config < 0) {
318 bool deviation =
false;
324 for (
int old_r = 0; old_r < old_results.
numChildren (); ++old_r) {
334 if((result_entry.
getTag().find(
"Time")==0) || (result_entry.
getTag().find(
"Result")==0)) {
339 double diff = old_valtol.
value - new_valtol.value;
342 double normalization = old_valtol.
value;
343 normalization*=normalization;
345 if(normalization==0?diff>0:diff/normalization>old_valtol.
tolerance*old_valtol.
tolerance) {
347 std::cout << std::endl
348 <<
"DeviationA in Test: \"" << old_test.
getTag()
349 <<
"\" for entry \"" << result_entry.
getTag() <<
"\"" << std::endl;
350 std::cout <<
" Existing Value: \"" << oldv_str <<
"\"" << std::endl;
351 std::cout <<
" New Value: \"" << new_results.
getChild(result_entry.
getTag()).getContentLine(0) <<
"\"" << std::endl << std::endl;
354 if( (old_valtol.
lower>new_valtol.value) || (old_valtol.
upper<new_valtol.value)) {
356 std::cout << std::endl
357 <<
"DeviationB in Test: \"" << old_test.
getTag()
358 <<
"\" for entry \"" << result_entry.
getTag() <<
"\"" << std::endl;
359 std::cout <<
" Existing Value: \"" << oldv_str <<
"\"" << std::endl;
360 std::cout <<
" New Value: \"" << new_results.
getChild(result_entry.
getTag()).getContentLine(0) <<
"\"" << std::endl << std::endl;
365 if(oldv_str.compare(new_results.
getChild(result_entry.
getTag()).getContentLine(0))!=0) {
367 std::cout << std::endl
368 <<
"DeviationC in Test: \"" << old_test.
getTag()
369 <<
"\" for entry \"" << result_entry.
getTag() <<
"\"" << std::endl;
370 std::cout <<
" Existing Value: \"" << oldv_str <<
"\"" << std::endl;
371 std::cout <<
" New Value: \"" << new_results.
getChild(result_entry.
getTag()).getContentLine(0) <<
"\"" << std::endl << std::endl;
377 std::cout <<
"Error New test has same name as an existing one, but one of the old entries is missing." << std::endl;
386 for(
int new_r = 0; new_r < new_results.
numChildren() ; new_r++) {
434 std::ofstream fout(
filename.c_str());
435 fout << database << std::endl;