00001 #include <UnitTest++.h>
00002 #include "cddefines.h"
00003
00004 namespace {
00005
00006 struct LongIntFixture
00007 {
00008 auto_vec<long> p;
00009 LongIntFixture()
00010 {
00011 p = auto_vec<long>( new long[10] );
00012 for( int i=0; i < 10; ++i )
00013 p[i] = i;
00014 }
00015 ~LongIntFixture() {}
00016 auto_vec<long> myfunc()
00017 {
00018 auto_vec<long> a( new long[10] );
00019 for( int i=0; i < 10; ++i )
00020 a[i] = 2*i;
00021 return a;
00022 }
00023 };
00024
00025 struct MyClassFixture
00026 {
00027 struct Class
00028 {
00029 long n;
00030 Class() { n = 23; }
00031 ~Class() {}
00032 };
00033 auto_vec<Class> p;
00034 MyClassFixture()
00035 {
00036 p = auto_vec<Class>( new Class[10] );
00037 }
00038 ~MyClassFixture() {}
00039 auto_vec<Class> myfunc()
00040 {
00041 auto_vec<Class> a( new Class[10] );
00042 for( int i=0; i < 10; ++i )
00043 a[i].n = i+17;
00044 return a;
00045 }
00046 auto_vec<Class> myfunc2()
00047 {
00048 return auto_vec<Class>();
00049 }
00050 };
00051
00052 TEST_FIXTURE(LongIntFixture,TestConstructBasic)
00053 {
00054
00055 auto_vec<long> q;
00056 CHECK( q.get() == NULL );
00057 q = auto_vec<long>( new long[5] );
00058
00059
00060
00061
00062
00063 auto_vec<long> r( p );
00064 CHECK( p.get() == NULL );
00065 CHECK( r.data() != NULL );
00066
00067 auto_vec<long> t;
00068 t = r;
00069 CHECK( r.get() == NULL );
00070 CHECK( t.data() != NULL );
00071
00072 t = myfunc();
00073
00074 for( int i=0; i < 10; ++i )
00075 CHECK_EQUAL(2*i,t[i]);
00076
00077 auto_vec<long> c( myfunc() );
00078 for( int i=0; i < 10; ++i )
00079 CHECK_EQUAL(2*i,c[i]);
00080 }
00081
00082
00083 TEST_FIXTURE(MyClassFixture,TestConstructClass)
00084 {
00085 auto_vec<Class> q;
00086 CHECK( q.get() == NULL );
00087 q = auto_vec<Class>( new Class[5] );
00088
00089 for( int i=0; i < 5; ++i )
00090 CHECK_EQUAL(23,q[i].n);
00091 auto_vec<Class> r( p );
00092 CHECK( p.get() == NULL );
00093 CHECK( r.data() != NULL );
00094 auto_vec<Class> t;
00095 t = q;
00096 CHECK( q.get() == NULL );
00097 CHECK( t.data() != NULL );
00098 t = myfunc();
00099 for( int i=0; i < 10; ++i )
00100 CHECK_EQUAL(i+17,t[i].n);
00101 auto_vec<Class> a,b,c;
00102 a = b = c = t;
00103 CHECK( b.get() == NULL );
00104 CHECK( c.get() == NULL );
00105 CHECK( t.get() == NULL );
00106 for( int i=0; i < 10; ++i )
00107 CHECK_EQUAL(i+17,a[i].n);
00108 a.reset();
00109 CHECK( a.get() == NULL );
00110 a = myfunc2();
00111 CHECK( a.get() == NULL );
00112 a = auto_vec<Class>();
00113 CHECK( a.get() == NULL );
00114 }
00115
00116 }