type_discovery_test.cpp
Go to the documentation of this file.
00001 /***************************************************************************
00002   tag: The SourceWorks  Tue Sep 7 00:54:57 CEST 2010  type_discovery_test.cpp
00003 
00004                         type_discovery_test.cpp -  description
00005                            -------------------
00006     begin                : Tue September 07 2010
00007     copyright            : (C) 2010 The SourceWorks
00008     email                : peter@thesourceworks.com
00009 
00010  ***************************************************************************
00011  *                                                                         *
00012  *   This program is free software; you can redistribute it and/or modify  *
00013  *   it under the terms of the GNU General Public License as published by  *
00014  *   the Free Software Foundation; either version 2 of the License, or     *
00015  *   (at your option) any later version.                                   *
00016  *                                                                         *
00017  ***************************************************************************/
00018 
00019 
00020 #include "unit.hpp"
00021 
00022 #include <boost/serialization/vector.hpp>
00023 #include <boost/array.hpp>
00024 
00025 #include <rtt-fwd.hpp>
00026 #include <internal/DataSources.hpp>
00027 #include <types/type_discovery.hpp>
00028 #include <os/fosi.h>
00029 #include <boost/lambda/lambda.hpp>
00030 
00031 #include "datasource_fixture.hpp"
00032 #include "types/StructTypeInfo.hpp"
00033 #include "types/CArrayTypeInfo.hpp"
00034 #include "types/SequenceTypeInfo.hpp"
00035 #include "types/BoostArrayTypeInfo.hpp"
00036 
00037 using namespace boost::lambda;
00038 using namespace boost::archive;
00039 using namespace boost::serialization;
00040 
00041 class TypeArchiveTest
00042 {
00043 public:
00044     TypeArchiveTest() {  }
00045     ~TypeArchiveTest() {  }
00046 };
00047 
00048 // Registers the fixture into the 'registry'
00049 BOOST_FIXTURE_TEST_SUITE(  TypeArchiveTestSuite,  TypeArchiveTest )
00050 
00051 // Test writing an AType data sample into a type data archive
00052 BOOST_AUTO_TEST_CASE( testATypeDiscovery )
00053 {
00054     AssignableDataSource<AType>::shared_ptr atype = new ValueDataSource<AType>( AType(true) );
00055 
00056     // decompose a complex type
00057     type_discovery out( atype );
00058     out.discover( atype->set() );
00059 
00060     BOOST_CHECK_EQUAL( out.mnames.size(), 5 );
00061     BOOST_CHECK_EQUAL( out.mparts.size(), 5 );
00062     BOOST_CHECK_EQUAL( out.mparent, atype);
00063 
00064 //    for_each( out.mnames.begin(), out.mnames.end(), cout << lambda::_1 <<", " );
00065 //    cout <<endl;
00066 
00067     BOOST_REQUIRE_EQUAL( out.mparts.size(), 5);
00068 
00069     AssignableDataSource<int>::shared_ptr a = AssignableDataSource<int>::narrow( out.mparts[0].get() );
00070     AssignableDataSource<double>::shared_ptr b = AssignableDataSource<double>::narrow( out.mparts[1].get() );
00071     AssignableDataSource<string>::shared_ptr c = AssignableDataSource<string>::narrow( out.mparts[2].get());
00072     AssignableDataSource<types::carray<int> >::shared_ptr ai = AssignableDataSource<types::carray<int> >::narrow( out.mparts[3].get());
00073     AssignableDataSource<vector<double> >::shared_ptr vd = AssignableDataSource<vector<double> >::narrow( out.mparts[4].get());
00074 
00075     BOOST_REQUIRE( a );
00076     BOOST_REQUIRE( b );
00077     BOOST_REQUIRE( c );
00078     BOOST_REQUIRE( ai );
00079     BOOST_REQUIRE( vd );
00080 
00081     // Check reading parts (must equal parent)
00082     BOOST_CHECK_EQUAL( a->get(), atype->get().a );
00083     BOOST_CHECK_EQUAL( b->get(), atype->get().b );
00084     BOOST_CHECK_EQUAL( c->get(), atype->get().c );
00085     BOOST_CHECK_EQUAL( ai->get().address()[3], atype->get().ai[3] );
00086     BOOST_CHECK_EQUAL( vd->get()[3], atype->get().vd[3] );
00087 
00088     // Check writing a part (must change in parent too).
00089     a->set(10);
00090     BOOST_CHECK_EQUAL( a->get(), 10 );
00091     BOOST_CHECK_EQUAL( a->get(), atype->get().a );
00092 
00093     // Check getMember function.
00094     BOOST_CHECK_EQUAL( out.getMember("a"), out.mparts[0] );
00095     BOOST_CHECK_EQUAL( out.getMember("b"), out.mparts[1] );
00096     BOOST_CHECK_EQUAL( out.getMember("c"), out.mparts[2] );
00097     BOOST_CHECK_EQUAL( out.getMember("ai"), out.mparts[3] );
00098     BOOST_CHECK_EQUAL( out.getMember("vd"), out.mparts[4] );
00099 }
00100 
00101 // Test writing a BType data sample into a type data archive
00102 BOOST_AUTO_TEST_CASE( testBTypeDiscovery )
00103 {
00104     AssignableDataSource<BType>::shared_ptr atype = new ValueDataSource<BType>( BType(true) );
00105 
00106     // decompose a complex type
00107     type_discovery out( atype );
00108     out.discover( atype->set() );
00109 
00110     BOOST_CHECK_EQUAL( out.mnames.size(), 5 );
00111     BOOST_CHECK_EQUAL( out.mparts.size(), 5 );
00112     BOOST_CHECK_EQUAL( out.mparent, atype);
00113 
00114 //    for_each( out.mnames.begin(), out.mnames.end(), cout << lambda::_1 <<", " );
00115 //    cout <<endl;
00116 
00117     BOOST_REQUIRE_EQUAL( out.mparts.size(), 5);
00118 
00119     AssignableDataSource<int>::shared_ptr a = AssignableDataSource<int>::narrow( out.mparts[0].get() );
00120     AssignableDataSource<double>::shared_ptr b = AssignableDataSource<double>::narrow( out.mparts[1].get() );
00121     AssignableDataSource< carray<char> >::shared_ptr c = AssignableDataSource< carray<char> >::narrow( out.mparts[2].get());
00122     AssignableDataSource< carray<int> >::shared_ptr ai = AssignableDataSource< carray<int> >::narrow( out.mparts[3].get());
00123     AssignableDataSource< carray<double> >::shared_ptr vd = AssignableDataSource< carray<double> >::narrow( out.mparts[4].get());
00124 
00125     BOOST_REQUIRE( a );
00126     BOOST_REQUIRE( b );
00127     BOOST_REQUIRE( c );
00128     BOOST_REQUIRE( ai );
00129     BOOST_REQUIRE( vd );
00130 
00131     BOOST_CHECK( !out.getMember("zort") );
00132 
00133 
00134     // Check reading parts (must equal parent)
00135     BOOST_CHECK_EQUAL( a->get(), atype->get().a );
00136     BOOST_CHECK_EQUAL( b->get(), atype->get().b );
00137     BOOST_CHECK_EQUAL( c->get().address(), atype->set().c );
00138     BOOST_CHECK_EQUAL( ai->get().address()[3], atype->set().ai[3] );
00139     BOOST_CHECK_EQUAL( vd->get().address()[3], atype->set().vd[3] );
00140 
00141     // Check writing a part (must change in parent too).
00142     a->set(10);
00143     BOOST_CHECK_EQUAL( a->get(), 10 );
00144     BOOST_CHECK_EQUAL( a->get(), atype->get().a );
00145 
00146     c->set().address()[3] = 'L';
00147     BOOST_CHECK_EQUAL( c->get().address(), "helLo" );
00148     BOOST_CHECK_EQUAL( c->get().address(), atype->set().c );
00149 
00150     // Check getMember function.
00151     BOOST_CHECK_EQUAL( out.getMember("a"), out.mparts[0] );
00152     BOOST_CHECK_EQUAL( out.getMember("b"), out.mparts[1] );
00153     BOOST_CHECK_EQUAL( out.getMember("c"), out.mparts[2] );
00154     BOOST_CHECK_EQUAL( out.getMember("ai"), out.mparts[3] );
00155     BOOST_CHECK_EQUAL( out.getMember("vd"), out.mparts[4] );
00156 }
00157 
00158 BOOST_AUTO_TEST_SUITE_END()
00159 


rtt
Author(s): RTT Developers
autogenerated on Wed Aug 26 2015 16:16:20