f8e471e541
[SVN r36255]
81 lines
2.6 KiB
C++
81 lines
2.6 KiB
C++
//////////////////////////////////////////////////////////////////////////////
|
|
// Copyright 2005-2006 Andreas Huber Doenni
|
|
// Distributed under the Boost Software License, Version 1.0. (See accompany-
|
|
// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
#include <boost/statechart/state_machine.hpp>
|
|
#include <boost/statechart/simple_state.hpp>
|
|
|
|
#include <boost/test/test_tools.hpp>
|
|
|
|
|
|
|
|
namespace sc = boost::statechart;
|
|
|
|
|
|
|
|
struct A;
|
|
struct TypeInfoTest : sc::state_machine< TypeInfoTest, A > {};
|
|
|
|
struct B;
|
|
struct A : sc::simple_state< A, TypeInfoTest, B > {};
|
|
|
|
struct B : sc::simple_state< B, A > {};
|
|
|
|
|
|
int test_main( int, char* [] )
|
|
{
|
|
TypeInfoTest machine;
|
|
machine.initiate();
|
|
|
|
const TypeInfoTest::state_base_type & activeState =
|
|
*machine.state_begin();
|
|
const TypeInfoTest::state_base_type::id_type bType =
|
|
activeState.dynamic_type();
|
|
const TypeInfoTest::state_base_type::id_type aType =
|
|
activeState.outer_state_ptr()->dynamic_type();
|
|
|
|
BOOST_REQUIRE( bType == B::static_type() );
|
|
BOOST_REQUIRE( bType != A::static_type() );
|
|
BOOST_REQUIRE( aType == A::static_type() );
|
|
BOOST_REQUIRE( aType != B::static_type() );
|
|
|
|
#ifndef BOOST_STATECHART_USE_NATIVE_RTTI
|
|
// Ensure that a null custom type id pointer can be of any type
|
|
BOOST_REQUIRE( activeState.custom_dynamic_type_ptr< void >() == 0 );
|
|
BOOST_REQUIRE( activeState.custom_dynamic_type_ptr< char >() == 0 );
|
|
BOOST_REQUIRE( activeState.custom_dynamic_type_ptr< bool >() == 0 );
|
|
BOOST_REQUIRE(
|
|
activeState.outer_state_ptr()->custom_dynamic_type_ptr< void >() == 0 );
|
|
BOOST_REQUIRE(
|
|
activeState.outer_state_ptr()->custom_dynamic_type_ptr< char >() == 0 );
|
|
BOOST_REQUIRE(
|
|
activeState.outer_state_ptr()->custom_dynamic_type_ptr< bool >() == 0 );
|
|
|
|
const char * bCustomType = "B";
|
|
const char * aCustomType = "A";
|
|
B::custom_static_type_ptr( bCustomType );
|
|
A::custom_static_type_ptr( aCustomType );
|
|
BOOST_REQUIRE( B::custom_static_type_ptr< char >() == bCustomType );
|
|
BOOST_REQUIRE( A::custom_static_type_ptr< char >() == aCustomType );
|
|
BOOST_REQUIRE(
|
|
activeState.custom_dynamic_type_ptr< char >() == bCustomType );
|
|
BOOST_REQUIRE(
|
|
activeState.outer_state_ptr()->custom_dynamic_type_ptr< char >() ==
|
|
aCustomType );
|
|
|
|
// Ensure that a null custom type id pointer can be of any type
|
|
bool * pNull = 0;
|
|
B::custom_static_type_ptr( pNull );
|
|
A::custom_static_type_ptr( pNull );
|
|
BOOST_REQUIRE( activeState.custom_dynamic_type_ptr< char >() == 0 );
|
|
BOOST_REQUIRE(
|
|
activeState.outer_state_ptr()->custom_dynamic_type_ptr< char >() == 0 );
|
|
#endif
|
|
|
|
return 0;
|
|
}
|