58ValueTolerance::ValueTolerance() {
66ValueTolerance::ValueTolerance(
double val,
double tol) {
74ValueTolerance::ValueTolerance(
double val,
double low,
double up) {
79 use_tolerance =
false;
82ValueTolerance::ValueTolerance(std::string str) {
86bool ValueTolerance::operator ==(ValueTolerance& rhs) {
87 return (value == rhs.value) &&
88 (tolerance == rhs.tolerance) &&
89 (lower == rhs.lower) &&
90 (upper == rhs.upper) &&
91 (use_tolerance == rhs.use_tolerance);
94std::string ValueTolerance::as_string(){
95 std::ostringstream strs;
97 strs << value <<
" , " << tolerance;
99 strs << value <<
" , " << lower <<
" , " << upper;
103void ValueTolerance::from_string(
const std::string& valtol_str) {
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()) {
108 use_tolerance =
false;
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());
114 use_tolerance =
true;
115 tolerance = atof(tol_str.c_str());
119 XMLTestNode::XMLTestNode():XMLObject() {}
121 XMLTestNode::XMLTestNode(
const std::string &tag):XMLObject(tag) {}
123 XMLTestNode::XMLTestNode(XMLObjectImplem *ptr):XMLObject(ptr) {}
125 XMLTestNode::XMLTestNode(XMLObject obj):XMLObject(obj) {}
127 void XMLTestNode::addDouble (
const std::string &name,
double val) {
128 addAttribute<double>(name,val);
131 void XMLTestNode::addInt (
const std::string &name,
int val) {
132 addAttribute<int>(name,val);
135 void XMLTestNode::addBool (
const std::string &name,
bool val) {
136 addAttribute<bool>(name,val);
139 void XMLTestNode::addValueTolerance(
const std::string &name, ValueTolerance val){
140 addAttribute<std::string>(name,val.as_string());
143 void XMLTestNode::addString (
const std::string &name, std::string val) {
144 addAttribute<std::string>(name,val);
147 bool XMLTestNode::hasChild(
const std::string &name)
const {
149 for(
int i = 0; i < numChildren(); i++) {
150 if(name.compare(XMLObject::getChild(i).getTag()) == 0) {
158 void XMLTestNode::appendContentLine(
const size_t& i,
const std::string &str) {
159 ptr_->appendContentLine(i,str);
162 XMLTestNode XMLTestNode::getChild(
const std::string &name)
const {
164 for(
int i = 0; i < numChildren(); i++) {
165 if(name.compare(XMLObject::getChild(i).getTag()) == 0)
166 child = XMLObject::getChild(i);
171 XMLTestNode XMLTestNode::getChild(
const int &i)
const {
172 return XMLObject::getChild(i);
175 const XMLObject* XMLTestNode::xml_object()
const {
176 return (XMLObject*)
this;
179 bool XMLTestNode::hasSameElements(XMLTestNode
const & lhs)
const {
181 if((numChildren()!=lhs.numChildren()) ||
182 (numContentLines()!= lhs.numContentLines()) ||
183 (getTag().compare(lhs.getTag())!=0))
return false;
185 for(
int i = 0; i<numChildren(); i++) {
186 const XMLTestNode child = XMLObject::getChild(i);
187 if( (!lhs.hasChild(child.getTag())) ||
188 (!child.hasSameElements(lhs.getChild(child.getTag()))) )
return false;
191 for(
int i = 0; i<numContentLines(); i++)
192 if(getContentLine(i).compare(lhs.getContentLine(i))!=0)
return false;
200 std::string
cpuname(
"Undefined");
206 std::ifstream
cpuinfo(
"/proc/cpuinfo");
208 if((
cpuinfo.rdstate()&
cpuinfo.failbit)) std::cout<<
"Failed to open filen\n";
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());
219 if (line.find(
"cpu cores") < line.size()) {
229 machine_config.addInt(
"Compiler_Version", TEUCHOS_COMPILER_VERSION);
250 if (std::ifstream (
filename.c_str ())) {
273 for (
int i = 0;
i <
machine.numChildren (); ++
i) {
277 std::runtime_error,
"Unexpected Tag \"" <<
configuration.getTag ()
278 <<
"\"; only children with Tag = \"Configuration\" are allowed in a "
285 "A Configuration needs to have a child \"MachineConfiguration\" and a "
300 for (
int k = 0;
k <
old_test.numChildren (); ++
k) {
306 std::runtime_error,
"A TestEntry needs to have a child "
307 "\"TestConfiguration\" and a child \"TestResults\".");
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;
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;
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;
An object representation of a subset of XML data.
Tools for an XML-based performance test archive.
Smart reference counting pointer class for automatic garbage collection.
Subclass of XMLObject used by the performance archive.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...
XMLTestNode PerfTest_MachineConfig()
PerfTest_MachineConfig generates a basic machine configuration XMLTestNode.
PerfTestResult
ReturnValues for PerfTest_CheckOrAdd_Test.
PerfTestResult PerfTest_CheckOrAdd_Test(XMLTestNode machine_config, XMLTestNode new_test, const std::string filename, const std::string ext_hostname)
Check whether a test is present and match an existing test in an archive.
ValueTolerance is a struct to keep a tuple of value and a tolerance. The tolerance can be either expr...