Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
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
00049 BOOST_FIXTURE_TEST_SUITE( TypeArchiveTestSuite, TypeArchiveTest )
00050
00051
00052 BOOST_AUTO_TEST_CASE( testATypeDiscovery )
00053 {
00054 AssignableDataSource<AType>::shared_ptr atype = new ValueDataSource<AType>( AType(true) );
00055
00056
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
00065
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
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
00089 a->set(10);
00090 BOOST_CHECK_EQUAL( a->get(), 10 );
00091 BOOST_CHECK_EQUAL( a->get(), atype->get().a );
00092
00093
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
00102 BOOST_AUTO_TEST_CASE( testBTypeDiscovery )
00103 {
00104 AssignableDataSource<BType>::shared_ptr atype = new ValueDataSource<BType>( BType(true) );
00105
00106
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
00115
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
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
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
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