00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef WVALUESET_TEST_H
00026 #define WVALUESET_TEST_H
00027
00028 #include <stdint.h>
00029 #include <vector>
00030
00031 #include <cxxtest/TestSuite.h>
00032
00033 #include "../WValueSet.h"
00034 #include "../WDataHandlerEnums.h"
00035
00036
00037
00038
00039 class WValueSetTest : public CxxTest::TestSuite
00040 {
00041 public:
00042
00043
00044
00045 void testInstantiation( void )
00046 {
00047 double a[2] = { 0.0, 3.1415 };
00048 const boost::shared_ptr< std::vector< double > > v =
00049 boost::shared_ptr< std::vector< double > >(
00050 new std::vector< double >( a, a + sizeof( a ) / sizeof( double ) ) );
00051 TS_ASSERT_THROWS_NOTHING( WValueSet< double > valueSet( 0, 1, v, W_DT_DOUBLE ) );
00052 }
00053
00054
00055
00056
00057 void testGetNumberOfValues( void )
00058 {
00059 int a[4] = { 0, -5, 1, 2 };
00060 const boost::shared_ptr< std::vector< int8_t > > v =
00061 boost::shared_ptr< std::vector< int8_t > >(
00062 new std::vector< int8_t >( a, a + sizeof( a ) / sizeof( int ) ) );
00063 WValueSet< int8_t > first( 0, 1, v, W_DT_INT8 );
00064 TS_ASSERT_EQUALS( first.size(), 4 );
00065 WValueSet< int8_t > second( 1, 2, v, W_DT_INT8 );
00066 TS_ASSERT_EQUALS( second.size(), 2 );
00067 WValueSet< int8_t > third( 2, 2, v, W_DT_INT8 );
00068 TS_ASSERT_EQUALS( third.size(), 1 );
00069 }
00070
00071
00072
00073
00074
00075 void testRawSize( void )
00076 {
00077 int8_t a[4] = { 0, -5, 1, 2 };
00078 const boost::shared_ptr< std::vector< int8_t > > v =
00079 boost::shared_ptr< std::vector< int8_t > >(
00080 new std::vector< int8_t >( a, a + sizeof( a ) / sizeof( int8_t ) ) );
00081 WValueSet< int8_t > first( 0, 1, v, W_DT_INT8 );
00082 TS_ASSERT_EQUALS( first.rawSize(), 4 );
00083 WValueSet< int8_t > second( 2, 2, v, W_DT_INT8 );
00084 TS_ASSERT_EQUALS( first.rawSize(), 4 );
00085 }
00086
00087
00088
00089
00090 void testGetScalar( void )
00091 {
00092 int8_t a[4] = { 0, -5, 1, 2 };
00093 const boost::shared_ptr< std::vector< int8_t > > v =
00094 boost::shared_ptr< std::vector< int8_t > >(
00095 new std::vector< int8_t >( a, a + sizeof( a ) / sizeof( int8_t ) ) );
00096 WValueSet< int8_t > set( 0, 1, v, W_DT_INT8 );
00097 TS_ASSERT_EQUALS( set.getScalar( 0 ), a[0] );
00098 TS_ASSERT_EQUALS( set.getScalar( 1 ), a[1] );
00099 TS_ASSERT_EQUALS( set.getScalar( 2 ), a[2] );
00100 TS_ASSERT_EQUALS( set.getScalar( 3 ), a[3] );
00101 }
00102
00103
00104
00105
00106 void testReadOnlyRawAccess( void )
00107 {
00108 double a[2] = { 0.0, 3.1415 };
00109 const boost::shared_ptr< std::vector< double > > v =
00110 boost::shared_ptr< std::vector< double > >(
00111 new std::vector< double >( a, a + sizeof( a ) / sizeof( double ) ) );
00112 WValueSet< double > valueSet( 0, 1, v, W_DT_DOUBLE );
00113 const double * const b = valueSet.rawData();
00114 TS_ASSERT_EQUALS( b[0], 0.0 );
00115 TS_ASSERT_EQUALS( b[1], 3.1415 );
00116 }
00117
00118
00119
00120
00121 void testGetWValue( void )
00122 {
00123 int8_t a[6] = { 1, 2, 3, 4, 5, 6 };
00124 std::size_t dim = 2;
00125
00126 const boost::shared_ptr< std::vector< int8_t > > v =
00127 boost::shared_ptr< std::vector< int8_t > >(
00128 new std::vector< int8_t >( a, a + sizeof( a ) / sizeof( int8_t ) ) );
00129 WValueSet< int8_t > set( 1, dim, v, W_DT_INT8 );
00130
00131
00132 for( std::size_t idx = 0; idx < v->size()/dim; idx++ )
00133 {
00134 WValue< int8_t > currentWValue( dim );
00135 for( std::size_t i = 0; i < dim; i++ ) currentWValue[ i ] = ( *v )[ idx*dim + i ];
00136 TS_ASSERT_EQUALS( set.getWValue( idx ), currentWValue );
00137 TS_ASSERT_EQUALS( set.getWValue( idx ).size(), dim );
00138 }
00139
00140
00141 TS_ASSERT_THROWS_ANYTHING( set.getWValue( v->size() ) );
00142 TS_ASSERT_THROWS_ANYTHING( set.getWValue( v->size()*2 ) );
00143
00144
00145 WValueSet< int8_t > set2( 2, dim, v, W_DT_INT8 );
00146 TS_ASSERT_THROWS_ANYTHING( set2.getWValue( 0 ) );
00147 }
00148
00149
00150
00151
00152 void testSubArrayInstantiation()
00153 {
00154 int8_t a[4] = { 0, -5, 1, 2 };
00155 const boost::shared_ptr< std::vector< int8_t > > v =
00156 boost::shared_ptr< std::vector< int8_t > >(
00157 new std::vector< int8_t >( a, a + sizeof( a ) / sizeof( int8_t ) ) );
00158 WValueSet< int8_t > set( 1, 2, v, W_DT_INT8 );
00159 TS_ASSERT_THROWS_NOTHING( set.getSubArray( 0, 2 ) );
00160 TS_ASSERT_THROWS_NOTHING( set.getSubArray( 3, 1 ) );
00161 TS_ASSERT_THROWS( set.getSubArray( 4, 1 ), WException );
00162 TS_ASSERT_THROWS( set.getSubArray( 3, 2 ), WException );
00163 TS_ASSERT_THROWS( set.getSubArray( 2, 0 ), WException );
00164 }
00165
00166
00167
00168
00169 void testSubArrayAccess()
00170 {
00171 int8_t a[ 8 ] = { 0, -5, 1, 2, -27, 6, 29, 8 };
00172 const boost::shared_ptr< std::vector< int8_t > > v =
00173 boost::shared_ptr< std::vector< int8_t > >(
00174 new std::vector< int8_t >( a, a + sizeof( a ) / sizeof( int8_t ) ) );
00175 WValueSet< int8_t > set( 1, 2, v, W_DT_INT8 );
00176
00177 {
00178 WValueSet< int8_t >::SubArray const s = set.getSubArray( 0, 2 );
00179
00180 TS_ASSERT_THROWS_NOTHING( s[ 0 ] );
00181 TS_ASSERT_THROWS_NOTHING( s[ 1 ] );
00182 TS_ASSERT_THROWS_NOTHING( s[ 2 ] );
00183 TS_ASSERT_THROWS_NOTHING( s[ 100 ] );
00184
00185 TS_ASSERT_EQUALS( s[ 0 ], 0 );
00186 TS_ASSERT_EQUALS( s[ 1 ], -5 );
00187 TS_ASSERT_EQUALS( s[ 2 ], 0 );
00188 TS_ASSERT_EQUALS( s[ 100 ], 0 );
00189 }
00190 {
00191 WValueSet< int8_t >::SubArray const s = set.getSubArray( 1, 3 );
00192
00193 TS_ASSERT_THROWS_NOTHING( s[ 0 ] );
00194 TS_ASSERT_THROWS_NOTHING( s[ 1 ] );
00195 TS_ASSERT_THROWS_NOTHING( s[ 2 ] );
00196 TS_ASSERT_THROWS_NOTHING( s[ 100 ] );
00197
00198 TS_ASSERT_EQUALS( s[ 0 ], -5 );
00199 TS_ASSERT_EQUALS( s[ 1 ], 1 );
00200 TS_ASSERT_EQUALS( s[ 2 ], 2 );
00201 TS_ASSERT_EQUALS( s[ 100 ], -5 );
00202 }
00203 {
00204 WValueSet< int8_t >::SubArray const s = set.getSubArray( 5, 3 );
00205
00206 TS_ASSERT_THROWS_NOTHING( s[ 0 ] );
00207 TS_ASSERT_THROWS_NOTHING( s[ 1 ] );
00208 TS_ASSERT_THROWS_NOTHING( s[ 2 ] );
00209 TS_ASSERT_THROWS_NOTHING( s[ 100 ] );
00210
00211 TS_ASSERT_EQUALS( s[ 0 ], 6 );
00212 TS_ASSERT_EQUALS( s[ 1 ], 29 );
00213 TS_ASSERT_EQUALS( s[ 2 ], 8 );
00214 TS_ASSERT_EQUALS( s[ 100 ], 6 );
00215 }
00216 }
00217 };
00218
00219 #endif // WVALUESET_TEST_H