[complement-svn] SF.net SVN: complement: [1632] trunk/complement/explore/test/stem
Status: Pre-Alpha
Brought to you by:
complement
From: <com...@us...> - 2007-07-19 21:39:58
|
Revision: 1632 http://svn.sourceforge.net/complement/?rev=1632&view=rev Author: complement Date: 2007-07-19 13:25:18 -0700 (Thu, 19 Jul 2007) Log Message: ----------- test for message convertion Modified Paths: -------------- trunk/complement/explore/test/stem/Makefile.inc trunk/complement/explore/test/stem/unit_test.cc Added Paths: ----------- trunk/complement/explore/test/stem/Convert.cc trunk/complement/explore/test/stem/Convert.h Added: trunk/complement/explore/test/stem/Convert.cc =================================================================== --- trunk/complement/explore/test/stem/Convert.cc (rev 0) +++ trunk/complement/explore/test/stem/Convert.cc 2007-07-19 20:25:18 UTC (rev 1632) @@ -0,0 +1,104 @@ +// -*- C++ -*- Time-stamp: <07/07/20 00:05:52 ptr> + +/* + * + * Copyright (c) 2007 + * Petr Ovtchenkov + * + * Licensed under the Academic Free License version 3.0 + * + */ + +#include "Convert.h" + +void mess::pack( std::ostream& s ) const +{ + __pack( s, super_id ); + __pack( s, message ); +} + +void mess::net_pack( std::ostream& s ) const +{ + __net_pack( s, super_id ); + __net_pack( s, message ); +} + +void mess::unpack( std::istream& s ) +{ + __unpack( s, super_id ); + __unpack( s, message ); +} + +void mess::net_unpack( std::istream& s ) +{ + __net_unpack( s, super_id ); + __net_unpack( s, message ); +} + +Convert::Convert() : + EventHandler(), + v( 0 ) +{ + cnd.set( false ); +} + +Convert::Convert( stem::addr_type id ) : + EventHandler( id ), + v( 0 ) +{ + cnd.set( false ); +} + +Convert::Convert( stem::addr_type id, const char *info ) : + EventHandler( id, info ), + v( 0 ) +{ + cnd.set( false ); +} + +Convert::~Convert() +{ + // cnd.wait(); +} + +void Convert::handler0() +{ + v = -1; + cnd.set(true); +} + +void Convert::handler1( const stem::Event& ) +{ + v = 1; + cnd.set(true); +} + +void Convert::handler2( const stem::Event_base<mess>& ev ) +{ + v = ev.value().super_id; + m2 = ev.value().message; + + cnd.set(true); +} + +void Convert::handler3( const mess& m ) +{ + v = m.super_id; + m3 = m.message; + + cnd.set(true); +} + +void Convert::wait() +{ + cnd.try_wait(); + + cnd.set( false ); +} + +DEFINE_RESPONSE_TABLE( Convert ) + EV_VOID( ST_NULL, CONV_EV0, handler0 ) + EV_EDS( ST_NULL, CONV_EV1, handler1 ) + EV_Event_base_T_( ST_NULL, CONV_EV2, handler2, mess ) + EV_T_( ST_NULL, CONV_EV3, handler3, mess ) +END_RESPONSE_TABLE Added: trunk/complement/explore/test/stem/Convert.h =================================================================== --- trunk/complement/explore/test/stem/Convert.h (rev 0) +++ trunk/complement/explore/test/stem/Convert.h 2007-07-19 20:25:18 UTC (rev 1632) @@ -0,0 +1,74 @@ +// -*- C++ -*- Time-stamp: <07/07/20 00:03:52 ptr> + +/* + * + * Copyright (c) 2007 + * Petr Ovtchenkov + * + * Licensed under the Academic Free License version 3.0 + * + */ + +#ifndef __Convert_h +#define __Convert_h + +#include <mt/xmt.h> + +#include <stem/Event.h> +#include <stem/EventHandler.h> + +#include <stdint.h> +#include <string> + +struct mess : + public stem::__pack_base +{ + void pack( std::ostream& s ) const; + void net_pack( std::ostream& s ) const; + void unpack( std::istream& s ); + void net_unpack( std::istream& s ); + + mess() + { } + mess( const mess& m ) : + super_id( m.super_id ), + message( m.message ) + { } + + int32_t super_id; + std::string message; +}; + +class Convert : + public stem::EventHandler +{ + public: + Convert(); + Convert( stem::addr_type id ); + Convert( stem::addr_type id, const char *info ); + ~Convert(); + + void handler0(); + void handler1( const stem::Event& ); + void handler2( const stem::Event_base<mess>& ); + void handler3( const mess& ); + + void wait(); + + int v; + + std::string m2; + std::string m3; + + private: + xmt::condition cnd; + + DECLARE_RESPONSE_TABLE( Convert, stem::EventHandler ); +}; + +#define CONV_EV0 0x909 +#define CONV_EV1 0x90a +#define CONV_EV2 0x90b +#define CONV_EV3 0x90c + +#endif // __Convert_h Modified: trunk/complement/explore/test/stem/Makefile.inc =================================================================== --- trunk/complement/explore/test/stem/Makefile.inc 2007-07-18 20:32:22 UTC (rev 1631) +++ trunk/complement/explore/test/stem/Makefile.inc 2007-07-19 20:25:18 UTC (rev 1632) @@ -1,7 +1,8 @@ -# -*- makefile -*- Time-stamp: <06/10/10 15:22:33 ptr> +# -*- makefile -*- Time-stamp: <07/07/20 00:14:24 ptr> PRGNAME = stem_ut SRC_CC = unit_test.cc \ Node.cc \ NameService.cc \ - Echo.cc + Echo.cc \ + Convert.cc Modified: trunk/complement/explore/test/stem/unit_test.cc =================================================================== --- trunk/complement/explore/test/stem/unit_test.cc 2007-07-18 20:32:22 UTC (rev 1631) +++ trunk/complement/explore/test/stem/unit_test.cc 2007-07-19 20:25:18 UTC (rev 1632) @@ -1,4 +1,4 @@ -// -*- C++ -*- Time-stamp: <07/07/12 00:48:50 ptr> +// -*- C++ -*- Time-stamp: <07/07/20 00:21:37 ptr> /* * Copyright (c) 2002, 2003, 2006, 2007 @@ -25,6 +25,8 @@ #include <dlfcn.h> #include "Echo.h" +#include "Convert.h" + #include <stem/NetTransport.h> #include <stem/EvManager.h> #include <sockios/sockmgr.h> @@ -46,9 +48,6 @@ stem_test(); ~stem_test(); - void shm_init(); - void shm_finit(); - int EXAM_DECL(basic1); int EXAM_DECL(basic2); int EXAM_DECL(basic1new); @@ -61,6 +60,7 @@ int EXAM_DECL(net_echo); int EXAM_DECL(peer); int EXAM_DECL(boring_manager); + int EXAM_DECL(convert); static xmt::Thread::ret_code thr1( void * ); static xmt::Thread::ret_code thr1new( void * ); @@ -737,6 +737,64 @@ return EXAM_RESULT; } +int EXAM_IMPL(stem_test::convert) +{ + Convert conv; + mess m; + + m.super_id = 2; + m.message = "hello"; + + stem::Event_base<mess> ev( CONV_EV0 ); + + ev.dest( conv.self_id() ); + ev.value() = m; + + conv.Send( ev ); + + conv.wait(); + + EXAM_CHECK( conv.v == -1 ); + + stem::Event_base<mess> ev1( CONV_EV1 ); + + ev1.dest( conv.self_id() ); + ev1.value() = m; + + conv.Send( ev1 ); + + conv.wait(); + + EXAM_CHECK( conv.v == 1 ); + + stem::Event_base<mess> ev2( CONV_EV2 ); + + ev2.dest( conv.self_id() ); + ev2.value() = m; + + conv.Send( ev2 ); + + conv.wait(); + + EXAM_CHECK( conv.v == 2 ); + EXAM_CHECK( conv.m2 == "hello" ); + + stem::Event_base<mess> ev3( CONV_EV3 ); + + ev3.dest( conv.self_id() ); + ev3.value().super_id = 3; + ev3.value().message = ", wold!"; + + conv.Send( ev3 ); + + conv.wait(); + + EXAM_CHECK( conv.v == 3 ); + EXAM_CHECK( conv.m3 == ", wold!" ); + + return EXAM_RESULT; +} + // ----------------- // ----------------- @@ -766,6 +824,8 @@ t.add( &stem_test::boring_manager, test, "boring_manager", t.add( &stem_test::peer, test, "peer", tc[3] ) ); + t.add( &stem_test::convert, test, "convert", tc[0] ); + return t.girdle(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |