|
Teuchos Package Browser (Single Doxygen Collection)
Version of the Day
|
00001 // @HEADER 00002 // *********************************************************************** 00003 // 00004 // Teuchos: Common Tools Package 00005 // Copyright (2004) Sandia Corporation 00006 // 00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive 00008 // license for use of this work by or on behalf of the U.S. Government. 00009 // 00010 // Redistribution and use in source and binary forms, with or without 00011 // modification, are permitted provided that the following conditions are 00012 // met: 00013 // 00014 // 1. Redistributions of source code must retain the above copyright 00015 // notice, this list of conditions and the following disclaimer. 00016 // 00017 // 2. Redistributions in binary form must reproduce the above copyright 00018 // notice, this list of conditions and the following disclaimer in the 00019 // documentation and/or other materials provided with the distribution. 00020 // 00021 // 3. Neither the name of the Corporation nor the names of the 00022 // contributors may be used to endorse or promote products derived from 00023 // this software without specific prior written permission. 00024 // 00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY 00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE 00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00036 // 00037 // Questions? Contact Michael A. Heroux (maherou@sandia.gov) 00038 // 00039 // *********************************************************************** 00040 // @HEADER 00041 00042 #include "Teuchos_ParameterList.hpp" 00043 #include "Teuchos_UnitTestHarness.hpp" 00044 #include "Teuchos_StandardParameterEntryXMLConverters.hpp" 00045 #include "Teuchos_XMLParameterListCoreHelpers.hpp" 00046 #include "Teuchos_XMLParameterListWriter.hpp" 00047 #include "Teuchos_as.hpp" 00048 #include "Teuchos_XMLParameterListExceptions.hpp" 00049 #include "Teuchos_ValidatorXMLConverterDB.hpp" 00050 #include "Teuchos_StandardValidatorXMLConverters.hpp" 00051 #include "Teuchos_StringInputStream.hpp" 00052 #include "Teuchos_XMLParser.hpp" 00053 #include "Teuchos_TwoDArray.hpp" 00054 00055 #include "Teuchos_XMLParameterListTestHelpers.hpp" 00056 00057 00058 namespace Teuchos { 00059 00060 00061 #define ADD_TYPE_PARAMETER(T,VALUE) \ 00062 myList.set( #T , as<T>(VALUE)); 00063 const int g_arraySize = 5; 00064 #define ADD_ARRAY_TYPE_PARAMETER(T,VALUE) \ 00065 myList.set( #T " Array", Array< T >(g_arraySize, ( T ) VALUE ));\ 00066 myList.set( #T " 2DArray", TwoDArray< T >(g_arraySize, g_arraySize, ( T ) VALUE )); 00067 #define ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(T,VALUE) \ 00068 ADD_TYPE_PARAMETER(T,VALUE); \ 00069 ADD_ARRAY_TYPE_PARAMETER(T,VALUE); 00070 00071 TEUCHOS_UNIT_TEST(Teuchos_ParameterList, ADD_TYPE_AND_ARRAY_TYPE_PARAMETER) 00072 { 00073 ParameterList myList; 00074 ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(int, 2); 00075 TEST_EQUALITY( getParameter<int>(myList, "int"), 2 ); 00076 TEST_EQUALITY( getParameter<Array<int> >(myList, "int Array"), 00077 Array<int>(g_arraySize, as<int>(2)) ); 00078 TEST_EQUALITY( getParameter<TwoDArray<int> >(myList, "int 2DArray"), 00079 TwoDArray<int>(g_arraySize, g_arraySize, as<int>(2)) ); 00080 } 00081 00082 TEUCHOS_UNIT_TEST(Teuchos_ParameterList, parameterEntryXMLConverters) 00083 { 00084 ParameterList myList; 00085 ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(int, 2); 00086 ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(unsigned int, 3); 00087 ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(short int, 4); 00088 ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(unsigned short int, 5); 00089 ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(long int, 6); 00090 ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(unsigned long int, 7); 00091 #ifdef HAVE_TEUCHOS_LONG_LONG_INT 00092 ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(long long int, 8); 00093 ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(unsigned long long int, 9); 00094 #endif //HAVE_TEUCHOS_LONG_LONG_INT 00095 ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(double, 10.0); 00096 ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(float, 11.0); 00097 00098 ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(std::string, "hello"); 00099 00100 ADD_TYPE_PARAMETER(char, 'a'); 00101 ADD_TYPE_PARAMETER(bool, true); 00102 00103 RCP<ParameterList> readInPL = writeThenReadPL(myList); 00104 00105 out << "\nmyList:\n"; 00106 myList.print(out); 00107 out << "\n*readInPL:\n"; 00108 readInPL->print(out); 00109 00110 TEST_ASSERT(haveSameValues(myList, *readInPL)); 00111 } 00112 00113 TEUCHOS_UNIT_TEST(Teuchos_ParameterList, parameterEntryConverterExceptions) 00114 { 00115 00116 TEST_THROW(RCP<ParameterList> 00117 badRootElementList = getParametersFromXmlFile("BadRootElement.xml"), 00118 BadXMLParameterListRootElementException); 00119 00120 TEST_THROW(RCP<ParameterList> 00121 badParameterListElementList = getParametersFromXmlFile("BadParameterListElement.xml"), 00122 BadParameterListElementException); 00123 00124 TEST_THROW(RCP<ParameterList> 00125 noNameAttributeList = getParametersFromXmlFile("NoNameAttribute.xml"), 00126 NoNameAttributeExecption); 00127 00128 TEST_THROW(RCP<ParameterList> 00129 noTypeAttributeList = getParametersFromXmlFile("NoTypeAttribute.xml"), 00130 NoTypeAttributeExecption); 00131 00132 TEST_THROW(RCP<ParameterList> 00133 noValueAttributeList = getParametersFromXmlFile("NoValueAttribute.xml"), 00134 NoValueAttributeExecption); 00135 00136 TEST_THROW(RCP<ParameterList> 00137 badIdsList = getParametersFromXmlFile("DuplicateParameterIDs.xml"), 00138 DuplicateParameterIDsException); 00139 00140 TEST_THROW(RCP<ParameterList> 00141 badParameterEntryConverterList = getParametersFromXmlFile("CantFindParameterEntryConverter.xml"), 00142 CantFindParameterEntryConverterException); 00143 00144 00145 #ifdef HAVE_TEUCHOS_DEBUG 00146 00147 StandardTemplatedParameterConverter<int> intConverter; 00148 StandardTemplatedParameterConverter<float> floatConverter; 00149 ValidatortoIDMap dummmyValidatorMap; 00150 RCP<ParameterEntry> floatParameter = rcp( 00151 new ParameterEntry((float)3.0)); 00152 TEST_THROW(intConverter.fromParameterEntrytoXML(floatParameter, "blah", 1, dummmyValidatorMap), 00153 BadParameterEntryXMLConverterTypeException); 00154 00155 XMLObject floatXML = floatConverter.fromParameterEntrytoXML(floatParameter, "float", 1, dummmyValidatorMap); 00156 TEST_THROW(intConverter.fromXMLtoParameterEntry(floatXML), 00157 BadParameterEntryXMLConverterTypeException); 00158 00159 #endif 00160 00161 } 00162 00163 00164 } //namespace Teuchos
1.7.6.1