1 // @HEADER 2 // 3 // *********************************************************************** 4 // 5 // Teuchos 6 // Copyright 2012 Sandia Corporation 7 // 8 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, 9 // the U.S. Government retains certain rights in this software. 10 // 11 // Redistribution and use in source and binary forms, with or without 12 // modification, are permitted provided that the following conditions are 13 // met: 14 // 15 // 1. Redistributions of source code must retain the above copyright 16 // notice, this list of conditions and the following disclaimer. 17 // 18 // 2. Redistributions in binary form must reproduce the above copyright 19 // notice, this list of conditions and the following disclaimer in the 20 // documentation and/or other materials provided with the distribution. 21 // 22 // 3. Neither the name of the Corporation nor the names of the 23 // contributors may be used to endorse or promote products derived from 24 // this software without specific prior written permission. 25 // 26 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY 27 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 28 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 29 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE 30 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 31 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 32 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 33 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 34 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 35 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 36 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 37 // 38 // Questions? Contact 39 // Jonathan Hu (jhu@sandia.gov) 40 // Andrey Prokopenko (aprokop@sandia.gov) 41 // Ray Tuminaro (rstumin@sandia.gov) 42 // 43 // *********************************************************************** 44 // 45 // @HEADER 46 47 #include <Teuchos_XMLParameterListHelpers.hpp> 48 #include <Teuchos_YamlParameterListHelpers.hpp> 49 #include <Teuchos_UnitTestHarness.hpp> 50 #include <Teuchos_UnitTestHelpers.hpp> 51 #include <Teuchos_ScalarTraits.hpp> 52 #include <Teuchos_ParameterList.hpp> 53 #include <Teuchos_Exceptions.hpp> 54 #include <Teuchos_YamlParser_decl.hpp> 55 #include <Teuchos_Exceptions.hpp> 56 #include <Teuchos_RCP.hpp> 57 #include <Teuchos_DefaultComm.hpp> 58 59 #include <fstream> 60 #include <iomanip> 61 #include <sstream> 62 63 using Teuchos::RCP; 64 using Teuchos::rcp; 65 using Teuchos::ParameterList; 66 using Teuchos::DefaultComm; 67 68 namespace TeuchosTests 69 { TEUCHOS_UNIT_TEST(YAML,MPIBroadcast)70 TEUCHOS_UNIT_TEST(YAML, MPIBroadcast) 71 { 72 //load Match1.xml and Match1.yaml on proc 0, broadcast them, and make sure it matches on all procs 73 //note: the following code is run on all procs 74 RCP<ParameterList> xmlList = rcp(new ParameterList); 75 RCP<ParameterList> yamlList = rcp(new ParameterList); 76 77 RCP<const Teuchos::Comm<int> > comm = DefaultComm<int>::getComm (); 78 const std::string n1("Match1.xml"); 79 Teuchos::updateParametersFromXmlFileAndBroadcast(n1, xmlList.ptr(), *comm, true); 80 const std::string n2("Match1.yaml"); 81 Teuchos::updateParametersFromYamlFileAndBroadcast(n2, yamlList.ptr(), *comm, true); 82 TEST_EQUALITY(Teuchos::haveSameValues(*xmlList, *yamlList), true); 83 } TEUCHOS_UNIT_TEST(YAML,ConvertFromXML)84 TEUCHOS_UNIT_TEST(YAML, ConvertFromXML) 85 { 86 using std::string; 87 88 RCP<const Teuchos::Comm<int> > comm = DefaultComm<int>::getComm (); 89 90 //This list can contain any valid XML param lists in the unit_tests/yaml/ 91 std::vector<string> xmlFiles; 92 xmlFiles.push_back("Match1.xml"); 93 xmlFiles.push_back("Match2.xml"); 94 xmlFiles.push_back("Match3.xml"); 95 xmlFiles.push_back("Match4.xml"); 96 xmlFiles.push_back("input_restingHydrostatic_RK4.xml"); 97 xmlFiles.push_back("plasma_oscillation_rtc.xml"); 98 for(size_t i = 0; i < xmlFiles.size(); i++) 99 { 100 //reading from XML 101 std::ifstream xmlStream(xmlFiles[i].c_str()); 102 //emitting converted YAML 103 std::ostringstream yamlStream; 104 yamlStream << std::setprecision(17) << std::scientific; 105 Teuchos::convertXmlToYaml(xmlStream, yamlStream); 106 //now read back both formats to compare 107 RCP<ParameterList> xmlList = Teuchos::getParametersFromXmlFile(xmlFiles[i]); 108 string yamlText = yamlStream.str(); 109 string debugYamlFileName = xmlFiles[i] + ".yaml"; 110 { 111 std::ofstream debugYamlFileStream(debugYamlFileName.c_str()); 112 debugYamlFileStream << yamlText; 113 } 114 RCP<ParameterList> yamlList = Teuchos::YAMLParameterList::parseYamlText(yamlText, 115 debugYamlFileName); 116 TEST_EQUALITY(Teuchos::haveSameValues(*xmlList, *yamlList, true), true); 117 } 118 } 119 120 } //namespace TeuchosTests 121 122