Teuchos Package Browser (Single Doxygen Collection) Version of the Day
ParameterList_SerializationTest.cpp
Go to the documentation of this file.
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_XMLParameterListHelpers.hpp"
00046 #include "Teuchos_XMLParameterListWriter.hpp"
00047 #include "Teuchos_XMLParameterListReader.hpp"
00048 #include "Teuchos_as.hpp"
00049 #include "Teuchos_XMLParameterListExceptions.hpp"
00050 #include "Teuchos_ValidatorXMLConverterDB.hpp"
00051 #include "Teuchos_StandardValidatorXMLConverters.hpp"
00052 #include "Teuchos_StringInputStream.hpp"
00053 #include "Teuchos_XMLParser.hpp"
00054 #include "Teuchos_TwoDArray.hpp"
00055 
00056 #include "Teuchos_XMLParameterListTestHelpers.hpp"
00057 
00058 
00059 namespace Teuchos {
00060 
00061 
00062 #define ADD_TYPE_PARAMETER(T,VALUE) \
00063   myList.set( #T , as<T>(VALUE));
00064 const int g_arraySize = 5;
00065 #define ADD_ARRAY_TYPE_PARAMETER(T,VALUE) \
00066   myList.set( #T " Array", Array< T >(g_arraySize, ( T ) VALUE ));\
00067   myList.set( #T " 2DArray", TwoDArray< T >(g_arraySize, g_arraySize, ( T ) VALUE ));
00068 #define ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(T,VALUE) \
00069   ADD_TYPE_PARAMETER(T,VALUE); \
00070   ADD_ARRAY_TYPE_PARAMETER(T,VALUE);
00071 
00072 TEUCHOS_UNIT_TEST(Teuchos_ParameterList, ADD_TYPE_AND_ARRAY_TYPE_PARAMETER)
00073 {
00074   ParameterList myList;
00075   ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(int, 2);
00076   TEST_EQUALITY( getParameter<int>(myList, "int"), 2 );
00077   TEST_EQUALITY( getParameter<Array<int> >(myList, "int Array"),
00078     Array<int>(g_arraySize, as<int>(2)) );
00079   TEST_EQUALITY( getParameter<TwoDArray<int> >(myList, "int 2DArray"),
00080     TwoDArray<int>(g_arraySize, g_arraySize, as<int>(2)) );
00081 }
00082 
00083 TEUCHOS_UNIT_TEST(Teuchos_ParameterList, parameterEntryXMLConverters)
00084 {
00085   ParameterList myList;
00086   ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(int, 2);
00087   ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(unsigned int, 3);
00088   ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(short int, 4);
00089   ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(unsigned short int, 5);
00090   ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(long int, 6);
00091   ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(unsigned long int, 7);
00092   #ifdef HAVE_TEUCHOS_LONG_LONG_INT
00093   ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(long long int, 8);
00094   ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(unsigned long long int, 9);
00095   #endif //HAVE_TEUCHOS_LONG_LONG_INT
00096   ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(double, 10.0);
00097   ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(float, 11.0);
00098 
00099   ADD_TYPE_AND_ARRAY_TYPE_PARAMETER(std::string, "hello");
00100 
00101   ADD_TYPE_PARAMETER(char, 'a');
00102   ADD_TYPE_PARAMETER(bool, true);
00103 
00104   RCP<ParameterList> readInPL = writeThenReadPL(myList);
00105 
00106   out << "\nmyList:\n";
00107   myList.print(out);
00108   out << "\n*readInPL:\n";
00109   readInPL->print(out);
00110 
00111   TEST_ASSERT(haveSameValues(myList, *readInPL));
00112 }
00113 
00114 TEUCHOS_UNIT_TEST(Teuchos_ParameterList, parameterEntryConverterExceptions)
00115 {
00116 
00117   TEST_THROW(RCP<ParameterList>
00118     badRootElementList = getParametersFromXmlFile("BadRootElement.xml"),
00119     BadXMLParameterListRootElementException);
00120 
00121   TEST_THROW(RCP<ParameterList>
00122     badParameterListElementList = getParametersFromXmlFile("BadParameterListElement.xml"),
00123     BadParameterListElementException);
00124 
00125   TEST_THROW(RCP<ParameterList>
00126     noNameAttributeList = getParametersFromXmlFile("NoNameAttribute.xml"),
00127     NoNameAttributeExecption);
00128 
00129   TEST_THROW(RCP<ParameterList>
00130     noTypeAttributeList = getParametersFromXmlFile("NoTypeAttribute.xml"),
00131     NoTypeAttributeExecption);
00132   
00133   TEST_THROW(RCP<ParameterList>
00134     noValueAttributeList = getParametersFromXmlFile("NoValueAttribute.xml"),
00135     NoValueAttributeExecption);
00136 
00137   TEST_THROW(RCP<ParameterList>
00138     badIdsList = getParametersFromXmlFile("DuplicateParameterIDs.xml"),
00139     DuplicateParameterIDsException);
00140 
00141   TEST_THROW(RCP<ParameterList>
00142     badParameterEntryConverterList = getParametersFromXmlFile("CantFindParameterEntryConverter.xml"),
00143     CantFindParameterEntryConverterException);
00144 
00145 
00146   #ifdef HAVE_TEUCHOS_DEBUG
00147 
00148   StandardTemplatedParameterConverter<int> intConverter;
00149   StandardTemplatedParameterConverter<float> floatConverter;
00150   ValidatortoIDMap dummmyValidatorMap;
00151   RCP<ParameterEntry> floatParameter = rcp(
00152     new ParameterEntry((float)3.0));
00153   TEST_THROW(intConverter.fromParameterEntrytoXML(floatParameter, "blah", 1, dummmyValidatorMap), 
00154     BadParameterEntryXMLConverterTypeException);
00155 
00156   XMLObject floatXML = floatConverter.fromParameterEntrytoXML(floatParameter, "float", 1, dummmyValidatorMap);
00157   TEST_THROW(intConverter.fromXMLtoParameterEntry(floatXML), 
00158     BadParameterEntryXMLConverterTypeException);
00159 
00160   #endif
00161 
00162 }
00163 
00164 
00165 } //namespace Teuchos
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines