diff --git a/core/XdmfHDF5Writer.cpp b/core/XdmfHDF5Writer.cpp index d64a3b5f28d080da90f8bde9f432b94e7847f675..12cdaff753734a84d12a1b4aaaa2c5b8f4e49796 100644 --- a/core/XdmfHDF5Writer.cpp +++ b/core/XdmfHDF5Writer.cpp @@ -1489,9 +1489,20 @@ XdmfHDF5Writer::write(XdmfArray & array, fapl); } - hid_t dataset = H5Dopen(mImpl->mHDF5Handle, - dataSetPath.str().c_str(), - H5P_DEFAULT); + htri_t testingSet = H5Lexists(mImpl->mHDF5Handle, + dataSetPath.str().c_str(), + H5P_DEFAULT); + + hid_t dataset = 0; + + if (testingSet == 0) { + dataset = -1; + } + else { + dataset = H5Dopen(mImpl->mHDF5Handle, + dataSetPath.str().c_str(), + H5P_DEFAULT); + } //hid_t checkspace = H5S_ALL; //checkspace = H5Dget_space(dataset); diff --git a/tests/Cxx/CMakeLists.txt b/tests/Cxx/CMakeLists.txt index cce89573878c005c29176e21a9b72c6508426a0a..3d6455a8e2d2c2236b726e37d46669ea1039656d 100644 --- a/tests/Cxx/CMakeLists.txt +++ b/tests/Cxx/CMakeLists.txt @@ -20,6 +20,7 @@ ADD_TEST_CXX(TestXdmfMap) ADD_TEST_CXX(TestXdmfReader) ADD_TEST_CXX(TestXdmfRegularGrid) ADD_TEST_CXX(TestXdmfRectilinearGrid) +ADD_TEST_CXX(XdmfPostFixCalc) ADD_TEST_CXX(TestXdmfSet) ADD_TEST_CXX(TestXdmfTime) ADD_TEST_CXX(TestXdmfTopology) @@ -68,6 +69,7 @@ CLEAN_TEST_CXX(TestXdmfRectilinearGrid CLEAN_TEST_CXX(TestXdmfRegularGrid TestXdmfRegularGrid1.xmf TestXdmfRegularGrid2.xmf) +CLEAN_TEST_CXX(XdmfPostFixCalc) CLEAN_TEST_CXX(TestXdmfSet) CLEAN_TEST_CXX(TestXdmfTime) CLEAN_TEST_CXX(TestXdmfTopology) @@ -82,4 +84,4 @@ CLEAN_TEST_CXX(TestXdmfWriter CLEAN_TEST_CXX(TestXdmfWriterHDF5ThenXML) CLEAN_TEST_CXX(TestXdmfXPath XdmfXPath1.xmf - XdmfXPath2.xmf) \ No newline at end of file + XdmfXPath2.xmf) diff --git a/tests/Cxx/HugeWriteArray.cpp b/tests/Cxx/HugeWriteArray.cpp index b13c2b2730cf8d18164a848613a60df7273c1ab5..8a6f62a5279cc3c767d78fb771db36b50fa7a01c 100644 --- a/tests/Cxx/HugeWriteArray.cpp +++ b/tests/Cxx/HugeWriteArray.cpp @@ -65,14 +65,14 @@ int main(int, char **) writtenArray->release(); writtenArray->read(); - printf("after read\n"); - printf("array size = %d\n", writtenArray->getSize()); + std::cout << "after read" << std::endl; + std::cout << "array size = " << writtenArray->getSize() << std::endl; assert(writtenArray->getSize() == 9000000); for (int i = 0; i < writtenArray->getSize(); i++) { if (i != writtenArray->getValue(i)) { - printf("%d doesn't match %d\n", i, writtenArray->getValue(i)); + std::cout << i << " doesn't match " << writtenArray->getValue(i) << std::endl; } assert(i == writtenArray->getValue(i)); } diff --git a/tests/Cxx/XdmfPostFixCalc.cpp b/tests/Cxx/XdmfPostFixCalc.cpp index dfb205e4453c6612c5feb148c14de55be8a2da25..a12a9f3f9b6c86fbe8b779350992dc1ff746f6c4 100644 --- a/tests/Cxx/XdmfPostFixCalc.cpp +++ b/tests/Cxx/XdmfPostFixCalc.cpp @@ -36,7 +36,12 @@ std::map (*)(std::vector', invChunk, 2); + XdmfArray::addOperation('<', invChunk, 2); + XdmfArray::addOperation('@', invChunk, 2); functions["AVE"] = ave; //sometimes typecasts are required, sometimes they cause errors @@ -55,7 +60,10 @@ int main(int, char **) double answer = parse(problemToSolve, variableTable); - printf("%f\n", answer); + std::cout << answer << std::endl; + + //unless the calculation is fully written out it won't equal properly + assert(answer == 2*25+2*3+(double)2048/3+(double)8/5+4+100+6+25); //std::string arrayExpression = "A|B#C|D"; std::string arrayExpression = "MAX(2,(AVE(A@B)#AVE(C|D)))"; @@ -93,37 +101,50 @@ int main(int, char **) arrayVariable["D"] = testArray4; arrayVariable["E"] = testArray5; - printf("before parsing\n"); + std::cout << "before parsing" << std::endl; shared_ptr answerArray; answerArray = parse(arrayExpression, arrayVariable); - printf("after parsing\n"); + std::cout << "after parsing" << std::endl; + + std::cout << "answer array = " << answerArray->getValuesString() << std::endl; + + assert(answerArray->getValuesString().compare("3.5") == 0); + + std::cout << "array size = " << answerArray->getSize() << std::endl; + + assert(answerArray->getSize() == 1); - printf("answer array = %s\n", answerArray->getValuesString()); - printf("array size = %d\n", answerArray->getSize()); + std::cout << "interlace" << std::endl; + answerArray = XdmfArray::evaluateOperation(testArray1, testArray5, '#'); + std::cout << "answer array = " << answerArray->getValuesString() << std::endl; - printf("interlace\n"); - answerArray = XdmfArray::evaluateCalculation(testArray1, testArray5, '#'); - printf("answer array = %s\n", answerArray->getValuesString()); - printf("chunk\n"); - answerArray = XdmfArray::evaluateCalculation(testArray1, testArray5, '|'); - printf("answer array = %s\n", answerArray->getValuesString()); - printf("inverse chunk\n"); - answerArray = XdmfArray::evaluateCalculation(testArray1, testArray5, '@'); - printf("answer array = %s\n", answerArray->getValuesString()); + assert(answerArray->getValuesString().compare("1 5 1 5 1 5 1 5 1 5 1 5 1 5 1 5 1 5 1 5 5 5 5") == 0); - printf("after parsing\n"); + std::cout << "chunk" << std::endl; + answerArray = XdmfArray::evaluateOperation(testArray1, testArray5, '|'); + std::cout << "answer array = " << answerArray->getValuesString() << std::endl; - printf("answer array = %s\n", answerArray->getValuesString()); - printf("array size = %d\n", answerArray->getSize()); + assert(answerArray->getValuesString().compare("1 1 1 1 1 1 1 1 1 1 5 5 5 5 5 5 5 5 5 5 5 5 5") == 0); + + std::cout << "inverse chunk" << std::endl; + answerArray = XdmfArray::evaluateOperation(testArray1, testArray5, '@'); + std::cout << "answer array = " << answerArray->getValuesString() << std::endl; + + assert(answerArray->getValuesString().compare("5 5 5 5 5 5 5 5 5 5 5 5 5 1 1 1 1 1 1 1 1 1 1") == 0); answerArray = XdmfArray::evaluateExpression(arrayExpression, arrayVariable); - printf("after parsing\n"); + std::cout << "after parsing" << std::endl; + + std::cout << "answer array = " << answerArray->getValuesString() << std::endl; + + assert(answerArray->getValuesString().compare("3.5") == 0); + + std::cout << "array size = " << answerArray->getSize() << std::endl; - printf("answer array = %s\n", answerArray->getValuesString()); - printf("array size = %d\n", answerArray->getSize()); + assert(answerArray->getSize() == 1); return 0; } @@ -175,7 +196,7 @@ double parse(std::string expression, std::map variables) { if (functions.find(expression.substr(valueStart, i + 1 - valueStart)) == functions.end()) { - printf("Error: Invalid Variable or Function: %s\n", expression.substr(valueStart, i + 1 - valueStart)); + std::cout << "Error: Invalid Variable or Function: " << expression.substr(valueStart, i + 1 - valueStart) << std::endl; return 0; } else @@ -184,7 +205,7 @@ double parse(std::string expression, std::map variables) //check if next character is an open parenthesis if (expression[i+1] != '(') { - printf("Error: No values supplied to function %s\n", expression.substr(valueStart, i + 1 - valueStart)); + std::cout << "Error: No values supplied to function " << expression.substr(valueStart, i + 1 - valueStart) << std::endl; return 0; } //if it is grab the string between paranthesis @@ -244,7 +265,7 @@ double parse(std::string expression, std::map variables) if (valueStack.size() < 2)//must be at least two values for this loop to work properly { //error, not enough values - printf("Error: Not Enough Values\n"); + std::cout << "Error: Not Enough Values" << std::endl; return 0; } else @@ -275,7 +296,7 @@ double parse(std::string expression, std::map variables) if (valueStack.size() < 2)//must be at least two values for this loop to work properly { //error, not enough values - printf("Error: Not Enough Values\n"); + std::cout << "Error: Not Enough Values" << std::endl; return 0; } else @@ -310,14 +331,14 @@ double parse(std::string expression, std::map variables) if (valueStack.size() < 2)//must be at least two values for this loop to work properly { //error, not enough values - printf("Error: Not Enough Values\n"); + std::cout << "Error: Not Enough Values" << std::endl; return 0; } else { if(operationStack.top() == '(') { - printf("Warning: Unpaired Parenthesis\n"); + std::cout << "Warning: Unpaired Parenthesis" << std::endl; operationStack.pop(); } else @@ -329,7 +350,7 @@ double parse(std::string expression, std::map variables) if (operationStack.size() == 0) { //error, not enough operations - printf("Error: Not Enough Operators\n"); + std::cout << "Error: Not Enough Operators" << std::endl; return 0; } else @@ -344,7 +365,7 @@ double parse(std::string expression, std::map variables) //throw error if there's extra operations if (operationStack.size() > 0) { - printf("Warning: Left Over Operators\n"); + std::cout << "Warning: Left Over Operators" << std::endl; } return valueStack.top(); @@ -447,7 +468,7 @@ shared_ptr parse(std::string expression, std::map parse(std::string expression, std::map parse(std::string expression, std::map parse(std::string expression, std::map parse(std::string expression, std::map parse(std::string expression, std::map 0) { - printf("Warning: Left Over Operators\n"); + std::cout << "Warning: Left Over Operators" << std::endl; } if (valueStack.size() > 1) { - printf("Warning: Left Over Values\n"); + std::cout << "Warning: Left Over Values" << std::endl; } return valueStack.top();