Notes to Testers
==================
Written by Sai-Lai Lo (sll@orl.co.uk) and Eoin Carroll (ewc@orl.co.uk)

If you have done a new port or build omniORB2 with a new compiler, you
should verify the build by running the omniORB2_testsuite.

The following is a guide to the testsuite and on the recommended test
order. The testsuite is not automated in any sense. You are expected to
look at its output to make sure that the ORB is behaving as expected.
An automation script would be a nice addition (hint! hint!).

Building the testsuite
----------------------

Just go into $(TOP)/src/tests/omniORB2_testsuite and make.  The whole suite
should compile with no error. Some of the IDL files are big and some compilers
needs huge VM to compile the files in optimise mode. You may want to turn
off optimisation by editing config/config.mk:

Add this line before 'include dir.mk'

CXXDEBUGFLAGS = -g


The tests are organised into the following subdirectories:

all_idls
--------

Compile a collection of IDL files. You won't find the IDL files in this
directory. They are in $(TOP)/idl. In particular, your compiler is more
likely to fail with these files:

scopetest.idl - This is a collection of test cases to exercise the ability
                of omniidl2 and your compiler to handle nested scope and
                inner scope names override outer scope ones.

seq1.idl      - big, your compiler may run out of VM.


All IDL files should compile. If scopetest.idl doesn't, please find out
which case it fails and isolate it using CPP macros. We may not be able to
do anything about it but at least we can document what to avoid until the
compiler catches up.

basic_tests
-----------

This is a collection of basic test cases. The test programs are in pairs:

1. echosrv - echoclt - nullechoclt
2. consrv  - conclt
3. derivedEchosrv - derivedEchoclt
4. multiEchosrv - multiEchoclt
5. tstexceptsrv - tstexceptclt
6. refpsrv - refpclt
7. seqEchosrv - seqEchoclt
8. attrEchosrv - attrEchoclt
9. attrObjRefsrv - attrObjRefclt

By looking at the source, it should be pretty obvious what the purpose of
these tests are how to invoke them.

A few additional notes:

echo{srv,clt}, derivedEcho{srv,clt} and multiEcho{srv,clt} should also be
tests in various permutations. The purpose is to verify that the ORB is
handling interface inheritance properly.


sysexceptions
-------------

This test goes though all the CORBA system exceptions and throw them one by
one. 

inheritance_tests
-----------------

This test exercises the dynamic binding function of the ORB.
The client only has the stub for the base interface.
The server has both the stub for the base interface and the derived
interface.

The output on the client side should look exactly like this:

Testing inheritance....
  Checking _is_a("IDL:omg.org/CORBA/Object:1.0") - OK.

G::get_b() -  OK. Return value is of type B
   B::b() = 2
   B::a() = 1
   narrow to A OK
    A::a() = 1
  Checking _is_a("IDL:omg.org/CORBA/Object:1.0") - OK.
G::get_a() -  OK. Return value is of type A
   A::a() = 1
  narrow to B OK
   B::b() = 2
   B::a() = 1
G::o() -  OK. Return value is of type CORBA::Object
  narrow to A OK
   A::a() = 1
  narrow to B OK
   B::b() = 2
   B::a() = 1
PASSED.


psuedo_tests
------------

This test execises the operations of CORBA::Object.

The output on the client side should look exactly like this:

Testing CORBA::Object::_non_existent() to a remote object...
Object exists.
Testing CORBA::Object::_is_a() to a remote object...
Object is IDL:Echo:1.0
Testing CORBA::Object::_is_a() to a remote object...
Object is IDL:omg.org/CORBA/Object:1.0
Testing CORBA::Object::_non_existent() to a colocated object...
Object exists.
Testing CORBA::Object::_is_a() to a colocated object...
Object is IDL:Echo:1.0
Testing CORBA::Object::_is_a() to a colocated object...
Object is IDL:omg.org/CORBA/Object:1.0


var_tests
---------

This collection tests the use of T_var types. Watch out for compiler
warnings about ambiguity on operator overloading. This shouldn't happen.

The output of the tests should look exactly like this:

% ./array_var 
Fixed size array test: PASSED.
Variable size array test: PASSED.
% ./objref_var
Object Reference test: PASSED.
% ./seq_var 
Seqeuence (fixed size element) test: PASSED.
Sequence (variable size element) test: PASSED.
% ./str_var
I_i::op
% ./string_var
String_var test: PASSED.
Now cast to (char*) : a string
% ./struct_var
Fixed size struct test: PASSED.
Variable size struct test: PASSED.
% ./union_var
Fixed size union test: PASSED.
Variable size union test: PASSED.
% 


seq_tests
---------

This collection tests the use of different sequence types.
Note: your compiler may run out of VM compiling seq1.idl with -O. If so
      turn off optimisation.

The output of the tests should look exactly like this:

$ ./t_objref
Testing objref...### ctor Echo_var()
### ctor Echo_var(Echo_ptr)
### ctor Echo_var(const Echo_var &)
### Echo_var& operator= (Echo_ptr)
### Echo_var& operator= (const Echo_var&)
### test_objref_f()
###
### ctor Echo_member()
### ctor Echo_member(Echo_ptr)
### ctor Echo_member(const Echo_member &)
### Echo_member& operator= (Echo_ptr)
### Echo_member& operator= (const Echo_member&)
### Echo_member& Echo_member::operator= (Echo_var &)
### Echo_var& Echo_var::operator= (Echo_member &)
###
PASSED.
% ./t_string
Testing string...PASSED.
% ./t_seq_long
Testing sequence<long>...PASSED.
Testing sequence<sequence<long> >...PASSED.
Testing sequence<sequence<sequence<long> > >...PASSED.
% ./t_seq_objref
Testing sequence<objref>...PASSED.
Testing sequence<sequence<objref> >...PASSED.
Testing sequence<sequence<sequence<objref> > >...PASSED.
% ./t_seq_string
Testing sequence<string>...PASSED.
Testing sequence<sequence<string> >...PASSED.
Testing sequence<sequence<sequence<string> > >...PASSED.
% 

The client-server program tests extensively the marshalling of sequences.

The output on the client side should look exactly like this:

Testing sequence<array of double>....PASSED.
Testing sequence<array of array of double,10>....PASSED.
Testing sequence<array of string>....PASSED.
Testing sequence<array of array of string,10>....PASSED.
Testing sequence<array of Echo>....PASSED.
Testing sequence<array of array of Echo,10>....PASSED.
Testing sequence<array of sVariable>....PASSED.
Testing sequence<array of array of sVariable,10>....PASSED.
Testing sequence<array of uVariable>....PASSED.
Testing sequence<array of array of uVariable,10>....PASSED.

exchandlers
-----------

This collection verifies that
 1. idle connections are shutdown properly.
 2. The client side handles cache connection shutdown properly.
 3. Exception handlers are installed properly using the 
        omniORB::install{Transient,CommFailure,System}ExceptionHandler

client1 - an ordinary client with no exception handlers installed.
          The threshold for shutting down idle connections is shorten to
          6 sec.

          Here is the output of a sample run:

% ./client1 users/sll/test.obj
>>>>>>>>>>>>>Contact naming service
outScavenger: start.
>>>>>>>>>>>>>Send greetings to echo Object
I said,"Hello!". The Object said,"Hello!"
outScavenger: scanning for idle outgoing connections
outScavenger: scanning for idle outgoing connections
outScavenger: shutting down idle connection
outScavenger: shutting down idle connection
tcpSocketStrand::~Strand() close socket no. 4
I said,"Hello!". The Object said,"Hello!"
outScavenger: scanning for idle outgoing connections
tcpSocketStrand::~Strand() close socket no. 3
outScavenger: scanning for idle outgoing connections
outScavenger: shutting down idle connection
outScavenger: scanning for idle outgoing connections
tcpSocketStrand::~Strand() close socket no. 4
outScavenger: scanning for idle outgoing connections
I said,"Hello!". The Object said,"Hello!"
outScavenger: scanning for idle outgoing connections
I said,"Hello!". The Object said,"Hello!"
outScavenger: scanning for idle outgoing connections


client2: Same as client1 but with application installed exception handlers
         for TRANSIENT and COMM_FAILURE exceptions.
         If you kill the server while running client2, the client should
         produce this output and exit:

>>> Comm Failure exception handler (0 retries)
>>>>> Caught Comm Failure in the outer loop. Exit.

client3: Unlike client2, the exception handlers are installed per-object.
         The client should be able to tolerate server failure and patiently
         retry. Try killing the server and restarts it. Or even killing the
         Naming service and restarts it.

shutdown_tests 
--------------

This set tests the shutdown API of the ORB. There are two tests servers:

server - Cycle through bringing the BOA on-line and off-line a few times.
         Then remove the BOA irreversibly before exiting.
         Extra options:
             -k - main thread spawns a killer thread to call impl_shutdown,
                  the default is the main thread calls impl_is_ready
                  non-blocking, sleeps for a while and call impl_shutdown.
             -m - main thread spawns multiple threads, these threads call
                  impl_is_ready() non-blocking multiple times and then call
                  impl_is_ready() blocking. This is to test that
                  impl_is_ready() is completely reentrant. The threads
                  should be unblocked by a single impl_shutdown call.


server2 - Provides a shutdown interface to trigger a call to impl_shutdown.
          Use the offswitch program to call the shutdown interface.

Run the client in this directory as well as other echo clients
concurrently. The shutdown should be able to complete even if there are
active clients.

***Should test server and server2 with a few echo clients flooding the 
   servers with requests. The shutdown should work in this condition.****

forwarding
----------

This set tests the location forwarding function of the ORB.

The test programs consist of 'tombstone', 'colocated', 'echosrv' and
'echoclt'.

tombstone - This is the program that acts as a location forwarding server.
            It exports an "indirection object", the object redirects all
            requests to the real object. The object reference of the real
            object is given in the command line. 

            For instance:
               $ tombstone <stringified IOR of the real object>

               On startup the tombstone program prints out the stringified
               IOR of the "indirection object".

            Do the following test:
	        1. starts an echo server.
                2. starts tombstone and pass the IOR of the echo server as
                   the command line argument.
                3. starts an echo client and pass the IOR of the
                   tombstone's indirection object as the command line
                   argument.
                4. The requests from the client should be redirected to the
                   echo server. The client only contacts the tombstone at
                   the first invocation.
 
            The tombstone also provides two other objects, one is the
            shutdown object which is used to shutdown the program. The
            other is an attrObjRef object. The attribute contains the
            object reference of the "real object". Changing its value
            would cause the tombstone to redirect subsequent invocations
            with the new object reference. You can use the attrObjRefclt in
            basic_tests to change the attribute.

            Do the following test:
                1. As the previous test, starts an echo server and a tombstone
                   and an echo client. Keeps the echo client running for
                   the duration of the rest of the test.
                2. Starts another echo server, and use attrObjRefclt to
                   register this new object with the tombstone.
                3. Kill the original echo server. The echo client should
                   have noticed this and retry transparently with the
                   tombstone and get redirected to the new object.

colocated - This is the same as an echo client excepts that it also has an
            echo object. This program is intended to test the ORB's ability
            to handle location forwarding into its own address space.

            Do the following test:
               1. As the previous test, starts an echo server and a
                  tombstone.
               2. Starts colocated and verifies that it contacts the echo
                  server correctly.
               3. Use attrObjRefclt to register the echo object in
                  colocated with the tombstone.
               4. Kill the orignial echo server. The colocated client
                  should be redirected to its colocated echo object.

colocated_tests
---------------

This set tests the ORB's ability to handle object references that point to
a colocated object. In particular, when the object reference points to a
non-existing object, it should not fall over and should behave exactly the
same as when the object references point to non-exsiting objects in another
address space. That is, it should raise a OBJECT_NOT_EXIST when a client in
the same address space calls on this non-existing object.

server - exports a attrObjRef object.
client - almost the same as attrObjRefclt in basic_tests. Use this client
         to set the server's attrObjRef.

In the server, the attrObjRef implementation exhibits this behaviour:

    When a set_obj() operation is invoked, the implementation use
    _non_existent() to check if the new object reference points to an
    object that does exist. It also wakes up the main thread.

    In addition to the attrObjRef object, the server also has an echo
    object, the main thread cycle through these actions:
         a) create an echo object and prints out its IOR
         b) block until it is signalled by set_obj().
         c) sleep for another 5 seconds
         d) delete the echo object
         e) set the attrObjRef to a nil object reference.
         f) sleep 1 second
         g) goto a)


Do the following test:
  1. Starts the server. It will print out the IOR of the attrObjRef and
     the echo object.
  2. Uses the client to change the value of attrObjRef to the IOR of the
     echo object.
  3. Watch the printout of the server, it should say:

     attrObjRef_i::obj: checking if the object exists...Object exists.

  4. Watch the printout of the server, after it says:

     Main thread: dispose Echo object.....
     Main thread: set Attribute Object to nil...
     Main thread: create a new Echo object.....
  
   5. Redo 2) using the same echo object (now deleted).
   6. Watch the printout of the server, it should say:

     attrObjRef_i::obj: checking if the object exists...Object does not exist.



typecodeTest
------------

This tests passing a TypeCodes back and forward from an object. It creates 
several TypeCodes, and then passes these to and from a server object, checking
that the returned TypeCodes are correct.

It's output is as follows:
[** client **]

Created TypeCodes: 

aTC:   tk_string
  Maximum length: 0


bTC:   tk_struct
  Repository Id: IDL:aStruct:1.0
  Struct Name: aStruct
  Number of members: 3
   Member index: 0.
   Member name: aTypedef

   Member typecode: 
  tk_alias
  Repository Id: IDL:anAlias:1.0
  Alias Name: anAlias
  Content Type (alias to):
  tk_array
  Maximum length: 25
  Content Type:
  tk_sequence
  Maximum length: 50
  Content Type:
  tk_enum
  Repository Id: IDL:aEnum:1.0
  Enum Name: aEnum
  Number of members: 3
  Member Names: 
   0. ZERO
   1. ONE
   2. TWO




   Member index: 1.
   Member name: aBoolean

   Member typecode: 
tk_boolean

   Member index: 2.
   Member name: aUShort

   Member typecode: 
tk_ushort



Invoking method.

Typecode values:

bTC:   tk_struct
  Repository Id: IDL:aStruct:1.0
  Struct Name: aStruct
  Number of members: 3
   Member index: 0.
   Member name: aTypedef

   Member typecode: 
  tk_alias
  Repository Id: IDL:anAlias:1.0
  Alias Name: anAlias
  Content Type (alias to):
  tk_array
  Maximum length: 25
  Content Type:
  tk_sequence
  Maximum length: 50
  Content Type:
  tk_enum
  Repository Id: IDL:aEnum:1.0
  Enum Name: aEnum
  Number of members: 3
  Member Names: 
   0. ZERO
   1. ONE
   2. TWO




   Member index: 1.
   Member name: aBoolean

   Member typecode: 
tk_boolean

   Member index: 2.
   Member name: aUShort

   Member typecode: 
tk_ushort



Return value:   tk_string
  Maximum length: 0


cTC: tk_double




Equality tests: 
aTC test passed
bTC test passed
cTC test passed
rcTC test passed
Negative test passed
Test passed.
Finished!



[** server **]

TypeCodes received.

aTC: 
  tk_string
  Maximum length: 0

bTC: 
  tk_struct
  Repository Id: IDL:aStruct:1.0
  Struct Name: aStruct
  Number of members: 3
   Member index: 0.
   Member name: aTypedef

   Member typecode: 
  tk_alias
  Repository Id: IDL:anAlias:1.0
  Alias Name: anAlias
  Content Type (alias to):
  tk_array
  Maximum length: 25
  Content Type:
  tk_sequence
  Maximum length: 50
  Content Type:
  tk_enum
  Repository Id: IDL:aEnum:1.0
  Enum Name: aEnum
  Number of members: 3
  Member Names: 
   0. ZERO
   1. ONE
   2. TWO




   Member index: 1.
   Member name: aBoolean

   Member typecode: 
tk_boolean

   Member index: 2.
   Member name: aUShort

   Member typecode: 
tk_ushort


Returning: 
Return Value: 
  tk_string
  Maximum length: 0
cTC:
tk_double

----------



anyStructTest
-------------

This tests inserting, extracting, and passing around Anys containing 
structs, sequences of structs, and arrays of structs.

The output for the client is as follows:
[** client **]


Pass: 1
** Outbound Anys:
a: Double: 12321.2
b: Non-primitive contained in Any
structLong: 
Long: 9876543
Short: 3
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
structLong: 
Long: 9876543
Short: 3

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 2
** Outbound Anys:
a: Double: 12321.2
b: Non-primitive contained in Any
structDouble1: 
Double: 8.12346
Long: 9876543
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
structDouble1: 
Double: 8.12346
Long: 9876543

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 3
** Outbound Anys:
a: Double: 12321.2
b: Non-primitive contained in Any
structDouble2: 
Short: 3
Double: 8.12346
-- [Test extracting again] --
Short: 3
Double: 8.12346
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
structDouble2: 
Short: 3
Double: 8.12346
-- [Test extracting again] --
Short: 3
Double: 8.12346

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 4
** Outbound Anys:
a: Unsigned Long: 43231
b: Non-primitive contained in Any
structVariable: 
String: _Hello there!_
Double: 15.6543
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
structVariable: 
String: _Hello there!_
Double: 15.6543

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 5
** Outbound Anys:
a: Unsigned Long: 43231
b: Non-primitive contained in Any
seqStruct: 
Number of members: 3
[0]
String: Hello 0.
Double: 0.1
[1]
String: Hello 1.
Double: 1.1
[2]
String: Hello 2.
Double: 2.1
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
seqStruct: 
Number of members: 3
[0]
String: Hello 0.
Double: 0.1
[1]
String: Hello 1.
Double: 1.1
[2]
String: Hello 2.
Double: 2.1

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 6
** Outbound Anys:
a: Unsigned Long: 43231
b: Non-primitive contained in Any
arrayStruct: 
[0]
String: Hello Again 0.
Double: 0.2
[1]
String: Hello Again 1.
Double: 1.2
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
arrayStruct: 
[0]
String: Hello Again 0.
Double: 0.2
[1]
String: Hello Again 1.
Double: 1.2

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 7
** Outbound Anys:
a: Unsigned Long: 43231
b: Non-primitive contained in Any
structSequence: 
  seqStruct: 
    Number of members: 3
    [0]
    String: Hello 0.
    Double: 0.1
    [1]
    String: Hello 1.
    Double: 1.1
    [2]
    String: Hello 2.
    Double: 2.1
Double: 8.12346
-- [Test extracting again] --
  seqStruct: 
    Number of members: 3
    [0]
    String: Hello 0.
    Double: 0.1
    [1]
    String: Hello 1.
    Double: 1.1
    [2]
    String: Hello 2.
    Double: 2.1
Double: 8.12346
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
structSequence: 
  seqStruct: 
    Number of members: 3
    [0]
    String: Hello 0.
    Double: 0.1
    [1]
    String: Hello 1.
    Double: 1.1
    [2]
    String: Hello 2.
    Double: 2.1
Double: 8.12346
-- [Test extracting again] --
  seqStruct: 
    Number of members: 3
    [0]
    String: Hello 0.
    Double: 0.1
    [1]
    String: Hello 1.
    Double: 1.1
    [2]
    String: Hello 2.
    Double: 2.1
Double: 8.12346

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 8
** Outbound Anys:
a: Unsigned Long: 43231
b: Non-primitive contained in Any
structArray: 
  arrayStruct:
    [0]
    String: Hello Again 0.
    Double: 0.2
    [1]
    String: Hello Again 1.
    Double: 1.2
Double: 9.12346
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
structArray: 
  arrayStruct:
    [0]
    String: Hello Again 0.
    Double: 0.2
    [1]
    String: Hello Again 1.
    Double: 1.2
Double: 9.12346

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 9
** Outbound Anys:
a: Unsigned Long: 43231
b: Non-primitive contained in Any
structStruct:
Double: 8.12346
  structSequence:
    seqStruct: 
      Number of members: 3
      [0]
      String: Hello 0.
      Double: 0.1
      [1]
      String: Hello 1.
      Double: 1.1
      [2]
      String: Hello 2.
      Double: 2.1
    Double: 77.88
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
structStruct:
Double: 8.12346
  structSequence:
    seqStruct: 
      Number of members: 3
      [0]
      String: Hello 0.
      Double: 0.1
      [1]
      String: Hello 1.
      Double: 1.1
      [2]
      String: Hello 2.
      Double: 2.1
    Double: 77.88

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 10
** Outbound Anys:
a: Unsigned Long: 43231
b: Any contains any:
  Non-primitive contained in Any
Unknown type
Any contains any: 
structStruct:
Double: 8.12346
  structSequence:
    seqStruct: 
      Number of members: 3
      [0]
      String: Hello 0.
      Double: 0.1
      [1]
      String: Hello 1.
      Double: 1.1
      [2]
      String: Hello 2.
      Double: 2.1
    Double: 77.88
Invoking method.

** Returned Anys: 
b: Any contains any:
  Non-primitive contained in Any
Unknown type
Any contains any: 
structStruct:
Double: 8.12346
  structSequence:
    seqStruct: 
      Number of members: 3
      [0]
      String: Hello 0.
      Double: 0.1
      [1]
      String: Hello 1.
      Double: 1.1
      [2]
      String: Hello 2.
      Double: 2.1
    Double: 77.88

c: Unsigned Long: 2345
Return value: Char: a
------------------------
Finished!


and corresponding output for the server.



anyUnionTest
-------------

This tests inserting, extracting, and passing around Anys containing 
unions, sequences of unions, arrays of unions, and structs of unions.

The output for the client is as follows:
[** client **]


Pass: 1
** Outbound Anys:
a: Double: 12321.2
b: Non-primitive contained in Any
unionLong: 
Discriminant Value: 1
Union Value: long: 22
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
unionLong: 
Discriminant Value: 1
Union Value: long: 22

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 2
** Outbound Anys:
a: Double: 12321.2
b: Non-primitive contained in Any
unionLong: 
Discriminant Value: 2
Union Value: short: 11
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
unionLong: 
Discriminant Value: 2
Union Value: short: 11

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 3
** Outbound Anys:
a: Double: 12321.2
b: Non-primitive contained in Any
unionDouble1: 
Discriminant Value: 1
Union Value: double: 4.5678
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
unionDouble1: 
Discriminant Value: 1
Union Value: double: 4.5678

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 4
** Outbound Anys:
a: Double: 12321.2
b: Non-primitive contained in Any
unionDouble1: 
Discriminant Value: -2147483647
Union Value: default (long) : 22
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
unionDouble1: 
Discriminant Value: -2147483647
Union Value: default (long) : 22

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 5
** Outbound Anys:
a: Double: 12321.2
b: Non-primitive contained in Any
unionVariable: 
Discriminant Value  (enum) : 0
Union Value: string: HELLO
-- [Test extracting again] --
Discriminant Value  (enum) : 0
Union Value: string: HELLO
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
unionVariable: 
Discriminant Value  (enum) : 0
Union Value: string: HELLO
-- [Test extracting again] --
Discriminant Value  (enum) : 0
Union Value: string: HELLO

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 6
** Outbound Anys:
a: Double: 12321.2
b: Non-primitive contained in Any
unionVariable: 
Discriminant Value  (enum) : 1
Union Value: double: 4.5678
-- [Test extracting again] --
Discriminant Value  (enum) : 1
Union Value: double: 4.5678
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
unionVariable: 
Discriminant Value  (enum) : 1
Union Value: double: 4.5678
-- [Test extracting again] --
Discriminant Value  (enum) : 1
Union Value: double: 4.5678

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 7
** Outbound Anys:
a: Unsigned Long: 43231
b: Non-primitive contained in Any
seqUnion: 
Number of members: 2
[0]
   Discriminant Value  (enum) : 0
   Union Value:    string: HELLO AGAIN
[1]
   Discriminant Value  (enum) : 1
   Union Value:    double: 8.6543
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
seqUnion: 
Number of members: 2
[0]
   Discriminant Value  (enum) : 0
   Union Value:    string: HELLO AGAIN
[1]
   Discriminant Value  (enum) : 1
   Union Value:    double: 8.6543

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 8
** Outbound Anys:
a: Unsigned Long: 43231
b: Non-primitive contained in Any
arrayUnion: 
[0]
   Discriminant Value  (enum) : 0
   Union Value:    string: HELLO AGAIN AGAIN
[1]
   Discriminant Value  (enum) : 1
   Union Value:    double: 2.9678
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
arrayUnion: 
[0]
   Discriminant Value  (enum) : 0
   Union Value:    string: HELLO AGAIN AGAIN
[1]
   Discriminant Value  (enum) : 1
   Union Value:    double: 2.9678

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 9
** Outbound Anys:
a: Unsigned Long: 43231
b: Non-primitive contained in Any
unionSequence: 
   Discriminant Value: 1
   Union Value:
  seqUnion: 
    Number of members: 2
    [0]
   Discriminant Value  (enum) : 0
   Union Value:
 string: HELLO AGAIN
    [1]
   Discriminant Value  (enum) : 1
   Union Value:
 double: 8.6543
-- [Test extracting again] --
  seqUnion: 
    Number of members: 2
    [0]
   Discriminant Value  (enum) : 0
   Union Value:  string: HELLO AGAIN
    [1]
   Discriminant Value  (enum) : 1
   Union Value:  double: 8.6543
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
unionSequence: 
   Discriminant Value: 1
   Union Value:
  seqUnion: 
    Number of members: 2
    [0]
   Discriminant Value  (enum) : 0
   Union Value:
 string: HELLO AGAIN
    [1]
   Discriminant Value  (enum) : 1
   Union Value:
 double: 8.6543
-- [Test extracting again] --
  seqUnion: 
    Number of members: 2
    [0]
   Discriminant Value  (enum) : 0
   Union Value:  string: HELLO AGAIN
    [1]
   Discriminant Value  (enum) : 1
   Union Value:  double: 8.6543

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 10
** Outbound Anys:
a: Unsigned Long: 43231
b: Non-primitive contained in Any
unionSequence: 
   Discriminant Value: 2
   Union Value:
Double: 4.5678
-- [Test extracting again] --
Double: 4.5678
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
unionSequence: 
   Discriminant Value: 2
   Union Value:
Double: 4.5678
-- [Test extracting again] --
Double: 4.5678

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 11
** Outbound Anys:
a: Unsigned Long: 43231
b: Non-primitive contained in Any
unionArray: 
   Discriminant Value: a
  arrayUnion:
[0]
   Discriminant Value  (enum) : 0
   Union Value:    string: HELLO AGAIN AGAIN
[1]
   Discriminant Value  (enum) : 1
   Union Value:    double: 2.9678
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
unionArray: 
   Discriminant Value: a
  arrayUnion:
[0]
   Discriminant Value  (enum) : 0
   Union Value:    string: HELLO AGAIN AGAIN
[1]
   Discriminant Value  (enum) : 1
   Union Value:    double: 2.9678

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 12
** Outbound Anys:
a: Unsigned Long: 43231
b: Non-primitive contained in Any
unionArray: 
   Discriminant Value: b
Double: 4.5678
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
unionArray: 
   Discriminant Value: b
Double: 4.5678

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 13
** Outbound Anys:
a: Unsigned Long: 43231
b: Non-primitive contained in Any
unionUnion:
   Discriminant Value: 1
Double: 4.5678
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
unionUnion:
   Discriminant Value: 1
Double: 4.5678

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 14
** Outbound Anys:
a: Unsigned Long: 43231
b: Non-primitive contained in Any
unionUnion:
   Discriminant Value: 2
unionSequence:
   Discriminant Value: 2
Union Value:
Double: 4.5678
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
unionUnion:
   Discriminant Value: 2
unionSequence:
   Discriminant Value: 2
Union Value:
Double: 4.5678

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 15
** Outbound Anys:
a: Unsigned Long: 43231
b: Non-primitive contained in Any
unionStruct: 
Discriminant Value: 1
Union Value: double: 4.5678
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
unionStruct: 
Discriminant Value: 1
Union Value: double: 4.5678

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 16
** Outbound Anys:
a: Unsigned Long: 43231
b: Non-primitive contained in Any
unionStruct: 
Discriminant Value: 2
Union Value:testStruct: 
  testStruct.l : 10
  testStruct.d : 1.2345
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
unionStruct: 
Discriminant Value: 2
Union Value:testStruct: 
  testStruct.l : 10
  testStruct.d : 1.2345

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 17
** Outbound Anys:
a: Unsigned Long: 43231
b: Non-primitive contained in Any
structUnion:
 structUnion.d : 2.3456
 structUnion.u : 
  Discriminant value : (enum) 1
Union Value: double: 4.5678
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
structUnion:
 structUnion.d : 2.3456
 structUnion.u : 
  Discriminant value : (enum) 1
Union Value: double: 4.5678

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 18
** Outbound Anys:
a: Unsigned Long: 43231
b: Non-primitive contained in Any
unionDouble2:
 Discriminant value: (enum) 0
Union Value: Object Reference (anyUnionTest).Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
unionDouble2:
 Discriminant value: (enum) 0
Union Value: Object Reference (anyUnionTest).
c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 19
** Outbound Anys:
a: Unsigned Long: 43231
b: Non-primitive contained in Any
unionDouble2:
 Discriminant value: (enum) 2
Union Value:  double: 4.5678
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
unionDouble2:
 Discriminant value: (enum) 2
Union Value:  double: 4.5678

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 20
** Outbound Anys:
a: Unsigned Long: 43231
b: Non-primitive contained in Any
unionDouble2:
 Discriminant value: (enum) 1
Union Value:  default (ulong) : 12345
Invoking method.

** Returned Anys: 
b: Non-primitive contained in Any
unionDouble2:
 Discriminant value: (enum) 1
Union Value:  default (ulong) : 12345

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 21
** Outbound Anys:
a: Unsigned Long: 43231
b: Any contains any:
  Non-primitive contained in Any
Unknown type
Any contains any: 
unionDouble2:
 Discriminant value: (enum) 1
Union Value:  default (ulong) : 12345
Invoking method.

** Returned Anys: 
b: Any contains any:
  Non-primitive contained in Any
Unknown type
Any contains any: 
unionDouble2:
 Discriminant value: (enum) 1
Union Value:  default (ulong) : 12345

c: Unsigned Long: 2345
Return value: Char: a
------------------------


Pass: 22
** Outbound Anys:
a: Unsigned Long: 43231
b: Any contains any:
  Any contains any:
  Non-primitive contained in Any
Unknown type
Unknown type
Any contains any: 
Any contains any: 
unionDouble2:
 Discriminant value: (enum) 2
Union Value:  double: 4.5678
Invoking method.

** Returned Anys: 
b: Any contains any:
  Any contains any:
  Non-primitive contained in Any
Unknown type
Unknown type
Any contains any: 
Any contains any: 
unionDouble2:
 Discriminant value: (enum) 2
Union Value:  double: 4.5678

c: Unsigned Long: 2345
Return value: Char: a
------------------------
Finished!


and corresponding output for the server.


dynany
------

Exercise the DynAny and its related interfaces.

The tests are:

   t_dynany      - basic DynAny
   t_dynenum     - DynEnum
   t_dynsequence - DynSequence
   t_dynarray    - DynArray
   t_dynstruct   - DynStruct
   t_dynunion    - DynUnion

The output of the tests should look exactly like this:

% ./dynany
TR: reading boolean...[1 == 1]PASSED.
TR: reading octet...[2 == 2]PASSED.
TR: reading char...[a == a]PASSED.
TR: reading short...[4 == 4]PASSED.
TR: reading ushort...[5 == 5]PASSED.
TR: reading long...[6 == 6]PASSED.
TR: reading ulong...[7 == 7]PASSED.
TR: reading float...[3.1416 == 3.1416]PASSED.
TR: reading double...[9.4248 == 9.4248]PASSED.
TR: reading string...[Hello == Hello]PASSED.
TR: reading objref...PASSED.
TR: reading typecode...PASSED.
TR: reading any...PASSED.
TCW: create boolean..reading back..[1 == 1]to any..read from any..[1 == 1]PASSED.
TCW: create octet..reading back..[2 == 2]to any..read from any..[2 == 2]PASSED.
TCW: create char..reading back..[a == a]to any..read from any..[a == a]PASSED.
TCW: create short..reading back..[4 == 4]to any..read from any..[4 == 4]PASSED.
TCW: create ushort..reading back..[5 == 5]to any..read from any..[5 == 5]PASSED.
TCW: create long..reading back..[6 == 6]to any..read from any..[6 == 6]PASSED.
TCW: create ulong..reading back..[7 == 7]to any..read from any..[7 == 7]PASSED.
TCW: create float..reading back..[3.1416 == 3.1416]to any..read from any..[3.1416 == 3.1416]PASSED.
TCW: create double..reading back..[9.4248 == 9.4248]to any..read from any..[9.4248 == 9.4248]PASSED.
TCW: create string..reading back..[Hello == Hello]to any..read from any..[Hello == Hello]PASSED.
TCW: create objref..reading back..to any..read from any..PASSED.
TCW: create typecode..reading back..to any..read from any..PASSED.
TCW: create any..reading back..to any..read from any..PASSED.
TRMW: modify boolean..reading back..[0 == 0]to any..PASSED.
TRMW: modify octet..reading back..[3 == 3]to any..PASSED.
TRMW: modify char..reading back..[b == b]to any..PASSED.
TRMW: modify short..reading back..[5 == 5]to any..PASSED.
TRMW: modify ushort..reading back..[6 == 6]to any..PASSED.
TRMW: modify long..reading back..[7 == 7]to any..PASSED.
TRMW: modify ulong..reading back..[8 == 8]to any..PASSED.
TRMW: modify float..reading back..[4.1416 == 4.1416]to any..PASSED.
TRMW: modify double..reading back..[10.4248 == 10.4248]to any..PASSED.
TRMW: modify string..reading back..[Hello again == Hello again]to any..PASSED.
TRMW: modify objref..reading back..to any..PASSED.
TRMW: modify typecode..reading back..to any..PASSED.
TRMW: modify any..reading back..[3 == 3]to any..PASSED.
TRMW: Redo TR with the modified values...
TR: reading boolean...[0 == 0]PASSED.
TR: reading octet...[3 == 3]PASSED.
TR: reading char...[b == b]PASSED.
TR: reading short...[5 == 5]PASSED.
TR: reading ushort...[6 == 6]PASSED.
TR: reading long...[7 == 7]PASSED.
TR: reading ulong...[8 == 8]PASSED.
TR: reading float...[4.1416 == 4.1416]PASSED.
TR: reading double...[10.4248 == 10.4248]PASSED.
TR: reading string...[Hello again == Hello again]PASSED.
TR: reading objref...PASSED.
TR: reading typecode...PASSED.
TR: reading any...PASSED.
TIE: boolean from_any..reading back..[0 == 0]PASSED.
TIE: octet from_any..reading back..[3 == 3]PASSED.
TIE: char from_any..reading back..[b == b]PASSED.
TIE: short from_any..reading back..[5 == 5]PASSED.
TIE: ushort from_any..reading back..[6 == 6]PASSED.
TIE: long from_any..reading back..[7 == 7]PASSED.
TIE: ulong from_any..reading back..[8 == 8]PASSED.
TIE: float from_any..reading back..[4.1416 == 4.1416]PASSED.
TIE: double from_any..reading back..[10.4248 == 10.4248]PASSED.
TIE: string from_any..reading back..[Hello again == Hello again]PASSED.
TIE: objref from_any..reading back..PASSED.
TIE: typecode from_any..reading back..PASSED.
TIE: any from_any..reading back..PASSED.
TIE: test assign..PASSED.
TIE: test copy..PASSED.
TEH: reject invalid value (expect boolean)..PASSED.
TEH: reject invalid value (expect octet)..PASSED.
TEH: reject invalid value (expect char)..PASSED.
TEH: reject invalid value (expect short)..PASSED.
TEH: reject invalid value (expect ushort)..PASSED.
TEH: reject invalid value (expect long)..PASSED.
TEH: reject invalid value (expect ulong)..PASSED.
TEH: reject invalid value (expect float)..PASSED.
TEH: reject invalid value (expect double)..PASSED.
TEH: reject invalid value (expect string)..PASSED.
TEH: reject invalid value (expect objref)..PASSED.
TEH: reject invalid value (expect typecode)..PASSED.
TEH: reject invalid value (expect any)..PASSED.
TEH: reject mismatch extraction (expect boolean)..PASSED.
TEH: reject mismatch extraction (expect octet)..PASSED.
TEH: reject mismatch extraction (expect char)..PASSED.
TEH: reject mismatch extraction (expect short)..PASSED.
TEH: reject mismatch extraction (expect ushort)..PASSED.
TEH: reject mismatch extraction (expect long)..PASSED.
TEH: reject mismatch extraction (expect ulong)..PASSED.
TEH: reject mismatch extraction (expect float)..PASSED.
TEH: reject mismatch extraction (expect double)..PASSED.
TEH: reject mismatch extraction (expect string)..PASSED.
TEH: reject mismatch extraction (expect objref)..PASSED.
TEH: reject mismatch extraction (expect typecode)..PASSED.
TEH: reject mismatch extraction (expect any)..PASSED.
TI: boolean, next()..seek(0)..seek(1)..rewind()..current_component()..type()..PASSED.
TI: octet, next()..seek(0)..seek(1)..rewind()..current_component()..type()..PASSED.
TI: char, next()..seek(0)..seek(1)..rewind()..current_component()..type()..PASSED.
TI: short, next()..seek(0)..seek(1)..rewind()..current_component()..type()..PASSED.
TI: ushort, next()..seek(0)..seek(1)..rewind()..current_component()..type()..PASSED.
TI: long, next()..seek(0)..seek(1)..rewind()..current_component()..type()..PASSED.
TI: ulong, next()..seek(0)..seek(1)..rewind()..current_component()..type()..PASSED.
TI: float, next()..seek(0)..seek(1)..rewind()..current_component()..type()..PASSED.
TI: double, next()..seek(0)..seek(1)..rewind()..current_component()..type()..PASSED.
TI: string, next()..seek(0)..seek(1)..rewind()..current_component()..type()..PASSED.
TI: objref, next()..seek(0)..seek(1)..rewind()..current_component()..type()..PASSED.
TI: typecode, next()..seek(0)..seek(1)..rewind()..current_component()..type()..PASSED.
TI: any, next()..seek(0)..seek(1)..rewind()..current_component()..type()..PASSED.

% ./dynenum
TR: value_as_ulong() reading..value_as_string() reading..PASSED.
TCW: create enum..value_as_ulong() writing..reading back..to any..read from any..PASSED.
TCW: create enum..value_as_string() writing..reading back..to any..read from any..PASSED.
TRMW: modify enum..reading back..to any..PASSED.
TRMW: Redo TR with the modified values...
TR: value_as_ulong() reading..value_as_string() reading..PASSED.
TIE: enum from_any..reading back..PASSED.
TIE: test assign..PASSED.
TIE: test copy..PASSED.
TEH: reject invalid value..PASSED.
TEH: reject mismatch extraction..PASSED.
TI: next()..seek(0)..seek(1)..rewind()..current_component()..type()..PASSED.

% ./dynsequence
TR: reading SeqOctetT...get_elements()PASSED.
TR: reading SeqDoubleT...get_elements()PASSED.
TR: reading SeqSeqOctetT...[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]PASSED.
TR: reading SeqSeqDoubleT...[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]PASSED.
TCW: create SeqOctetT..reading back..get_elements()to any..read from any..get_elements()PASSED.
TCW: create SeqDoubleT..reading back..get_elements()to any..read from any..get_elements()PASSED.
TCW: create SeqSeqOctetT..reading back..[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]to any..read from any..[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]PASSED.
TCW: create SeqSeqDoubleT..reading back..[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]to any..read from any..[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]PASSED.
TRMW: SeqOctetT modify in place..reading back..get_elements()to any..PASSED.
TRMW: SeqDoubleT modify in place..reading back..get_elements()to any..PASSED.
TRMW: SeqSeqOctetT modify in place..reading back..[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]to any..PASSED.
TRMW: SeqSeqDoubleT modify in place..reading back..[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]to any..PASSED.
TRMW: Redo TR with the modified values...
TR: reading SeqOctetT...get_elements()PASSED.
TR: reading SeqDoubleT...get_elements()PASSED.
TR: reading SeqSeqOctetT...[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]PASSED.
TR: reading SeqSeqDoubleT...[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]PASSED.
TRMW: SeqOctetT truncate sequence..reading back..get_elements()to any..PASSED.
TRMW: SeqDoubleT truncate sequence..reading back..get_elements()to any..PASSED.
TRMW: SeqSeqOctetT truncate sequence..reading back..[get_elements()][get_elements()]get_elements()[get_elements()][get_elements()]to any..PASSED.
TRMW: SeqSeqDoubleT truncate sequence..reading back..[get_elements()][get_elements()]get_elements()[get_elements()][get_elements()]to any..PASSED.
TRMW: Redo TR with the modified values...
TR: reading SeqOctetT...get_elements()PASSED.
TR: reading SeqDoubleT...get_elements()PASSED.
TR: reading SeqSeqOctetT...[get_elements()][get_elements()]get_elements()[get_elements()][get_elements()]PASSED.
TR: reading SeqSeqDoubleT...[get_elements()][get_elements()]get_elements()[get_elements()][get_elements()]PASSED.
TRMW: SeqOctetT extend sequence..reading back..get_elements()to any..PASSED.
TRMW: SeqDoubleT extend sequence..reading back..get_elements()to any..PASSED.
TRMW: SeqSeqOctetT extend sequence..reading back..[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]to any..PASSED.
TRMW: SeqSeqDoubleT extend sequence..reading back..[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]to any..PASSED.
TRMW: Redo TR with the modified values...
TR: reading SeqOctetT...get_elements()PASSED.
TR: reading SeqDoubleT...get_elements()PASSED.
TR: reading SeqSeqOctetT...[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]PASSED.
TR: reading SeqSeqDoubleT...[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]PASSED.
TRMW: SeqOctetT truncate sequence with set_elements..reading back..get_elements()to any..PASSED.
TRMW: SeqDoubleT truncate sequence with set_elements..reading back..get_elements()to any..PASSED.
TRMW: SeqSeqOctetT truncate sequence with set_elements..reading back..[get_elements()][get_elements()]get_elements()[get_elements()][get_elements()]to any..PASSED.
TRMW: SeqSeqDoubleT truncate sequence with set_elements..reading back..[get_elements()][get_elements()]get_elements()[get_elements()][get_elements()]to any..PASSED.
TRMW: Redo TR with the modified values...
TR: reading SeqOctetT...get_elements()PASSED.
TR: reading SeqDoubleT...get_elements()PASSED.
TR: reading SeqSeqOctetT...[get_elements()][get_elements()]get_elements()[get_elements()][get_elements()]PASSED.
TR: reading SeqSeqDoubleT...[get_elements()][get_elements()]get_elements()[get_elements()][get_elements()]PASSED.
TRMW: SeqOctetT extend sequence with set_elements..reading back..get_elements()to any..PASSED.
TRMW: SeqDoubleT extend sequence with set_elements..reading back..get_elements()to any..PASSED.
TRMW: SeqSeqOctetT extend sequence with set_elements..reading back..[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]to any..PASSED.
TRMW: SeqSeqDoubleT extend sequence with set_elements..reading back..[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]to any..PASSED.
TRMW: Redo TR with the modified values...
TR: reading SeqOctetT...get_elements()PASSED.
TR: reading SeqDoubleT...get_elements()PASSED.
TR: reading SeqSeqOctetT...[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]PASSED.
TR: reading SeqSeqDoubleT...[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]PASSED.
TIE: from_any..reading back..get_elements()PASSED.
TIE: test assign..reading back..get_elements()PASSED.
TIE: test copy..reading back..get_elements()PASSED.
TEH: reject invalid value..PASSED.
TEH: reject mismatch extraction..PASSED.
TI: seek beyond the last element..seek to the last element..next()..type()..PASSED.

% ./t_dynarray
TR: reading ArrayOctetT...get_elements()PASSED.
TR: reading ArrayDoubleT...get_elements()PASSED.
TR: reading ArrayArrayOctetT...[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]PASSED.
TR: reading ArrayArrayDoubleT...[get_elements()][get_elements()]get_elements()[get_elements()][get_elements()]PASSED.
TCW: create ArrayOctetT..reading back..get_elements()to any..read from any..get_elements()PASSED.
TCW: create ArrayDoubleT..reading back..get_elements()to any..read from any..get_elements()PASSED.
TCW: create ArrayArrayOctetT..reading back..[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]to any..read from any..[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]PASSED.
TCW: create ArrayArrayDoubleT..reading back..[get_elements()][get_elements()]get_elements()[get_elements()][get_elements()]to any..read from any..[get_elements()][get_elements()]get_elements()[get_elements()][get_elements()]PASSED.
TRMW: ArrayOctetT modify in place..reading back..get_elements()to any..PASSED.
TRMW: ArrayDoubleT modify in place..reading back..get_elements()to any..PASSED.
TRMW: ArrayArrayOctetT modify in place..reading back..[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]to any..PASSED.
TRMW: ArrayArrayDoubleT modify in place..reading back..[get_elements()][get_elements()]get_elements()[get_elements()][get_elements()]to any..PASSED.
TRMW: Redo TR with the modified values...
TR: reading ArrayOctetT...get_elements()PASSED.
TR: reading ArrayDoubleT...get_elements()PASSED.
TR: reading ArrayArrayOctetT...[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]PASSED.
TR: reading ArrayArrayDoubleT...[get_elements()][get_elements()]get_elements()[get_elements()][get_elements()]PASSED.
TRMW: ArrayOctetT modify with set_elements..reading back..get_elements()to any..PASSED.
TRMW: ArrayDoubleT modify with set_elements..reading back..get_elements()to any..PASSED.
TRMW: ArrayArrayOctetT modify with set_elements..reading back..[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]to any..PASSED.
TRMW: ArrayArrayDoubleT modify with set_elements..reading back..[get_elements()][get_elements()]get_elements()[get_elements()][get_elements()]to any..PASSED.
TRMW: Redo TR with the modified values...
TR: reading ArrayOctetT...get_elements()PASSED.
TR: reading ArrayDoubleT...get_elements()PASSED.
TR: reading ArrayArrayOctetT...[get_elements()][get_elements()][get_elements()]get_elements()[get_elements()][get_elements()][get_elements()]PASSED.
TR: reading ArrayArrayDoubleT...[get_elements()][get_elements()]get_elements()[get_elements()][get_elements()]PASSED.
TIE: from_any..reading back..get_elements()PASSED.
TIE: test assign..reading back..get_elements()PASSED.
TIE: test copy..reading back..get_elements()PASSED.
TEH: reject invalid value..PASSED.
TEH: reject mismatch extraction..PASSED.
TI: seek beyond the last element..seek to the last element..next()..type()..PASSED.

% ./t_dynstruct
TR: reading StructAllT...get_members()..PASSED.
TCW: create StructAllT..reading back..get_members()..to any..read from any..get_members()..PASSED.
TCW: create StructAllT using set_members..reading back..get_members()..to any..read from any..get_members()..PASSED.
TRMW: StructAllT modify in place..reading back..get_members()..to any..PASSED.
TRMW: StructAllT modify in place using set_members()..reading back..get_members()..to any..PASSED.
TRMW: Redo TR with the modified values...
TR: reading StructAllT...get_members()..PASSED.
TIE: from_any..reading back..get_members()..PASSED.
TIE: test assign..reading back..get_members()..PASSED.
TIE: test copy..reading back..get_members()..PASSED.
TEH: reject invalid value..PASSED.
TEH: reject mismatch extraction..PASSED.
TI: current_member_{name,kind}()..seek beyond the last element..seek to the last element..next()..type()..PASSED.

% ./t_dynunion
TR: reading UnionLongT...PASSED.
TR: reading UnionDoubleT...PASSED.
TR: reading UnionVariableT...PASSED.
TR: reading SeqUnionT...PASSED.
TR: reading ArrayUnionT...PASSED.
TR: reading UnionSequenceT...PASSED.
TR: reading UnionArrayT...PASSED.
TR: reading UnionUnionT...PASSED.
TR: reading UnionStructT...PASSED.
TR: reading StructUnionT...PASSED.
TR: reading UnionDefault1T...PASSED.
TR: reading UnionDefault2T...PASSED.
TTC: check typecode related member functions..PASSED.
TCW: create UnionLongT..reading back..to any..read from any..PASSED.
TCW: create UnionDoubleT..reading back..to any..read from any..PASSED.
TCW: create UnionVariableT..reading back..to any..read from any..PASSED.
TCW: create SeqUnionT..reading back..to any..read from any..PASSED.
TCW: create ArrayUnionT..reading back..to any..read from any..PASSED.
TCW: create UnionSequenceT..reading back..to any..read from any..PASSED.
TCW: create UnionArrayT..reading back..to any..read from any..PASSED.
TCW: create UnionUnionT..reading back..to any..read from any..PASSED.
TCW: create UnionStructT..reading back..to any..read from any..PASSED.
TCW: create StructUnionT..reading back..to any..read from any..PASSED.
TCW: create UnionDefault1T..reading back..to any..read from any..PASSED.
TCW: create UnionDefault2T..reading back..to any..read from any..PASSED.
TRMW: modify UnionLongT..reading back..to any..PASSED.
TRMW: modify UnionDoubleT..reading back..to any..PASSED.
TRMW: modify UnionVariableT..reading back..to any..PASSED.
TRMW: modify SeqUnionT..reading back..to any..PASSED.
TRMW: modify ArrayUnionT..reading back..to any..PASSED.
TRMW: modify UnionSequenceT..reading back..to any..PASSED.
TRMW: modify UnionArrayT..reading back..to any..PASSED.
TRMW: modify UnionUnionT..reading back..to any..PASSED.
TRMW: modify UnionStructT..reading back..to any..PASSED.
TRMW: modify StructUnionT..reading back..to any..PASSED.
TRMW: modify UnionDefault1T..reading back..to any..PASSED.
TRMW: modify UnionDefault2T..reading back..to any..PASSED.
TRMW: Redo TR with the modified values...
TR: reading UnionLongT...PASSED.
TR: reading UnionDoubleT...PASSED.
TR: reading UnionVariableT...PASSED.
TR: reading SeqUnionT...PASSED.
TR: reading ArrayUnionT...PASSED.
TR: reading UnionSequenceT...PASSED.
TR: reading UnionArrayT...PASSED.
TR: reading UnionUnionT...PASSED.
TR: reading UnionStructT...PASSED.
TR: reading StructUnionT...PASSED.
TR: reading UnionDefault1T...PASSED.
TR: reading UnionDefault2T...PASSED.
TAD: set_as_default() returns true?..verify..returns false?..verify..PASSED.
TAD: select default branch using set_as_default(1)..verify..PASSED.
TAD: check behaviour of set_as_default(0)..PASSED.
TAD: (disc = long) set_as_default(1) to select an implicit default branch..verify..check return value of member_name()..to any..verify..PASSED.
TAD: (disc = enum) set_as_default(1) to select an implicit default branch..verify..check return value of member_name()..to any..verify..PASSED.
TAD: set_as_default() on union with no default branch..PASSED.
TSM: select branch by setting discriminator = 1..verify..switch to 2..verify..PASSED.
TSM: select branch by setting discriminator = enum(A)..verify..switch to enum(B)..verify..PASSED.



------- end ------------

