LTP GCOV extension - code coverage report
Current view: directory - test/cpp/unit/sequences - TestSeq.cpp
Test: YAORB-0.2.info
Date: 2006-02-27 Instrumented lines: 1015
Code covered: 97.3 % Executed lines: 988

       1                 : //==============================================================================
       2                 : // File <$/test/cpp/unit/sequences/TestSeq.cpp>
       3                 : // This file is part of YaOrb : Yet Another Object Request Broker,
       4                 : // Copyright (c) 2000-2003, 2006, Marc Alff.
       5                 : //
       6                 : // This program is free software; you can redistribute it and/or
       7                 : // modify it under the terms of the GNU General Public License
       8                 : // as published by the Free Software Foundation; either version 2
       9                 : // of the License, or (at your option) any later version.
      10                 : //
      11                 : // This program is distributed in the hope that it will be useful,
      12                 : // but WITHOUT ANY WARRANTY; without even the implied warranty of
      13                 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14                 : // GNU General Public License for more details.
      15                 : //
      16                 : // You should have received a copy of the GNU General Public License
      17                 : // along with this program; if not, write to the Free Software
      18                 : // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
      19                 : //
      20                 : //==============================================================================
      21                 : 
      22                 : #include <iostream>
      23                 : #include <yaorb/CORBA.h>
      24                 : 
      25                 : #include <src/cpp/prod/tool/String.h>
      26                 : 
      27                 : using namespace std ;
      28                 : 
      29                 : volatile int* main_stack = NULL ;
      30                 : 
      31                 : const char*
      32             195 : BufferType(const void* buffer)
      33                 : {
      34                 :    // Can't print the hexadecimal value of get_buffer()
      35                 :    // as a result of a unit test,
      36                 :    // because we need reproductibility 
      37                 :    //  1) across platforms.
      38                 :    //  2) across builds (compiler options, ...)
      39                 :    // for REGRESSION testing.
      40                 :    //
      41                 :    // For this unit test to be meaningful,
      42                 :    // we need to display something about get_buffer(),
      43                 :    // so that the test also verify the allocation/de-allocation behavior.
      44                 : 
      45                 :    const char* where = NULL ;
      46                 : 
      47             195 :    if (buffer == NULL)
      48                 :    {
      49                 :       where = "nil" ;
      50                 :    }
      51                 :    else
      52                 :    {
      53                 :       volatile int here ;
      54                 : 
      55             143 :       if (   ((main_stack < buffer) && (buffer < & here))
      56                 :           || ((& here < buffer) && (buffer < main_stack)) )
      57                 :       {
      58                 :          where = "stack" ;
      59                 :       }
      60                 :       else
      61                 :       {
      62                 :          where = "heap or text" ;
      63                 :       }
      64                 :    }
      65                 : 
      66                 :    return where ;
      67                 : }
      68                 : 
      69                 : //=============================================================================
      70                 : // sequence<CORBA::Boolean>
      71                 : //=============================================================================
      72                 : 
      73              15 : void DumpBoolSeq(CORBABooleanSeq& s, const char* title)
      74                 : {
      75                 :    CORBA::ULong i ;
      76              15 :    CORBA::ULong len = s.length() ;
      77              15 :    CORBA::ULong max = s.maximum() ;
      78              15 :    CORBA::Boolean rel = s.release() ;
      79                 :    const CORBABooleanSeq& const_s = s ;
      80              15 :    const void *buffer = const_s.get_buffer() ;
      81              15 :    void *buffer2 = s.get_buffer(false) ;
      82                 : 
      83              15 :    cout << title << endl << endl ;
      84                 : 
      85              15 :    cout << "Length = " << len << endl ;
      86              15 :    cout << "Max = " << max << endl ;
      87              15 :    cout << "Release = " << (rel ? "true" : "false") << endl ;
      88              15 :    cout << "Buffer = " << BufferType(buffer) << endl ;
      89                 : 
      90              15 :    if (buffer != buffer2)
      91                 :    {
      92               0 :       cout << "ERROR : get_buffer(void) != get_buffer(orphan = false) !!!" ;
      93                 :    }
      94                 : 
      95              81 :    for (i = 0 ; i < len ; i++)
      96                 :    {
      97             132 :       cout << " - [" << i << "]=" << (s[i] ? "true" : "false") << endl ;
      98                 :    }
      99                 : 
     100                 :    cout << endl ;
     101                 : }
     102                 : 
     103               1 : void TestBoolSeq(void)
     104                 : {
     105               1 :    cout << "========== Testing CORBABooleanSeq ==========" << endl << endl ;
     106                 : 
     107               1 :    CORBABooleanSeq s1 ;
     108               1 :    DumpBoolSeq(s1, "Sequence s1()") ;
     109                 : 
     110               1 :    CORBABooleanSeq s2(12) ;
     111               1 :    s2[0] = false ;
     112               1 :    s2[1] = false ;
     113               1 :    s2[2] = false ;
     114               1 :    s2[3] = false ;
     115               1 :    s2[4] = false ;
     116               1 :    s2[5] = false ;
     117               1 :    s2[6] = false ;
     118               1 :    s2[7] = false ;
     119               1 :    s2[8] = false ;
     120               1 :    s2[9] = false ;
     121               1 :    s2[10] = false ;
     122               1 :    s2[11] = false ;
     123               1 :    DumpBoolSeq(s2, "Sequence s2(12)") ;
     124                 : 
     125                 :    CORBA::Boolean data_s3[] =
     126                 :    {
     127                 :       true,
     128                 :       false,
     129                 :       true,
     130                 :       false
     131               1 :    } ;
     132                 : 
     133               1 :    CORBABooleanSeq s3(4UL, 4UL, & data_s3 [0], false) ;
     134               1 :    DumpBoolSeq(s3, "Sequence s3(4, 4, stack data, false)") ;
     135                 : 
     136               1 :    CORBA::Boolean *data_s4 = new CORBA::Boolean[4] ;
     137               1 :    data_s4[0] = false ;
     138               1 :    data_s4[1] = true ;
     139               1 :    data_s4[2] = false ;
     140               1 :    data_s4[3] = true ;
     141                 : 
     142               1 :    CORBABooleanSeq s4(4UL, 4UL, data_s4, false) ;
     143               1 :    DumpBoolSeq(s4, "Sequence s4(4, 4, heap data, false)") ;
     144                 : 
     145               1 :    CORBABooleanSeq s5(s1) ;
     146               1 :    DumpBoolSeq(s5, "Sequence s5(s1)") ;
     147                 : 
     148               1 :    CORBABooleanSeq s6(s2) ;
     149               1 :    DumpBoolSeq(s6, "Sequence s6(s2)") ;
     150                 : 
     151               1 :    s1 = s3 ;
     152               1 :    DumpBoolSeq(s1, "s1 = s3") ;
     153                 : 
     154               1 :    s2 = s4 ;
     155               1 :    DumpBoolSeq(s2, "s2 = s4") ;
     156                 : 
     157               1 :    s1.length(8) ;
     158               1 :    s1[4] = true ;
     159               1 :    s1[5] = true ;
     160               1 :    s1[6] = true ;
     161               1 :    s1[7] = true ;
     162               1 :    DumpBoolSeq(s1, "s1.length(8)") ;
     163                 : 
     164               1 :    s2.length(8) ;
     165               1 :    DumpBoolSeq(s2, "s2.length(8)") ;
     166                 : 
     167               1 :    CORBA::Boolean& b = s3[1] ;
     168               1 :    b = true ;
     169               1 :    DumpBoolSeq(s3, "hacking s3[1]=true, still in stack") ;
     170                 : 
     171               1 :    CORBA::Boolean *buf = s3.get_buffer(true) ;
     172               1 :    DumpBoolSeq(s3, "orphaned s3") ;
     173                 : 
     174               1 :    if (buf != data_s3)
     175                 :    {
     176               0 :       cout << "ERROR : wrong orphaned buffer for s3 !" << endl ;
     177                 :    }
     178                 : 
     179               1 :    s3.replace(4UL, 4UL, data_s4, false) ;
     180               1 :    DumpBoolSeq(s3, "s3 replaced with not owned data") ;
     181                 : 
     182               1 :    s3.replace(2UL, 2UL, data_s4, false) ;
     183               1 :    DumpBoolSeq(s3, "s3 replaced with not owned data, again") ;
     184                 : 
     185               1 :    s4.replace(0UL, 0UL, NULL, false) ;
     186               1 :    DumpBoolSeq(s4, "s4 orphaned the hard way") ;
     187                 : 
     188               1 :    delete [] data_s4 ;
     189                 : }
     190                 : 
     191                 : //=============================================================================
     192                 : // sequence<CORBA::Char>
     193                 : //=============================================================================
     194                 : 
     195              15 : void DumpCharSeq(CORBACharSeq& s, const char* title)
     196                 : {
     197                 :    CORBA::ULong i ;
     198              15 :    CORBA::ULong len = s.length() ;
     199              15 :    CORBA::ULong max = s.maximum() ;
     200              15 :    CORBA::Boolean rel = s.release() ;
     201                 :    const CORBACharSeq& const_s = s ;
     202              15 :    const void *buffer = const_s.get_buffer() ;
     203              15 :    void *buffer2 = s.get_buffer(false) ;
     204                 : 
     205              15 :    cout << title << endl << endl ;
     206                 : 
     207              15 :    cout << "Length = " << len << endl ;
     208              15 :    cout << "Max = " << max << endl ;
     209              15 :    cout << "Release = " << (rel ? "true" : "false") << endl ;
     210              15 :    cout << "Buffer = " << BufferType(buffer) << endl ;
     211                 : 
     212              15 :    if (buffer != buffer2)
     213                 :    {
     214               0 :       cout << "ERROR : get_buffer(void) != get_buffer(orphan = false) !!!" ;
     215                 :    }
     216                 : 
     217              81 :    for (i = 0 ; i < len ; i++)
     218                 :    {
     219             132 :       cout << " - [" << i << "]=" << s[i] << endl ;
     220                 :    }
     221                 : 
     222                 :    cout << endl ;
     223                 : }
     224                 : 
     225               1 : void TestCharSeq(void)
     226                 : {
     227               1 :    cout << "========== Testing CORBACharSeq ==========" << endl << endl ;
     228                 : 
     229               1 :    CORBACharSeq s1 ;
     230               1 :    DumpCharSeq(s1, "Sequence s1()") ;
     231                 : 
     232               1 :    CORBACharSeq s2(12) ;
     233               1 :    s2[0] = 'a' ;
     234               1 :    s2[1] = 'b' ;
     235               1 :    s2[2] = 'c' ;
     236               1 :    s2[3] = 'd' ;
     237               1 :    s2[4] = 'e' ;
     238               1 :    s2[5] = 'f' ;
     239               1 :    s2[6] = 'g' ;
     240               1 :    s2[7] = 'h' ;
     241               1 :    s2[8] = 'i' ;
     242               1 :    s2[9] = 'j' ;
     243               1 :    s2[10] = 'k' ;
     244               1 :    s2[11] = 'l' ;
     245               1 :    DumpCharSeq(s2, "Sequence s2(12)") ;
     246                 : 
     247                 :    CORBA::Char data_s3[] =
     248                 :    {
     249                 :       'A',
     250                 :       'B',
     251                 :       'C',
     252                 :       'D'
     253               1 :    } ;
     254                 : 
     255               1 :    CORBACharSeq s3(4UL, 4UL, & data_s3 [0], false) ;
     256               1 :    DumpCharSeq(s3, "Sequence s3(4, 4, stack data, false)") ;
     257                 : 
     258               1 :    CORBA::Char *data_s4 = new CORBA::Char[4] ;
     259               1 :    data_s4[0] = 'X' ;
     260               1 :    data_s4[1] = 'Y' ;
     261               1 :    data_s4[2] = 'Z' ;
     262               1 :    data_s4[3] = 'T' ;
     263                 : 
     264               1 :    CORBACharSeq s4(4UL, 4UL, data_s4, false) ;
     265               1 :    DumpCharSeq(s4, "Sequence s4(4, 4, heap data, false)") ;
     266                 : 
     267               1 :    CORBACharSeq s5(s1) ;
     268               1 :    DumpCharSeq(s5, "Sequence s5(s1)") ;
     269                 : 
     270               1 :    CORBACharSeq s6(s2) ;
     271               1 :    DumpCharSeq(s6, "Sequence s6(s2)") ;
     272                 : 
     273               1 :    s1 = s3 ;
     274               1 :    DumpCharSeq(s1, "s1 = s3") ;
     275                 : 
     276               1 :    s2 = s4 ;
     277               1 :    DumpCharSeq(s2, "s2 = s4") ;
     278                 : 
     279               1 :    s1.length(8) ;
     280               1 :    s1[4] = '#' ;
     281               1 :    s1[5] = '#' ;
     282               1 :    s1[6] = '#' ;
     283               1 :    s1[7] = '#' ;
     284               1 :    DumpCharSeq(s1, "s1.length(8)") ;
     285                 : 
     286               1 :    s2.length(8) ;
     287               1 :    DumpCharSeq(s2, "s2.length(8)") ;
     288                 : 
     289               1 :    CORBA::Char& c = s3[1] ;
     290               1 :    c = '?' ;
     291               1 :    DumpCharSeq(s3, "hacking s3[1]='?', still in stack") ;
     292                 : 
     293               1 :    CORBA::Char *buf = s3.get_buffer(true) ;
     294               1 :    DumpCharSeq(s3, "orphaned s3") ;
     295                 : 
     296               1 :    if (buf != data_s3)
     297                 :    {
     298               0 :       cout << "ERROR : wrong orphaned buffer for s3 !" << endl ;
     299                 :    }
     300                 : 
     301               1 :    s3.replace(4UL, 4UL, data_s4, false) ;
     302               1 :    DumpCharSeq(s3, "s3 replaced with not owned data") ;
     303                 : 
     304               1 :    s3.replace(2UL, 2UL, data_s4, false) ;
     305               1 :    DumpCharSeq(s3, "s3 replaced with not owned data, again") ;
     306                 : 
     307               1 :    s4.replace(0UL, 0UL, NULL, false) ;
     308               1 :    DumpCharSeq(s4, "s4 orphaned the hard way") ;
     309                 : 
     310               1 :    delete [] data_s4 ;
     311                 : }
     312                 : 
     313                 : //=============================================================================
     314                 : // sequence<CORBA::WChar>
     315                 : //=============================================================================
     316                 : 
     317              15 : void DumpWCharSeq(CORBAWCharSeq& s, const char* title)
     318                 : {
     319                 :    CORBA::ULong i ;
     320              15 :    CORBA::ULong len = s.length() ;
     321              15 :    CORBA::ULong max = s.maximum() ;
     322              15 :    CORBA::Boolean rel = s.release() ;
     323                 :    const CORBAWCharSeq& const_s = s ;
     324              15 :    const void *buffer = const_s.get_buffer() ;
     325              15 :    void *buffer2 = s.get_buffer(false) ;
     326                 : 
     327              15 :    cout << title << endl << endl ;
     328                 : 
     329              15 :    cout << "Length = " << len << endl ;
     330              15 :    cout << "Max = " << max << endl ;
     331              15 :    cout << "Release = " << (rel ? "true" : "false") << endl ;
     332              15 :    cout << "Buffer = " << BufferType(buffer) << endl ;
     333                 : 
     334              15 :    if (buffer != buffer2)
     335                 :    {
     336               0 :       cout << "ERROR : get_buffer(void) != get_buffer(orphan = false) !!!" ;
     337                 :    }
     338                 : 
     339              81 :    for (i = 0 ; i < len ; i++)
     340                 :    {
     341             132 :       cout << " - [" << i << "]=" << s[i] << endl ;
     342                 :    }
     343                 : 
     344                 :    cout << endl ;
     345                 : }
     346                 : 
     347               1 : void TestWCharSeq(void)
     348                 : {
     349               1 :    cout << "========== Testing CORBAWCharSeq ==========" << endl << endl ;
     350                 : 
     351               1 :    CORBAWCharSeq s1 ;
     352               1 :    DumpWCharSeq(s1, "Sequence s1()") ;
     353                 : 
     354               1 :    CORBAWCharSeq s2(12) ;
     355               1 :    s2[0] = 'a' ;
     356               1 :    s2[1] = 'b' ;
     357               1 :    s2[2] = 'c' ;
     358               1 :    s2[3] = 'd' ;
     359               1 :    s2[4] = 'e' ;
     360               1 :    s2[5] = 'f' ;
     361               1 :    s2[6] = 'g' ;
     362               1 :    s2[7] = 'h' ;
     363               1 :    s2[8] = 'i' ;
     364               1 :    s2[9] = 'j' ;
     365               1 :    s2[10] = 'k' ;
     366               1 :    s2[11] = 'l' ;
     367               1 :    DumpWCharSeq(s2, "Sequence s2(12)") ;
     368                 : 
     369                 :    CORBA::WChar data_s3[] =
     370                 :    {
     371                 :       'A',
     372                 :       'B',
     373                 :       'C',
     374                 :       'D'
     375               1 :    } ;
     376                 : 
     377               1 :    CORBAWCharSeq s3(4UL, 4UL, & data_s3 [0], false) ;
     378               1 :    DumpWCharSeq(s3, "Sequence s3(4, 4, stack data, false)") ;
     379                 : 
     380               1 :    CORBA::WChar *data_s4 = new CORBA::WChar[4] ;
     381               1 :    data_s4[0] = 'X' ;
     382               1 :    data_s4[1] = 'Y' ;
     383               1 :    data_s4[2] = 'Z' ;
     384               1 :    data_s4[3] = 'T' ;
     385                 : 
     386               1 :    CORBAWCharSeq s4(4UL, 4UL, data_s4, false) ;
     387               1 :    DumpWCharSeq(s4, "Sequence s4(4, 4, heap data, false)") ;
     388                 : 
     389               1 :    CORBAWCharSeq s5(s1) ;
     390               1 :    DumpWCharSeq(s5, "Sequence s5(s1)") ;
     391                 : 
     392               1 :    CORBAWCharSeq s6(s2) ;
     393               1 :    DumpWCharSeq(s6, "Sequence s6(s2)") ;
     394                 : 
     395               1 :    s1 = s3 ;
     396               1 :    DumpWCharSeq(s1, "s1 = s3") ;
     397                 : 
     398               1 :    s2 = s4 ;
     399               1 :    DumpWCharSeq(s2, "s2 = s4") ;
     400                 : 
     401               1 :    s1.length(8) ;
     402               1 :    s1[4] = '#' ;
     403               1 :    s1[5] = '#' ;
     404               1 :    s1[6] = '#' ;
     405               1 :    s1[7] = '#' ;
     406               1 :    DumpWCharSeq(s1, "s1.length(8)") ;
     407                 : 
     408               1 :    s2.length(8) ;
     409               1 :    DumpWCharSeq(s2, "s2.length(8)") ;
     410                 : 
     411               1 :    CORBA::WChar& c = s3[1] ;
     412               1 :    c = '?' ;
     413               1 :    DumpWCharSeq(s3, "hacking s3[1]='?', still in stack") ;
     414                 : 
     415               1 :    CORBA::WChar *buf = s3.get_buffer(true) ;
     416               1 :    DumpWCharSeq(s3, "orphaned s3") ;
     417                 : 
     418               1 :    if (buf != data_s3)
     419                 :    {
     420               0 :       cout << "ERROR : wrong orphaned buffer for s3 !" << endl ;
     421                 :    }
     422                 : 
     423               1 :    s3.replace(4UL, 4UL, data_s4, false) ;
     424               1 :    DumpWCharSeq(s3, "s3 replaced with not owned data") ;
     425                 : 
     426               1 :    s3.replace(2UL, 2UL, data_s4, false) ;
     427               1 :    DumpWCharSeq(s3, "s3 replaced with not owned data, again") ;
     428                 : 
     429               1 :    s4.replace(0UL, 0UL, NULL, false) ;
     430               1 :    DumpWCharSeq(s4, "s4 orphaned the hard way") ;
     431                 : 
     432               1 :    delete [] data_s4 ;
     433                 : }
     434                 : 
     435                 : //=============================================================================
     436                 : // sequence<CORBA::Octet>
     437                 : //=============================================================================
     438                 : 
     439              15 : void DumpOctetSeq(CORBAOctetSeq& s, const char* title)
     440                 : {
     441                 :    CORBA::ULong i ;
     442              15 :    CORBA::ULong len = s.length() ;
     443              15 :    CORBA::ULong max = s.maximum() ;
     444              15 :    CORBA::Boolean rel = s.release() ;
     445                 :    const CORBAOctetSeq& const_s = s ;
     446              15 :    const void *buffer = const_s.get_buffer() ;
     447              15 :    void *buffer2 = s.get_buffer(false) ;
     448                 : 
     449              15 :    cout << title << endl << endl ;
     450                 : 
     451              15 :    cout << "Length = " << len << endl ;
     452              15 :    cout << "Max = " << max << endl ;
     453              15 :    cout << "Release = " << (rel ? "true" : "false") << endl ;
     454              15 :    cout << "Buffer = " << BufferType(buffer) << endl ;
     455                 : 
     456              15 :    if (buffer != buffer2)
     457                 :    {
     458               0 :       cout << "ERROR : get_buffer(void) != get_buffer(orphan = false) !!!" ;
     459                 :    }
     460                 : 
     461              81 :    for (i = 0 ; i < len ; i++)
     462                 :    {
     463             132 :       cout << " - [" << i << "]=" << (int)(s[i]) << endl ;
     464                 :    }
     465                 : 
     466                 :    cout << endl ;
     467                 : }
     468                 : 
     469               1 : void TestOctetSeq(void)
     470                 : {
     471               1 :    cout << "========== Testing CORBAOctetSeq ==========" << endl << endl ;
     472                 : 
     473               1 :    CORBAOctetSeq s1 ;
     474               1 :    DumpOctetSeq(s1, "Sequence s1()") ;
     475                 : 
     476               1 :    CORBAOctetSeq s2(12) ;
     477               1 :    s2[0] = 100 ;
     478               1 :    s2[1] = 101 ;
     479               1 :    s2[2] = 102 ;
     480               1 :    s2[3] = 103 ;
     481               1 :    s2[4] = 104 ;
     482               1 :    s2[5] = 105 ;
     483               1 :    s2[6] = 106 ;
     484               1 :    s2[7] = 107 ;
     485               1 :    s2[8] = 108 ;
     486               1 :    s2[9] = 109 ;
     487               1 :    s2[10] = 110;
     488               1 :    s2[11] = 111 ;
     489               1 :    DumpOctetSeq(s2, "Sequence s2(12)") ;
     490                 : 
     491                 :    CORBA::Octet data_s3[] =
     492                 :    {
     493                 :       201,
     494                 :       202,
     495                 :       203,
     496                 :       204
     497               1 :    } ;
     498                 : 
     499               1 :    CORBAOctetSeq s3(4UL, 4UL, & data_s3 [0], false) ;
     500               1 :    DumpOctetSeq(s3, "Sequence s3(4, 4, stack data, false)") ;
     501                 : 
     502               1 :    CORBA::Octet *data_s4 = new CORBA::Octet[4] ;
     503               1 :    data_s4[0] = 11 ;
     504               1 :    data_s4[1] = 22 ;
     505               1 :    data_s4[2] = 33 ;
     506               1 :    data_s4[3] = 44 ;
     507                 : 
     508               1 :    CORBAOctetSeq s4(4UL, 4UL, data_s4, false) ;
     509               1 :    DumpOctetSeq(s4, "Sequence s4(4, 4, heap data, false)") ;
     510                 : 
     511               1 :    CORBAOctetSeq s5(s1) ;
     512               1 :    DumpOctetSeq(s5, "Sequence s5(s1)") ;
     513                 : 
     514               1 :    CORBAOctetSeq s6(s2) ;
     515               1 :    DumpOctetSeq(s6, "Sequence s6(s2)") ;
     516                 : 
     517               1 :    s1 = s3 ;
     518               1 :    DumpOctetSeq(s1, "s1 = s3") ;
     519                 : 
     520               1 :    s2 = s4 ;
     521               1 :    DumpOctetSeq(s2, "s2 = s4") ;
     522                 : 
     523               1 :    s1.length(8) ;
     524               1 :    s1[4] = 255 ;
     525               1 :    s1[5] = 255 ;
     526               1 :    s1[6] = 255 ;
     527               1 :    s1[7] = 255 ;
     528               1 :    DumpOctetSeq(s1, "s1.length(8)") ;
     529                 : 
     530               1 :    s2.length(8) ;
     531               1 :    DumpOctetSeq(s2, "s2.length(8)") ;
     532                 : 
     533               1 :    CORBA::Octet& c = s3[1] ;
     534               1 :    c = 128 ;
     535               1 :    DumpOctetSeq(s3, "hacking s3[1]=128, still in stack") ;
     536                 : 
     537               1 :    CORBA::Octet *buf = s3.get_buffer(true) ;
     538               1 :    DumpOctetSeq(s3, "orphaned s3") ;
     539                 : 
     540               1 :    if (buf != data_s3)
     541                 :    {
     542               0 :       cout << "ERROR : wrong orphaned buffer for s3 !" << endl ;
     543                 :    }
     544                 : 
     545               1 :    s3.replace(4UL, 4UL, data_s4, false) ;
     546               1 :    DumpOctetSeq(s3, "s3 replaced with not owned data") ;
     547                 : 
     548               1 :    s3.replace(2UL, 2UL, data_s4, false) ;
     549               1 :    DumpOctetSeq(s3, "s3 replaced with not owned data, again") ;
     550                 : 
     551               1 :    s4.replace(0UL, 0UL, NULL, false) ;
     552               1 :    DumpOctetSeq(s4, "s4 orphaned the hard way") ;
     553                 : 
     554               1 :    delete [] data_s4 ;
     555                 : }
     556                 : 
     557                 : //=============================================================================
     558                 : // sequence<CORBA::Short>
     559                 : //=============================================================================
     560                 : 
     561              15 : void DumpShortSeq(CORBAShortSeq& s, const char* title)
     562                 : {
     563                 :    CORBA::ULong i ;
     564              15 :    CORBA::ULong len = s.length() ;
     565              15 :    CORBA::ULong max = s.maximum() ;
     566              15 :    CORBA::Boolean rel = s.release() ;
     567                 :    const CORBAShortSeq& const_s = s ;
     568              15 :    const void *buffer = const_s.get_buffer() ;
     569              15 :    void *buffer2 = s.get_buffer(false) ;
     570                 : 
     571              15 :    cout << title << endl << endl ;
     572                 : 
     573              15 :    cout << "Length = " << len << endl ;
     574              15 :    cout << "Max = " << max << endl ;
     575              15 :    cout << "Release = " << (rel ? "true" : "false") << endl ;
     576              15 :    cout << "Buffer = " << BufferType(buffer) << endl ;
     577                 : 
     578              15 :    if (buffer != buffer2)
     579                 :    {
     580               0 :       cout << "ERROR : get_buffer(void) != get_buffer(orphan = false) !!!" ;
     581                 :    }
     582                 : 
     583              81 :    for (i = 0 ; i < len ; i++)
     584                 :    {
     585             132 :       cout << " - [" << i << "]=" << (s[i]) << endl ;
     586                 :    }
     587                 : 
     588                 :    cout << endl ;
     589                 : }
     590                 : 
     591               1 : void TestShortSeq(void)
     592                 : {
     593               1 :    cout << "========== Testing CORBAShortSeq ==========" << endl << endl ;
     594                 : 
     595               1 :    CORBAShortSeq s1 ;
     596               1 :    DumpShortSeq(s1, "Sequence s1()") ;
     597                 : 
     598               1 :    CORBAShortSeq s2(12) ;
     599               1 :    s2[0] = 100 ;
     600               1 :    s2[1] = 101 ;
     601               1 :    s2[2] = 102 ;
     602               1 :    s2[3] = 103 ;
     603               1 :    s2[4] = 104 ;
     604               1 :    s2[5] = 105 ;
     605               1 :    s2[6] = 106 ;
     606               1 :    s2[7] = 107 ;
     607               1 :    s2[8] = 108 ;
     608               1 :    s2[9] = 109 ;
     609               1 :    s2[10] = 110;
     610               1 :    s2[11] = 111 ;
     611               1 :    DumpShortSeq(s2, "Sequence s2(12)") ;
     612                 : 
     613                 :    CORBA::Short data_s3[] =
     614                 :    {
     615                 :       201,
     616                 :       202,
     617                 :       203,
     618                 :       204
     619               1 :    } ;
     620                 : 
     621               1 :    CORBAShortSeq s3(4UL, 4UL, & data_s3 [0], false) ;
     622               1 :    DumpShortSeq(s3, "Sequence s3(4, 4, stack data, false)") ;
     623                 : 
     624               1 :    CORBA::Short *data_s4 = new CORBA::Short[4] ;
     625               1 :    data_s4[0] = -11 ;
     626               1 :    data_s4[1] = -22 ;
     627               1 :    data_s4[2] = -33 ;
     628               1 :    data_s4[3] = -44 ;
     629                 : 
     630               1 :    CORBAShortSeq s4(4UL, 4UL, data_s4, false) ;
     631               1 :    DumpShortSeq(s4, "Sequence s4(4, 4, heap data, false)") ;
     632                 : 
     633               1 :    CORBAShortSeq s5(s1) ;
     634               1 :    DumpShortSeq(s5, "Sequence s5(s1)") ;
     635                 : 
     636               1 :    CORBAShortSeq s6(s2) ;
     637               1 :    DumpShortSeq(s6, "Sequence s6(s2)") ;
     638                 : 
     639               1 :    s1 = s3 ;
     640               1 :    DumpShortSeq(s1, "s1 = s3") ;
     641                 : 
     642               1 :    s2 = s4 ;
     643               1 :    DumpShortSeq(s2, "s2 = s4") ;
     644                 : 
     645               1 :    s1.length(8) ;
     646               1 :    s1[4] = 32767 ;
     647               1 :    s1[5] = 32767 ;
     648               1 :    s1[6] = 32767 ;
     649               1 :    s1[7] = 32767 ;
     650               1 :    DumpShortSeq(s1, "s1.length(8)") ;
     651                 : 
     652               1 :    s2.length(8) ;
     653               1 :    DumpShortSeq(s2, "s2.length(8)") ;
     654                 : 
     655               1 :    CORBA::Short& c = s3[1] ;
     656               1 :    c = -32768 ;
     657               1 :    DumpShortSeq(s3, "hacking s3[1]=-32768, still in stack") ;
     658                 : 
     659               1 :    CORBA::Short *buf = s3.get_buffer(true) ;
     660               1 :    DumpShortSeq(s3, "orphaned s3") ;
     661                 : 
     662               1 :    if (buf != data_s3)
     663                 :    {
     664               0 :       cout << "ERROR : wrong orphaned buffer for s3 !" << endl ;
     665                 :    }
     666                 : 
     667               1 :    s3.replace(4UL, 4UL, data_s4, false) ;
     668               1 :    DumpShortSeq(s3, "s3 replaced with not owned data") ;
     669                 : 
     670               1 :    s3.replace(2UL, 2UL, data_s4, false) ;
     671               1 :    DumpShortSeq(s3, "s3 replaced with not owned data, again") ;
     672                 : 
     673               1 :    s4.replace(0UL, 0UL, NULL, false) ;
     674               1 :    DumpShortSeq(s4, "s4 orphaned the hard way") ;
     675                 : 
     676               1 :    delete [] data_s4 ;
     677                 : }
     678                 : 
     679                 : //=============================================================================
     680                 : // sequence<CORBA::UShort>
     681                 : //=============================================================================
     682                 : 
     683              15 : void DumpUShortSeq(CORBAUShortSeq& s, const char* title)
     684                 : {
     685                 :    CORBA::ULong i ;
     686              15 :    CORBA::ULong len = s.length() ;
     687              15 :    CORBA::ULong max = s.maximum() ;
     688              15 :    CORBA::Boolean rel = s.release() ;
     689                 :    const CORBAUShortSeq& const_s = s ;
     690              15 :    const void *buffer = const_s.get_buffer() ;
     691              15 :    void *buffer2 = s.get_buffer(false) ;
     692                 : 
     693              15 :    cout << title << endl << endl ;
     694                 : 
     695              15 :    cout << "Length = " << len << endl ;
     696              15 :    cout << "Max = " << max << endl ;
     697              15 :    cout << "Release = " << (rel ? "true" : "false") << endl ;
     698              15 :    cout << "Buffer = " << BufferType(buffer) << endl ;
     699                 : 
     700              15 :    if (buffer != buffer2)
     701                 :    {
     702               0 :       cout << "ERROR : get_buffer(void) != get_buffer(orphan = false) !!!" ;
     703                 :    }
     704                 : 
     705              81 :    for (i = 0 ; i < len ; i++)
     706                 :    {
     707             132 :       cout << " - [" << i << "]=" << (s[i]) << endl ;
     708                 :    }
     709                 : 
     710                 :    cout << endl ;
     711                 : }
     712                 : 
     713               1 : void TestUShortSeq(void)
     714                 : {
     715               1 :    cout << "========== Testing CORBAUShortSeq ==========" << endl << endl ;
     716                 : 
     717               1 :    CORBAUShortSeq s1 ;
     718               1 :    DumpUShortSeq(s1, "Sequence s1()") ;
     719                 : 
     720               1 :    CORBAUShortSeq s2(12) ;
     721               1 :    s2[0] = 100 ;
     722               1 :    s2[1] = 101 ;
     723               1 :    s2[2] = 102 ;
     724               1 :    s2[3] = 103 ;
     725               1 :    s2[4] = 104 ;
     726               1 :    s2[5] = 105 ;
     727               1 :    s2[6] = 106 ;
     728               1 :    s2[7] = 107 ;
     729               1 :    s2[8] = 108 ;
     730               1 :    s2[9] = 109 ;
     731               1 :    s2[10] = 110;
     732               1 :    s2[11] = 111 ;
     733               1 :    DumpUShortSeq(s2, "Sequence s2(12)") ;
     734                 : 
     735                 :    CORBA::UShort data_s3[] =
     736                 :    {
     737                 :       201,
     738                 :       202,
     739                 :       203,
     740                 :       204
     741               1 :    } ;
     742                 : 
     743               1 :    CORBAUShortSeq s3(4UL, 4UL, & data_s3 [0], false) ;
     744               1 :    DumpUShortSeq(s3, "Sequence s3(4, 4, stack data, false)") ;
     745                 : 
     746               1 :    CORBA::UShort *data_s4 = new CORBA::UShort[4] ;
     747               1 :    data_s4[0] = 65000 ;
     748               1 :    data_s4[1] = 65001 ;
     749               1 :    data_s4[2] = 65002 ;
     750               1 :    data_s4[3] = 65003 ;
     751                 : 
     752               1 :    CORBAUShortSeq s4(4UL, 4UL, data_s4, false) ;
     753               1 :    DumpUShortSeq(s4, "Sequence s4(4, 4, heap data, false)") ;
     754                 : 
     755               1 :    CORBAUShortSeq s5(s1) ;
     756               1 :    DumpUShortSeq(s5, "Sequence s5(s1)") ;
     757                 : 
     758               1 :    CORBAUShortSeq s6(s2) ;
     759               1 :    DumpUShortSeq(s6, "Sequence s6(s2)") ;
     760                 : 
     761               1 :    s1 = s3 ;
     762               1 :    DumpUShortSeq(s1, "s1 = s3") ;
     763                 : 
     764               1 :    s2 = s4 ;
     765               1 :    DumpUShortSeq(s2, "s2 = s4") ;
     766                 : 
     767               1 :    s1.length(8) ;
     768               1 :    s1[4] = 65535 ;
     769               1 :    s1[5] = 65535 ;
     770               1 :    s1[6] = 65535 ;
     771               1 :    s1[7] = 65535 ;
     772               1 :    DumpUShortSeq(s1, "s1.length(8)") ;
     773                 : 
     774               1 :    s2.length(8) ;
     775               1 :    DumpUShortSeq(s2, "s2.length(8)") ;
     776                 : 
     777               1 :    CORBA::UShort& c = s3[1] ;
     778               1 :    c = 0 ;
     779               1 :    DumpUShortSeq(s3, "hacking s3[1]=0, still in stack") ;
     780                 : 
     781               1 :    CORBA::UShort *buf = s3.get_buffer(true) ;
     782               1 :    DumpUShortSeq(s3, "orphaned s3") ;
     783                 : 
     784               1 :    if (buf != data_s3)
     785                 :    {
     786               0 :       cout << "ERROR : wrong orphaned buffer for s3 !" << endl ;
     787                 :    }
     788                 : 
     789               1 :    s3.replace(4UL, 4UL, data_s4, false) ;
     790               1 :    DumpUShortSeq(s3, "s3 replaced with not owned data") ;
     791                 : 
     792               1 :    s3.replace(2UL, 2UL, data_s4, false) ;
     793               1 :    DumpUShortSeq(s3, "s3 replaced with not owned data, again") ;
     794                 : 
     795               1 :    s4.replace(0UL, 0UL, NULL, false) ;
     796               1 :    DumpUShortSeq(s4, "s4 orphaned the hard way") ;
     797                 : 
     798               1 :    delete [] data_s4 ;
     799                 : }
     800                 : 
     801                 : //=============================================================================
     802                 : // sequence<CORBA::Long>
     803                 : //=============================================================================
     804                 : 
     805              15 : void DumpLongSeq(CORBALongSeq& s, const char* title)
     806                 : {
     807                 :    CORBA::ULong i ;
     808              15 :    CORBA::ULong len = s.length() ;
     809              15 :    CORBA::ULong max = s.maximum() ;
     810              15 :    CORBA::Boolean rel = s.release() ;
     811                 :    const CORBALongSeq& const_s = s ;
     812              15 :    const void *buffer = const_s.get_buffer() ;
     813              15 :    void *buffer2 = s.get_buffer(false) ;
     814                 : 
     815              15 :    cout << title << endl << endl ;
     816                 : 
     817              15 :    cout << "Length = " << len << endl ;
     818              15 :    cout << "Max = " << max << endl ;
     819              15 :    cout << "Release = " << (rel ? "true" : "false") << endl ;
     820              15 :    cout << "Buffer = " << BufferType(buffer) << endl ;
     821                 : 
     822              15 :    if (buffer != buffer2)
     823                 :    {
     824               0 :       cout << "ERROR : get_buffer(void) != get_buffer(orphan = false) !!!" ;
     825                 :    }
     826                 : 
     827              81 :    for (i = 0 ; i < len ; i++)
     828                 :    {
     829             132 :       cout << " - [" << i << "]=" << s[i] << endl ;
     830                 :    }
     831                 : 
     832                 :    cout << endl ;
     833                 : }
     834                 : 
     835               1 : void TestLongSeq(void)
     836                 : {
     837               1 :    cout << "========== Testing CORBALongSeq ==========" << endl << endl ;
     838                 : 
     839               1 :    CORBALongSeq s1 ;
     840               1 :    DumpLongSeq(s1, "Sequence s1()") ;
     841                 : 
     842               1 :    CORBALongSeq s2(12) ;
     843               1 :    s2[0] = 100 ;
     844               1 :    s2[1] = 101 ;
     845               1 :    s2[2] = 102 ;
     846               1 :    s2[3] = 103 ;
     847               1 :    s2[4] = 104 ;
     848               1 :    s2[5] = 105 ;
     849               1 :    s2[6] = 106 ;
     850               1 :    s2[7] = 107 ;
     851               1 :    s2[8] = 108 ;
     852               1 :    s2[9] = 109 ;
     853               1 :    s2[10] = 110;
     854               1 :    s2[11] = 111 ;
     855               1 :    DumpLongSeq(s2, "Sequence s2(12)") ;
     856                 : 
     857                 :    CORBA::Long data_s3[] =
     858                 :    {
     859                 :       201,
     860                 :       202,
     861                 :       203,
     862                 :       204
     863               1 :    } ;
     864                 : 
     865               1 :    CORBALongSeq s3(4UL, 4UL, & data_s3 [0], false) ;
     866               1 :    DumpLongSeq(s3, "Sequence s3(4, 4, stack data, false)") ;
     867                 : 
     868               1 :    CORBA::Long *data_s4 = new CORBA::Long[4] ;
     869               1 :    data_s4[0] = -11 ;
     870               1 :    data_s4[1] = -22 ;
     871               1 :    data_s4[2] = -33 ;
     872               1 :    data_s4[3] = -44 ;
     873                 : 
     874               1 :    CORBALongSeq s4(4UL, 4UL, data_s4, false) ;
     875               1 :    DumpLongSeq(s4, "Sequence s4(4, 4, heap data, false)") ;
     876                 : 
     877               1 :    CORBALongSeq s5(s1) ;
     878               1 :    DumpLongSeq(s5, "Sequence s5(s1)") ;
     879                 : 
     880               1 :    CORBALongSeq s6(s2) ;
     881               1 :    DumpLongSeq(s6, "Sequence s6(s2)") ;
     882                 : 
     883               1 :    s1 = s3 ;
     884               1 :    DumpLongSeq(s1, "s1 = s3") ;
     885                 : 
     886               1 :    s2 = s4 ;
     887               1 :    DumpLongSeq(s2, "s2 = s4") ;
     888                 : 
     889               1 :    s1.length(8) ;
     890               1 :    s1[4] = 2147483647 ;
     891               1 :    s1[5] = 2147483647 ;
     892               1 :    s1[6] = 2147483647 ;
     893               1 :    s1[7] = 2147483647 ;
     894               1 :    DumpLongSeq(s1, "s1.length(8)") ;
     895                 : 
     896               1 :    s2.length(8) ;
     897               1 :    DumpLongSeq(s2, "s2.length(8)") ;
     898                 : 
     899               1 :    CORBA::Long& c = s3[1] ;
     900               1 :    c = -2147483647L -1L ;
     901               1 :    DumpLongSeq(s3, "hacking s3[1]=-2147483648, still in stack") ;
     902                 : 
     903               1 :    CORBA::Long *buf = s3.get_buffer(true) ;
     904               1 :    DumpLongSeq(s3, "orphaned s3") ;
     905                 : 
     906               1 :    if (buf != data_s3)
     907                 :    {
     908               0 :       cout << "ERROR : wrong orphaned buffer for s3 !" << endl ;
     909                 :    }
     910                 : 
     911               1 :    s3.replace(4UL, 4UL, data_s4, false) ;
     912               1 :    DumpLongSeq(s3, "s3 replaced with not owned data") ;
     913                 : 
     914               1 :    s3.replace(2UL, 2UL, data_s4, false) ;
     915               1 :    DumpLongSeq(s3, "s3 replaced with not owned data, again") ;
     916                 : 
     917               1 :    s4.replace(0UL, 0UL, NULL, false) ;
     918               1 :    DumpLongSeq(s4, "s4 orphaned the hard way") ;
     919                 : 
     920               1 :    delete [] data_s4 ;
     921                 : }
     922                 : 
     923                 : //=============================================================================
     924                 : // sequence<CORBA::ULong>
     925                 : //=============================================================================
     926                 : 
     927              15 : void DumpULongSeq(CORBAULongSeq& s, const char* title)
     928                 : {
     929                 :    CORBA::ULong i ;
     930              15 :    CORBA::ULong len = s.length() ;
     931              15 :    CORBA::ULong max = s.maximum() ;
     932              15 :    CORBA::Boolean rel = s.release() ;
     933                 :    const CORBAULongSeq& const_s = s ;
     934              15 :    const void *buffer = const_s.get_buffer() ;
     935              15 :    void *buffer2 = s.get_buffer(false) ;
     936                 : 
     937              15 :    cout << title << endl << endl ;
     938                 : 
     939              15 :    cout << "Length = " << len << endl ;
     940              15 :    cout << "Max = " << max << endl ;
     941              15 :    cout << "Release = " << (rel ? "true" : "false") << endl ;
     942              15 :    cout << "Buffer = " << BufferType(buffer) << endl ;
     943                 : 
     944              15 :    if (buffer != buffer2)
     945                 :    {
     946               0 :       cout << "ERROR : get_buffer(void) != get_buffer(orphan = false) !!!" ;
     947                 :    }
     948                 : 
     949              81 :    for (i = 0 ; i < len ; i++)
     950                 :    {
     951             132 :       cout << " - [" << i << "]=" << (s[i]) << endl ;
     952                 :    }
     953                 : 
     954                 :    cout << endl ;
     955                 : }
     956                 : 
     957               1 : void TestULongSeq(void)
     958                 : {
     959               1 :    cout << "========== Testing CORBAULongSeq ==========" << endl << endl ;
     960                 : 
     961               1 :    CORBAULongSeq s1 ;
     962               1 :    DumpULongSeq(s1, "Sequence s1()") ;
     963                 : 
     964               1 :    CORBAULongSeq s2(12) ;
     965               1 :    s2[0] = 100 ;
     966               1 :    s2[1] = 101 ;
     967               1 :    s2[2] = 102 ;
     968               1 :    s2[3] = 103 ;
     969               1 :    s2[4] = 104 ;
     970               1 :    s2[5] = 105 ;
     971               1 :    s2[6] = 106 ;
     972               1 :    s2[7] = 107 ;
     973               1 :    s2[8] = 108 ;
     974               1 :    s2[9] = 109 ;
     975               1 :    s2[10] = 110;
     976               1 :    s2[11] = 111 ;
     977               1 :    DumpULongSeq(s2, "Sequence s2(12)") ;
     978                 : 
     979                 :    CORBA::ULong data_s3[] =
     980                 :    {
     981                 :       201,
     982                 :       202,
     983                 :       203,
     984                 :       204
     985               1 :    } ;
     986                 : 
     987               1 :    CORBAULongSeq s3(4UL, 4UL, & data_s3 [0], false) ;
     988               1 :    DumpULongSeq(s3, "Sequence s3(4, 4, stack data, false)") ;
     989                 : 
     990               1 :    CORBA::ULong *data_s4 = new CORBA::ULong[4] ;
     991               1 :    data_s4[0] = 65000 ;
     992               1 :    data_s4[1] = 65001 ;
     993               1 :    data_s4[2] = 65002 ;
     994               1 :    data_s4[3] = 65003 ;
     995                 : 
     996               1 :    CORBAULongSeq s4(4UL, 4UL, data_s4, false) ;
     997               1 :    DumpULongSeq(s4, "Sequence s4(4, 4, heap data, false)") ;
     998                 : 
     999               1 :    CORBAULongSeq s5(s1) ;
    1000               1 :    DumpULongSeq(s5, "Sequence s5(s1)") ;
    1001                 : 
    1002               1 :    CORBAULongSeq s6(s2) ;
    1003               1 :    DumpULongSeq(s6, "Sequence s6(s2)") ;
    1004                 : 
    1005               1 :    s1 = s3 ;
    1006               1 :    DumpULongSeq(s1, "s1 = s3") ;
    1007                 : 
    1008               1 :    s2 = s4 ;
    1009               1 :    DumpULongSeq(s2, "s2 = s4") ;
    1010                 : 
    1011               1 :    s1.length(8) ;
    1012               1 :    s1[4] = 4294967295UL ;
    1013               1 :    s1[5] = 4294967295UL ;
    1014               1 :    s1[6] = 4294967295UL ;
    1015               1 :    s1[7] = 4294967295UL ;
    1016               1 :    DumpULongSeq(s1, "s1.length(8)") ;
    1017                 : 
    1018               1 :    s2.length(8) ;
    1019               1 :    DumpULongSeq(s2, "s2.length(8)") ;
    1020                 : 
    1021               1 :    CORBA::ULong& c = s3[1] ;
    1022               1 :    c = 0 ;
    1023               1 :    DumpULongSeq(s3, "hacking s3[1]=0, still in stack") ;
    1024                 : 
    1025               1 :    CORBA::ULong *buf = s3.get_buffer(true) ;
    1026               1 :    DumpULongSeq(s3, "orphaned s3") ;
    1027                 : 
    1028               1 :    if (buf != data_s3)
    1029                 :    {
    1030               0 :       cout << "ERROR : wrong orphaned buffer for s3 !" << endl ;
    1031                 :    }
    1032                 : 
    1033               1 :    s3.replace(4UL, 4UL, data_s4, false) ;
    1034               1 :    DumpULongSeq(s3, "s3 replaced with not owned data") ;
    1035                 : 
    1036               1 :    s3.replace(2UL, 2UL, data_s4, false) ;
    1037               1 :    DumpULongSeq(s3, "s3 replaced with not owned data, again") ;
    1038                 : 
    1039               1 :    s4.replace(0UL, 0UL, NULL, false) ;
    1040               1 :    DumpULongSeq(s4, "s4 orphaned the hard way") ;
    1041                 : 
    1042               1 :    delete [] data_s4 ;
    1043                 : }
    1044                 : 
    1045                 : //=============================================================================
    1046                 : // sequence<CORBA::LongLong>
    1047                 : //=============================================================================
    1048                 : 
    1049              15 : void DumpLongLongSeq(CORBALongLongSeq& s, const char* title)
    1050                 : {
    1051                 :    CORBA::ULong i ;
    1052              15 :    CORBA::ULong len = s.length() ;
    1053              15 :    CORBA::ULong max = s.maximum() ;
    1054              15 :    CORBA::Boolean rel = s.release() ;
    1055                 :    const CORBALongLongSeq& const_s = s ;
    1056              15 :    const void *buffer = const_s.get_buffer() ;
    1057              15 :    void *buffer2 = s.get_buffer(false) ;
    1058                 : 
    1059              15 :    cout << title << endl << endl ;
    1060                 : 
    1061              15 :    cout << "Length = " << len << endl ;
    1062              15 :    cout << "Max = " << max << endl ;
    1063              15 :    cout << "Release = " << (rel ? "true" : "false") << endl ;
    1064              15 :    cout << "Buffer = " << BufferType(buffer) << endl ;
    1065                 : 
    1066              15 :    if (buffer != buffer2)
    1067                 :    {
    1068               0 :       cout << "ERROR : get_buffer(void) != get_buffer(orphan = false) !!!" ;
    1069                 :    }
    1070                 : 
    1071                 :    CORBA::LongLong v ;
    1072                 :    CORBA::Long vh, vl ;
    1073                 :    char buf[255] ;
    1074                 : 
    1075              81 :    for (i = 0 ; i < len ; i++)
    1076                 :    {
    1077              66 :       v = s[i] ;
    1078                 :       vh = v >> 32 ;
    1079                 :       vl = v & 0xFFFFFFFFL ;
    1080              66 :       sprintf(buf, "0x%08x%08x", vh, vl) ;
    1081             132 :       cout << " - [" << i << "]=" << buf << endl ;
    1082                 :    }
    1083                 : 
    1084                 :    cout << endl ;
    1085                 : }
    1086                 : 
    1087               1 : void TestLongLongSeq(void)
    1088                 : {
    1089               1 :    cout << "========== Testing CORBALongLongSeq ==========" << endl << endl ;
    1090                 : 
    1091               1 :    CORBALongLongSeq s1 ;
    1092               1 :    DumpLongLongSeq(s1, "Sequence s1()") ;
    1093                 : 
    1094               1 :    CORBALongLongSeq s2(12) ;
    1095               1 :    s2[0] = 0x100 ;
    1096               1 :    s2[1] = 0x101 ;
    1097               1 :    s2[2] = 0x102 ;
    1098               1 :    s2[3] = 0x103 ;
    1099               1 :    s2[4] = 0x104 ;
    1100               1 :    s2[5] = 0x105 ;
    1101               1 :    s2[6] = 0x106 ;
    1102               1 :    s2[7] = 0x107 ;
    1103               1 :    s2[8] = 0x108 ;
    1104               1 :    s2[9] = 0x109 ;
    1105               1 :    s2[10] = 0x110;
    1106               1 :    s2[11] = 0x111 ;
    1107               1 :    DumpLongLongSeq(s2, "Sequence s2(12)") ;
    1108                 : 
    1109                 :    CORBA::LongLong data_s3[] =
    1110                 :    {
    1111                 :       0x201,
    1112                 :       0x202,
    1113                 :       0x203,
    1114                 :       0x204
    1115               1 :    } ;
    1116                 : 
    1117               1 :    CORBALongLongSeq s3(4UL, 4UL, & data_s3 [0], false) ;
    1118               1 :    DumpLongLongSeq(s3, "Sequence s3(4, 4, stack data, false)") ;
    1119                 : 
    1120               1 :    CORBA::LongLong *data_s4 = new CORBA::LongLong[4] ;
    1121               1 :    data_s4[0] = -0x11 ;
    1122               1 :    data_s4[1] = -0x22 ;
    1123               1 :    data_s4[2] = -0x33 ;
    1124               1 :    data_s4[3] = -0x44 ;
    1125                 : 
    1126               1 :    CORBALongLongSeq s4(4UL, 4UL, data_s4, false) ;
    1127               1 :    DumpLongLongSeq(s4, "Sequence s4(4, 4, heap data, false)") ;
    1128                 : 
    1129               1 :    CORBALongLongSeq s5(s1) ;
    1130               1 :    DumpLongLongSeq(s5, "Sequence s5(s1)") ;
    1131                 : 
    1132               1 :    CORBALongLongSeq s6(s2) ;
    1133               1 :    DumpLongLongSeq(s6, "Sequence s6(s2)") ;
    1134                 : 
    1135               1 :    s1 = s3 ;
    1136               1 :    DumpLongLongSeq(s1, "s1 = s3") ;
    1137                 : 
    1138               1 :    s2 = s4 ;
    1139               1 :    DumpLongLongSeq(s2, "s2 = s4") ;
    1140                 : 
    1141               1 :    s1.length(8) ;
    1142                 :    // long long may not be supported natively, can not express s64 constants
    1143               1 :    s1[4] = 0x7FFFFFFFL ;
    1144               1 :    s1[4] <<= 32 ;
    1145               1 :    s1[4] += 0xFFFFFFFFL ;
    1146                 : 
    1147               1 :    s1[5] = 0x7FFFFFFFL ;
    1148               1 :    s1[5] <<= 32 ;
    1149               1 :    s1[5] += 0xFFFFFFFFL ;
    1150                 : 
    1151               1 :    s1[6] = 0x7FFFFFFFL ;
    1152               1 :    s1[6] <<= 32 ;
    1153               1 :    s1[6] += 0xFFFFFFFFL ;
    1154                 : 
    1155               1 :    s1[7] = 0x7FFFFFFFL ;
    1156               1 :    s1[7] <<= 32 ;
    1157               1 :    s1[7] += 0xFFFFFFFFL ;
    1158                 : 
    1159               1 :    DumpLongLongSeq(s1, "s1.length(8)") ;
    1160                 : 
    1161               1 :    s2.length(8) ;
    1162               1 :    DumpLongLongSeq(s2, "s2.length(8)") ;
    1163                 : 
    1164               1 :    CORBA::LongLong& c = s3[1] ;
    1165               1 :    c = ( - 0x80000000L ) ;
    1166               1 :    c <<= 32 ;
    1167               1 :    DumpLongLongSeq(s3, "hacking s3[1]=-8000000000000000, still in stack") ;
    1168                 : 
    1169               1 :    CORBA::LongLong *buf = s3.get_buffer(true) ;
    1170               1 :    DumpLongLongSeq(s3, "orphaned s3") ;
    1171                 : 
    1172               1 :    if (buf != data_s3)
    1173                 :    {
    1174               0 :       cout << "ERROR : wrong orphaned buffer for s3 !" << endl ;
    1175                 :    }
    1176                 : 
    1177               1 :    s3.replace(4UL, 4UL, data_s4, false) ;
    1178               1 :    DumpLongLongSeq(s3, "s3 replaced with not owned data") ;
    1179                 : 
    1180               1 :    s3.replace(2UL, 2UL, data_s4, false) ;
    1181               1 :    DumpLongLongSeq(s3, "s3 replaced with not owned data, again") ;
    1182                 : 
    1183               1 :    s4.replace(0UL, 0UL, NULL, false) ;
    1184               1 :    DumpLongLongSeq(s4, "s4 orphaned the hard way") ;
    1185                 : 
    1186               1 :    delete [] data_s4 ;
    1187                 : }
    1188                 : 
    1189                 : //=============================================================================
    1190                 : // sequence<CORBA::ULongLong>
    1191                 : //=============================================================================
    1192                 : 
    1193              15 : void DumpULongLongSeq(CORBAULongLongSeq& s, const char* title)
    1194                 : {
    1195                 :    CORBA::ULong i ;
    1196              15 :    CORBA::ULong len = s.length() ;
    1197              15 :    CORBA::ULong max = s.maximum() ;
    1198              15 :    CORBA::Boolean rel = s.release() ;
    1199                 :    const CORBAULongLongSeq& const_s = s ;
    1200              15 :    const void *buffer = const_s.get_buffer() ;
    1201              15 :    void *buffer2 = s.get_buffer(false) ;
    1202                 : 
    1203              15 :    cout << title << endl << endl ;
    1204                 : 
    1205              15 :    cout << "Length = " << len << endl ;
    1206              15 :    cout << "Max = " << max << endl ;
    1207              15 :    cout << "Release = " << (rel ? "true" : "false") << endl ;
    1208              15 :    cout << "Buffer = " << BufferType(buffer) << endl ;
    1209                 : 
    1210              15 :    if (buffer != buffer2)
    1211                 :    {
    1212               0 :       cout << "ERROR : get_buffer(void) != get_buffer(orphan = false) !!!" ;
    1213                 :    }
    1214                 : 
    1215                 :    CORBA::ULongLong v ;
    1216                 :    CORBA::ULong vh, vl ;
    1217                 :    char buf[255] ;
    1218                 : 
    1219              81 :    for (i = 0 ; i < len ; i++)
    1220                 :    {
    1221              66 :       v = s[i] ;
    1222                 :       vh = v >> 32 ;
    1223                 :       vl = v & 0xFFFFFFFFL ;
    1224              66 :       sprintf(buf, "0x%08x%08x", vh, vl) ;
    1225             132 :       cout << " - [" << i << "]=" << buf << endl ;
    1226                 :    }
    1227                 : 
    1228                 :    cout << endl ;
    1229                 : }
    1230                 : 
    1231               1 : void TestULongLongSeq(void)
    1232                 : {
    1233               1 :    cout << "========== Testing CORBAULongLongSeq ==========" << endl << endl ;
    1234                 : 
    1235               1 :    CORBAULongLongSeq s1 ;
    1236               1 :    DumpULongLongSeq(s1, "Sequence s1()") ;
    1237                 : 
    1238               1 :    CORBAULongLongSeq s2(12) ;
    1239               1 :    s2[0] = 0x100 ;
    1240               1 :    s2[1] = 0x101 ;
    1241               1 :    s2[2] = 0x102 ;
    1242               1 :    s2[3] = 0x103 ;
    1243               1 :    s2[4] = 0x104 ;
    1244               1 :    s2[5] = 0x105 ;
    1245               1 :    s2[6] = 0x106 ;
    1246               1 :    s2[7] = 0x107 ;
    1247               1 :    s2[8] = 0x108 ;
    1248               1 :    s2[9] = 0x109 ;
    1249               1 :    s2[10] = 0x110;
    1250               1 :    s2[11] = 0x111 ;
    1251               1 :    DumpULongLongSeq(s2, "Sequence s2(12)") ;
    1252                 : 
    1253                 :    CORBA::ULongLong data_s3[] =
    1254                 :    {
    1255                 :       0x201,
    1256                 :       0x202,
    1257                 :       0x203,
    1258                 :       0x204
    1259               1 :    } ;
    1260                 : 
    1261               1 :    CORBAULongLongSeq s3(4UL, 4UL, & data_s3 [0], false) ;
    1262               1 :    DumpULongLongSeq(s3, "Sequence s3(4, 4, stack data, false)") ;
    1263                 : 
    1264               1 :    CORBA::ULongLong *data_s4 = new CORBA::ULongLong[4] ;
    1265               1 :    data_s4[0] = 0x65000 ;
    1266               1 :    data_s4[1] = 0x65001 ;
    1267               1 :    data_s4[2] = 0x65002 ;
    1268               1 :    data_s4[3] = 0x65003 ;
    1269                 : 
    1270               1 :    CORBAULongLongSeq s4(4UL, 4UL, data_s4, false) ;
    1271               1 :    DumpULongLongSeq(s4, "Sequence s4(4, 4, heap data, false)") ;
    1272                 : 
    1273               1 :    CORBAULongLongSeq s5(s1) ;
    1274               1 :    DumpULongLongSeq(s5, "Sequence s5(s1)") ;
    1275                 : 
    1276               1 :    CORBAULongLongSeq s6(s2) ;
    1277               1 :    DumpULongLongSeq(s6, "Sequence s6(s2)") ;
    1278                 : 
    1279               1 :    s1 = s3 ;
    1280               1 :    DumpULongLongSeq(s1, "s1 = s3") ;
    1281                 : 
    1282               1 :    s2 = s4 ;
    1283               1 :    DumpULongLongSeq(s2, "s2 = s4") ;
    1284                 : 
    1285               1 :    s1.length(8) ;
    1286                 :    // long long may not be supported natively, can not express u64 constants
    1287               1 :    s1[4] = 0xFFFFFFFFUL ;
    1288               1 :    s1[4] <<= 32 ;
    1289               1 :    s1[4] += 0xFFFFFFFFUL ;
    1290                 : 
    1291               1 :    s1[5] = 0xFFFFFFFFUL ;
    1292               1 :    s1[5] <<= 32 ;
    1293               1 :    s1[5] += 0xFFFFFFFFUL ;
    1294                 : 
    1295               1 :    s1[6] = 0xFFFFFFFFUL ;
    1296               1 :    s1[6] <<= 32 ;
    1297               1 :    s1[6] += 0xFFFFFFFFUL ;
    1298                 : 
    1299               1 :    s1[7] = 0xFFFFFFFFUL ;
    1300               1 :    s1[7] <<= 32 ;
    1301               1 :    s1[7] += 0xFFFFFFFFUL ;
    1302                 : 
    1303               1 :    DumpULongLongSeq(s1, "s1.length(8)") ;
    1304                 : 
    1305               1 :    s2.length(8) ;
    1306               1 :    DumpULongLongSeq(s2, "s2.length(8)") ;
    1307                 : 
    1308               1 :    CORBA::ULongLong& c = s3[1] ;
    1309               1 :    c = 0 ;
    1310               1 :    DumpULongLongSeq(s3, "hacking s3[1]=0, still in stack") ;
    1311                 : 
    1312               1 :    CORBA::ULongLong *buf = s3.get_buffer(true) ;
    1313               1 :    DumpULongLongSeq(s3, "orphaned s3") ;
    1314                 : 
    1315               1 :    if (buf != data_s3)
    1316                 :    {
    1317               0 :       cout << "ERROR : wrong orphaned buffer for s3 !" << endl ;
    1318                 :    }
    1319                 : 
    1320               1 :    s3.replace(4UL, 4UL, data_s4, false) ;
    1321               1 :    DumpULongLongSeq(s3, "s3 replaced with not owned data") ;
    1322                 : 
    1323               1 :    s3.replace(2UL, 2UL, data_s4, false) ;
    1324               1 :    DumpULongLongSeq(s3, "s3 replaced with not owned data, again") ;
    1325                 : 
    1326               1 :    s4.replace(0UL, 0UL, NULL, false) ;
    1327               1 :    DumpULongLongSeq(s4, "s4 orphaned the hard way") ;
    1328                 : 
    1329               1 :    delete [] data_s4 ;
    1330                 : }
    1331                 : 
    1332                 : //=============================================================================
    1333                 : // sequence<CORBA::Float>
    1334                 : //=============================================================================
    1335                 : 
    1336              15 : void DumpFloatSeq(CORBAFloatSeq& s, const char* title)
    1337                 : {
    1338                 :    CORBA::ULong i ;
    1339              15 :    CORBA::ULong len = s.length() ;
    1340              15 :    CORBA::ULong max = s.maximum() ;
    1341              15 :    CORBA::Boolean rel = s.release() ;
    1342                 :    const CORBAFloatSeq& const_s = s ;
    1343              15 :    const void *buffer = const_s.get_buffer() ;
    1344              15 :    void *buffer2 = s.get_buffer(false) ;
    1345                 : 
    1346              15 :    cout << title << endl << endl ;
    1347                 : 
    1348              15 :    cout << "Length = " << len << endl ;
    1349              15 :    cout << "Max = " << max << endl ;
    1350              15 :    cout << "Release = " << (rel ? "true" : "false") << endl ;
    1351              15 :    cout << "Buffer = " << BufferType(buffer) << endl ;
    1352                 : 
    1353              15 :    if (buffer != buffer2)
    1354                 :    {
    1355               0 :       cout << "ERROR : get_buffer(void) != get_buffer(orphan = false) !!!" ;
    1356                 :    }
    1357                 : 
    1358              81 :    for (i = 0 ; i < len ; i++)
    1359                 :    {
    1360             132 :       cout << " - [" << i << "]=" << s[i] << endl ;
    1361                 :    }
    1362                 : 
    1363                 :    cout << endl ;
    1364                 : }
    1365                 : 
    1366               1 : void TestFloatSeq(void)
    1367                 : {
    1368               1 :    cout << "========== Testing CORBAFloatSeq ==========" << endl << endl ;
    1369                 : 
    1370               1 :    CORBAFloatSeq s1 ;
    1371               1 :    DumpFloatSeq(s1, "Sequence s1()") ;
    1372                 : 
    1373               1 :    CORBAFloatSeq s2(12) ;
    1374               1 :    s2[0] = 1.1E1 ;
    1375               1 :    s2[1] = 2.2E2 ;
    1376               1 :    s2[2] = 3.3E3 ;
    1377               1 :    s2[3] = 4.4E4 ;
    1378               1 :    s2[4] = 5.5E5 ;
    1379               1 :    s2[5] = 6.6E6 ;
    1380               1 :    s2[6] = 7.7E7 ;
    1381               1 :    s2[7] = 8.8E8 ;
    1382               1 :    s2[8] = 9.9E9 ;
    1383               1 :    s2[9] = 12.12 ;
    1384               1 :    s2[10] = 3.1415 ;
    1385               1 :    s2[11] = 1.0E-15 ;
    1386               1 :    DumpFloatSeq(s2, "Sequence s2(12)") ;
    1387                 : 
    1388                 :    CORBA::Float data_s3[] =
    1389                 :    {
    1390                 :       9.0E-12,
    1391                 :       8.0E-13,
    1392                 :       7.0E-14,
    1393                 :       6.0E-15
    1394               1 :    } ;
    1395                 : 
    1396               1 :    CORBAFloatSeq s3(4UL, 4UL, & data_s3 [0], false) ;
    1397               1 :    DumpFloatSeq(s3, "Sequence s3(4, 4, stack data, false)") ;
    1398                 : 
    1399               1 :    CORBA::Float *data_s4 = new CORBA::Float[4] ;
    1400               1 :    data_s4[0] = 9.99999E34 ;
    1401               1 :    data_s4[1] = 9.99999E34 ;
    1402               1 :    data_s4[2] = 9.99999E34 ;
    1403               1 :    data_s4[3] = 9.99999E34 ;
    1404                 : 
    1405               1 :    CORBAFloatSeq s4(4UL, 4UL, data_s4, false) ;
    1406               1 :    DumpFloatSeq(s4, "Sequence s4(4, 4, heap data, false)") ;
    1407                 : 
    1408               1 :    CORBAFloatSeq s5(s1) ;
    1409               1 :    DumpFloatSeq(s5, "Sequence s5(s1)") ;
    1410                 : 
    1411               1 :    CORBAFloatSeq s6(s2) ;
    1412               1 :    DumpFloatSeq(s6, "Sequence s6(s2)") ;
    1413                 : 
    1414               1 :    s1 = s3 ;
    1415               1 :    DumpFloatSeq(s1, "s1 = s3") ;
    1416                 : 
    1417               1 :    s2 = s4 ;
    1418               1 :    DumpFloatSeq(s2, "s2 = s4") ;
    1419                 : 
    1420               1 :    s1.length(8) ;
    1421               1 :    s1[4] = 0.0 ;
    1422               1 :    s1[5] = 0.0 ;
    1423               1 :    s1[6] = 0.0 ;
    1424               1 :    s1[7] = 0.0 ;
    1425               1 :    DumpFloatSeq(s1, "s1.length(8)") ;
    1426                 : 
    1427               1 :    s2.length(8) ;
    1428               1 :    DumpFloatSeq(s2, "s2.length(8)") ;
    1429                 : 
    1430               1 :    CORBA::Float& c = s3[1] ;
    1431               1 :    c = 0.0 ;
    1432               1 :    DumpFloatSeq(s3, "hacking s3[1]=0, still in stack") ;
    1433                 : 
    1434               1 :    CORBA::Float *buf = s3.get_buffer(true) ;
    1435               1 :    DumpFloatSeq(s3, "orphaned s3") ;
    1436                 : 
    1437               1 :    if (buf != data_s3)
    1438                 :    {
    1439               0 :       cout << "ERROR : wrong orphaned buffer for s3 !" << endl ;
    1440                 :    }
    1441                 : 
    1442               1 :    s3.replace(4UL, 4UL, data_s4, false) ;
    1443               1 :    DumpFloatSeq(s3, "s3 replaced with not owned data") ;
    1444                 : 
    1445               1 :    s3.replace(2UL, 2UL, data_s4, false) ;
    1446               1 :    DumpFloatSeq(s3, "s3 replaced with not owned data, again") ;
    1447                 : 
    1448               1 :    s4.replace(0UL, 0UL, NULL, false) ;
    1449               1 :    DumpFloatSeq(s4, "s4 orphaned the hard way") ;
    1450                 : 
    1451               1 :    delete [] data_s4 ;
    1452                 : }
    1453                 : 
    1454                 : //=============================================================================
    1455                 : // sequence<CORBA::Double>
    1456                 : //=============================================================================
    1457                 : 
    1458              15 : void DumpDoubleSeq(CORBADoubleSeq& s, const char* title)
    1459                 : {
    1460                 :    CORBA::ULong i ;
    1461              15 :    CORBA::ULong len = s.length() ;
    1462              15 :    CORBA::ULong max = s.maximum() ;
    1463              15 :    CORBA::Boolean rel = s.release() ;
    1464                 :    const CORBADoubleSeq& const_s = s ;
    1465              15 :    const void *buffer = const_s.get_buffer() ;
    1466              15 :    void *buffer2 = s.get_buffer(false) ;
    1467                 : 
    1468              15 :    cout << title << endl << endl ;
    1469                 : 
    1470              15 :    cout << "Length = " << len << endl ;
    1471              15 :    cout << "Max = " << max << endl ;
    1472              15 :    cout << "Release = " << (rel ? "true" : "false") << endl ;
    1473              15 :    cout << "Buffer = " << BufferType(buffer) << endl ;
    1474                 : 
    1475              15 :    if (buffer != buffer2)
    1476                 :    {
    1477               0 :       cout << "ERROR : get_buffer(void) != get_buffer(orphan = false) !!!" ;
    1478                 :    }
    1479                 : 
    1480              81 :    for (i = 0 ; i < len ; i++)
    1481                 :    {
    1482             132 :       cout << " - [" << i << "]=" << s[i] << endl ;
    1483                 :    }
    1484                 : 
    1485                 :    cout << endl ;
    1486                 : }
    1487                 : 
    1488               1 : void TestDoubleSeq(void)
    1489                 : {
    1490               1 :    cout << "========== Testing CORBADoubleSeq ==========" << endl << endl ;
    1491                 : 
    1492               1 :    CORBADoubleSeq s1 ;
    1493               1 :    DumpDoubleSeq(s1, "Sequence s1()") ;
    1494                 : 
    1495               1 :    CORBADoubleSeq s2(12) ;
    1496               1 :    s2[0] = 1.1E1 ;
    1497               1 :    s2[1] = 2.2E2 ;
    1498               1 :    s2[2] = 3.3E3 ;
    1499               1 :    s2[3] = 4.4E4 ;
    1500               1 :    s2[4] = 5.5E5 ;
    1501               1 :    s2[5] = 6.6E6 ;
    1502               1 :    s2[6] = 7.7E7 ;
    1503               1 :    s2[7] = 8.8E8 ;
    1504               1 :    s2[8] = 9.9E9 ;
    1505               1 :    s2[9] = 12.12 ;
    1506               1 :    s2[10] = 3.1415 ;
    1507               1 :    s2[11] = 1.0E-15 ;
    1508               1 :    DumpDoubleSeq(s2, "Sequence s2(12)") ;
    1509                 : 
    1510                 :    CORBA::Double data_s3[] =
    1511                 :    {
    1512                 :       9.0E-12,
    1513                 :       8.0E-13,
    1514                 :       7.0E-14,
    1515                 :       6.0E-15
    1516               1 :    } ;
    1517                 : 
    1518               1 :    CORBADoubleSeq s3(4UL, 4UL, & data_s3 [0], false) ;
    1519               1 :    DumpDoubleSeq(s3, "Sequence s3(4, 4, stack data, false)") ;
    1520                 : 
    1521               1 :    CORBA::Double *data_s4 = new CORBA::Double[4] ;
    1522               1 :    data_s4[0] = 9.99999E34 ;
    1523               1 :    data_s4[1] = 9.99999E34 ;
    1524               1 :    data_s4[2] = 9.99999E34 ;
    1525               1 :    data_s4[3] = 9.99999E34 ;
    1526                 : 
    1527               1 :    CORBADoubleSeq s4(4UL, 4UL, data_s4, false) ;
    1528               1 :    DumpDoubleSeq(s4, "Sequence s4(4, 4, heap data, false)") ;
    1529                 : 
    1530               1 :    CORBADoubleSeq s5(s1) ;
    1531               1 :    DumpDoubleSeq(s5, "Sequence s5(s1)") ;
    1532                 : 
    1533               1 :    CORBADoubleSeq s6(s2) ;
    1534               1 :    DumpDoubleSeq(s6, "Sequence s6(s2)") ;
    1535                 : 
    1536               1 :    s1 = s3 ;
    1537               1 :    DumpDoubleSeq(s1, "s1 = s3") ;
    1538                 : 
    1539               1 :    s2 = s4 ;
    1540               1 :    DumpDoubleSeq(s2, "s2 = s4") ;
    1541                 : 
    1542               1 :    s1.length(8) ;
    1543               1 :    s1[4] = 0.0 ;
    1544               1 :    s1[5] = 0.0 ;
    1545               1 :    s1[6] = 0.0 ;
    1546               1 :    s1[7] = 0.0 ;
    1547               1 :    DumpDoubleSeq(s1, "s1.length(8)") ;
    1548                 : 
    1549               1 :    s2.length(8) ;
    1550               1 :    DumpDoubleSeq(s2, "s2.length(8)") ;
    1551                 : 
    1552               1 :    CORBA::Double& c = s3[1] ;
    1553               1 :    c = 0.0 ;
    1554               1 :    DumpDoubleSeq(s3, "hacking s3[1]=0, still in stack") ;
    1555                 : 
    1556               1 :    CORBA::Double *buf = s3.get_buffer(true) ;
    1557               1 :    DumpDoubleSeq(s3, "orphaned s3") ;
    1558                 : 
    1559               1 :    if (buf != data_s3)
    1560                 :    {
    1561               0 :       cout << "ERROR : wrong orphaned buffer for s3 !" << endl ;
    1562                 :    }
    1563                 : 
    1564               1 :    s3.replace(4UL, 4UL, data_s4, false) ;
    1565               1 :    DumpDoubleSeq(s3, "s3 replaced with not owned data") ;
    1566                 : 
    1567               1 :    s3.replace(2UL, 2UL, data_s4, false) ;
    1568               1 :    DumpDoubleSeq(s3, "s3 replaced with not owned data, again") ;
    1569                 : 
    1570               1 :    s4.replace(0UL, 0UL, NULL, false) ;
    1571               1 :    DumpDoubleSeq(s4, "s4 orphaned the hard way") ;
    1572                 : 
    1573               1 :    delete [] data_s4 ;
    1574                 : }
    1575                 : 
    1576                 : //=============================================================================
    1577                 : // sequence<CORBA::LongDouble>
    1578                 : //=============================================================================
    1579                 : 
    1580              15 : void DumpLongDoubleSeq(CORBALongDoubleSeq& s, const char* title)
    1581                 : {
    1582                 :    CORBA::ULong i ;
    1583              15 :    CORBA::ULong len = s.length() ;
    1584              15 :    CORBA::ULong max = s.maximum() ;
    1585              15 :    CORBA::Boolean rel = s.release() ;
    1586                 :    const CORBALongDoubleSeq& const_s = s ;
    1587              15 :    const void *buffer = const_s.get_buffer() ;
    1588              15 :    void *buffer2 = s.get_buffer(false) ;
    1589                 : 
    1590              15 :    cout << title << endl << endl ;
    1591                 : 
    1592              15 :    cout << "Length = " << len << endl ;
    1593              15 :    cout << "Max = " << max << endl ;
    1594              15 :    cout << "Release = " << (rel ? "true" : "false") << endl ;
    1595              15 :    cout << "Buffer = " << BufferType(buffer) << endl ;
    1596                 : 
    1597              15 :    if (buffer != buffer2)
    1598                 :    {
    1599               0 :       cout << "ERROR : get_buffer(void) != get_buffer(orphan = false) !!!" ;
    1600                 :    }
    1601                 : 
    1602              81 :    for (i = 0 ; i < len ; i++)
    1603                 :    {
    1604              66 :       long double v = s[i] ;
    1605              66 :       double v2 = v ;
    1606             132 :       cout << " - [" << i << "]=" << v2 << endl ;
    1607                 :    }
    1608                 : 
    1609                 :    cout << endl ;
    1610                 : }
    1611                 : 
    1612               1 : void TestLongDoubleSeq(void)
    1613                 : {
    1614               1 :    cout << "========== Testing CORBALongDoubleSeq ==========" << endl << endl ;
    1615                 : 
    1616               1 :    CORBALongDoubleSeq s1 ;
    1617               1 :    DumpLongDoubleSeq(s1, "Sequence s1()") ;
    1618                 : 
    1619               1 :    CORBALongDoubleSeq s2(12) ;
    1620               1 :    s2[0] = 1.1E1 ;
    1621               1 :    s2[1] = 2.2E2 ;
    1622               1 :    s2[2] = 3.3E3 ;
    1623               1 :    s2[3] = 4.4E4 ;
    1624               1 :    s2[4] = 5.5E5 ;
    1625               1 :    s2[5] = 6.6E6 ;
    1626               1 :    s2[6] = 7.7E7 ;
    1627               1 :    s2[7] = 8.8E8 ;
    1628               1 :    s2[8] = 9.9E9 ;
    1629               1 :    s2[9] = 12.12 ;
    1630               1 :    s2[10] = 3.1415 ;
    1631               1 :    s2[11] = 1.0E-15 ;
    1632               1 :    DumpLongDoubleSeq(s2, "Sequence s2(12)") ;
    1633                 : 
    1634                 :    CORBA::LongDouble data_s3[4] ;
    1635               1 :    data_s3[0] = 9.0E-12 ;
    1636               1 :    data_s3[1] = 8.0E-13 ;
    1637               1 :    data_s3[2] = 7.0E-14 ;
    1638               1 :    data_s3[3] = 6.0E-15 ;
    1639                 : 
    1640               1 :    CORBALongDoubleSeq s3(4UL, 4UL, & data_s3 [0], false) ;
    1641               1 :    DumpLongDoubleSeq(s3, "Sequence s3(4, 4, stack data, false)") ;
    1642                 : 
    1643               1 :    CORBA::LongDouble *data_s4 = new CORBA::LongDouble[4] ;
    1644               1 :    data_s4[0] = 9.99999E34 ;
    1645               1 :    data_s4[1] = 9.99999E34 ;
    1646               1 :    data_s4[2] = 9.99999E34 ;
    1647               1 :    data_s4[3] = 9.99999E34 ;
    1648                 : 
    1649               1 :    CORBALongDoubleSeq s4(4UL, 4UL, data_s4, false) ;
    1650               1 :    DumpLongDoubleSeq(s4, "Sequence s4(4, 4, heap data, false)") ;
    1651                 : 
    1652               1 :    CORBALongDoubleSeq s5(s1) ;
    1653               1 :    DumpLongDoubleSeq(s5, "Sequence s5(s1)") ;
    1654                 : 
    1655               1 :    CORBALongDoubleSeq s6(s2) ;
    1656               1 :    DumpLongDoubleSeq(s6, "Sequence s6(s2)") ;
    1657                 : 
    1658               1 :    s1 = s3 ;
    1659               1 :    DumpLongDoubleSeq(s1, "s1 = s3") ;
    1660                 : 
    1661               1 :    s2 = s4 ;
    1662               1 :    DumpLongDoubleSeq(s2, "s2 = s4") ;
    1663                 : 
    1664               1 :    s1.length(8) ;
    1665               1 :    s1[4] = 0.0 ;
    1666               1 :    s1[5] = 0.0 ;
    1667               1 :    s1[6] = 0.0 ;
    1668               1 :    s1[7] = 0.0 ;
    1669               1 :    DumpLongDoubleSeq(s1, "s1.length(8)") ;
    1670                 : 
    1671               1 :    s2.length(8) ;
    1672               1 :    DumpLongDoubleSeq(s2, "s2.length(8)") ;
    1673                 : 
    1674               1 :    CORBA::LongDouble& c = s3[1] ;
    1675               1 :    c = 0.0 ;
    1676               1 :    DumpLongDoubleSeq(s3, "hacking s3[1]=0, still in stack") ;
    1677                 : 
    1678               1 :    CORBA::LongDouble *buf = s3.get_buffer(true) ;
    1679               1 :    DumpLongDoubleSeq(s3, "orphaned s3") ;
    1680                 : 
    1681               1 :    if (buf != data_s3)
    1682                 :    {
    1683               0 :       cout << "ERROR : wrong orphaned buffer for s3 !" << endl ;
    1684                 :    }
    1685                 : 
    1686               1 :    s3.replace(4UL, 4UL, data_s4, false) ;
    1687               1 :    DumpLongDoubleSeq(s3, "s3 replaced with not owned data") ;
    1688                 : 
    1689               1 :    s3.replace(2UL, 2UL, data_s4, false) ;
    1690               1 :    DumpLongDoubleSeq(s3, "s3 replaced with not owned data, again") ;
    1691                 : 
    1692               1 :    s4.replace(0UL, 0UL, NULL, false) ;
    1693               1 :    DumpLongDoubleSeq(s4, "s4 orphaned the hard way") ;
    1694                 : 
    1695               1 :    delete [] data_s4 ;
    1696                 : }
    1697                 : 
    1698              13 : int main(int argc, char *argv[])
    1699                 : {
    1700                 :    volatile int here ;
    1701              13 :    main_stack = & here ;
    1702              13 :    String menu ;
    1703                 :    char str[256] ;
    1704                 : 
    1705              13 :    FILE *input = fopen(argv[1], "r") ;
    1706              13 :    fscanf(input, "%s", str) ;
    1707              13 :    menu = str ;
    1708                 : 
    1709              13 :    if (menu == "CORBA::Boolean")
    1710                 :    {
    1711               1 :       TestBoolSeq() ;
    1712                 :    }
    1713                 : 
    1714              13 :    if (menu == "CORBA::Char")
    1715                 :    {
    1716               1 :       TestCharSeq() ;
    1717                 :    }
    1718                 : 
    1719              13 :    if (menu == "CORBA::WChar")
    1720                 :    {
    1721               1 :       TestWCharSeq() ;
    1722                 :    }
    1723                 : 
    1724              13 :    if (menu == "CORBA::Octet")
    1725                 :    {
    1726               1 :       TestOctetSeq() ;
    1727                 :    }
    1728                 : 
    1729              13 :    if (menu == "CORBA::Short")
    1730                 :    {
    1731               1 :       TestShortSeq() ;
    1732                 :    }
    1733                 : 
    1734              13 :    if (menu == "CORBA::UShort")
    1735                 :    {
    1736               1 :       TestUShortSeq() ;
    1737                 :    }
    1738                 : 
    1739              13 :    if (menu == "CORBA::Long")
    1740                 :    {
    1741               1 :       TestLongSeq() ;
    1742                 :    }
    1743                 : 
    1744              13 :    if (menu == "CORBA::ULong")
    1745                 :    {
    1746               1 :       TestULongSeq() ;
    1747                 :    }
    1748                 : 
    1749              13 :    if (menu == "CORBA::LongLong")
    1750                 :    {
    1751               1 :       TestLongLongSeq() ;
    1752                 :    }
    1753                 : 
    1754              13 :    if (menu == "CORBA::ULongLong")
    1755                 :    {
    1756               1 :       TestULongLongSeq() ;
    1757                 :    }
    1758                 : 
    1759              13 :    if (menu == "CORBA::Float")
    1760                 :    {
    1761               1 :       TestFloatSeq() ;
    1762                 :    }
    1763                 : 
    1764              13 :    if (menu == "CORBA::Double")
    1765                 :    {
    1766               1 :       TestDoubleSeq() ;
    1767                 :    }
    1768                 : 
    1769              13 :    if (menu == "CORBA::LongDouble")
    1770                 :    {
    1771               1 :       TestLongDoubleSeq() ;
    1772                 :    }
    1773                 : 
    1774                 : 
    1775              13 :    fclose (input) ;
    1776              13 :    return 0L ;
    1777              13 : }
    1778              13 : 

Generated by: LTP GCOV extension version 1.4