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_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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines