auto a = Event( 1, [ 0.1, 0.2, 0.3 ] );
auto gg = a.as!(double[]);
assert( gg == [ 0.1, 0.2, 0.3 ] );
auto b = Event( 1, "some string"w );
auto nn = b.as!wstring;
assert( nn == "some string"w );
auto c = Event( 1, "some str" );
auto d = shared Event( c );
assert( c.as!string == "some str" );
assert( d.as!string == "some str" );
assert( c.code == d.code );
struct TestStruct { double x, y; string info; immutable(int)[] data; }
auto ts = TestStruct( 10.1, 12.3, "hello", [1,2,3,4] );
auto e = Event( 1, ts );
auto f = shared Event( e );
auto g = immutable Event( e );
auto h = shared const Event( e );
assert( e.as!TestStruct == ts );
assert( f.as!TestStruct == ts );
assert( g.as!TestStruct == ts );
assert( h.as!TestStruct == ts );
auto l = Event( f );
auto m = Event( g );
auto n = Event( h );
assert( l.as!TestStruct == ts );
assert( m.as!TestStruct == ts );
assert( n.as!TestStruct == ts );
static struct TestStruct { double x, y; string info; immutable(int)[] data; }
auto ts = TestStruct( 3.14, 2.7, "hello", [ 2, 3, 4 ] );
auto a = Event( 8, ts );
auto ac = const Event( a );
auto ai = immutable Event( a );
auto as = shared Event( a );
auto acs = const shared Event( a );
assert( a.as!TestStruct == ts );
assert( ac.as!TestStruct == ts );
assert( ai.as!TestStruct == ts );
assert( as.as!TestStruct == ts );
assert( acs.as!TestStruct == ts );