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 WVALUESETHISTOGRAM_TEST_H
00026 #define WVALUESETHISTOGRAM_TEST_H
00027
00028 #include <vector>
00029
00030 #include <cxxtest/TestSuite.h>
00031
00032 #include "../../WValueSet.h"
00033
00034 #include "../WValueSetHistogram.h"
00035
00036
00037
00038
00039 class WValueSetHistogramTest : public CxxTest::TestSuite
00040 {
00041 public:
00042
00043
00044
00045 void testInstantiation( void )
00046 {
00047
00048 double a[2] = { 0.0, 3.1415 };
00049 const boost::shared_ptr< std::vector< double > > v =
00050 boost::shared_ptr< std::vector< double > >(
00051 new std::vector< double >( a, a + sizeof( a ) / sizeof( double ) ) );
00052 WValueSet< double >* valueSet = new WValueSet< double >( 0, 1, v, W_DT_DOUBLE );
00053
00054
00055 TS_ASSERT_THROWS_NOTHING( WValueSetHistogram hist( *valueSet ) );
00056 boost::shared_ptr< WValueSet< double > > vsPtr( valueSet );
00057 TS_ASSERT_THROWS_NOTHING( WValueSetHistogram hist( vsPtr ) );
00058 }
00059
00060
00061
00062
00063 void testOperator( void )
00064 {
00065
00066 double a[4] = { 0.0, 1.0, 1.0, 4.0 };
00067 const boost::shared_ptr< std::vector< double > > v =
00068 boost::shared_ptr< std::vector< double > >(
00069 new std::vector< double >( a, a + sizeof( a ) / sizeof( double ) ) );
00070 WValueSet< double >* valueSet = new WValueSet< double >( 0, 1, v, W_DT_DOUBLE );
00071
00072
00073 WValueSetHistogram hist( *valueSet, 5 );
00074 TS_ASSERT_EQUALS( hist[0], 1 );
00075 TS_ASSERT_EQUALS( hist[1], 2 );
00076 TS_ASSERT_EQUALS( hist[2], 0 );
00077 TS_ASSERT_EQUALS( hist[3], 0 );
00078 TS_ASSERT_EQUALS( hist[4], 1 );
00079 }
00080
00081
00082
00083
00084 void testAt( void )
00085 {
00086
00087 double a[4] = { 0.0, 1.0, 1.0, 4.0 };
00088 const boost::shared_ptr< std::vector< double > > v =
00089 boost::shared_ptr< std::vector< double > >(
00090 new std::vector< double >( a, a + sizeof( a ) / sizeof( double ) ) );
00091 WValueSet< double >* valueSet = new WValueSet< double >( 0, 1, v, W_DT_DOUBLE );
00092
00093
00094 WValueSetHistogram hist( *valueSet, 5 );
00095
00096
00097 TS_ASSERT_EQUALS( hist.at( 0 ), 1 );
00098 TS_ASSERT_EQUALS( hist.at( 1 ), 2 );
00099 TS_ASSERT_EQUALS( hist.at( 2 ), 0 );
00100 TS_ASSERT_EQUALS( hist.at( 3 ), 0 );
00101 TS_ASSERT_EQUALS( hist.at( 4 ), 1 );
00102
00103
00104 TS_ASSERT_THROWS_ANYTHING( hist.at( 5 ) );
00105 }
00106
00107
00108
00109
00110 void testMinMax( void )
00111 {
00112
00113 double a[4] = { 0.0, -5.0, 1.0, 2.0 };
00114 const boost::shared_ptr< std::vector< double > > v =
00115 boost::shared_ptr< std::vector< double > >(
00116 new std::vector< double >( a, a + sizeof( a ) / sizeof( double ) ) );
00117 WValueSet< double >* valueSet = new WValueSet< double >( 0, 1, v, W_DT_DOUBLE );
00118
00119
00120 WValueSetHistogram hist( *valueSet );
00121
00122 TS_ASSERT_EQUALS( hist.getMinimum(), -5.0 );
00123 TS_ASSERT_EQUALS( hist.getMaximum(), 2.0 );
00124 }
00125
00126
00127
00128
00129 void testSizes( void )
00130 {
00131
00132 double a[5] = { 0.0, 4.0, 1.0, 2.0, 1.0 };
00133 const boost::shared_ptr< std::vector< double > > v =
00134 boost::shared_ptr< std::vector< double > >(
00135 new std::vector< double >( a, a + sizeof( a ) / sizeof( double ) ) );
00136 WValueSet< double >* valueSet = new WValueSet< double >( 0, 1, v, W_DT_DOUBLE );
00137
00138
00139 WValueSetHistogram hist( *valueSet, 5 );
00140
00141 TS_ASSERT_EQUALS( hist.size(), 5 );
00142 TS_ASSERT_EQUALS( hist.getBucketSize(), 1.0 );
00143 }
00144
00145
00146
00147
00148 void testIndex( void )
00149 {
00150
00151 double a[5] = { 0.0, 4.0, 1.0, 2.0, 1.0 };
00152 const boost::shared_ptr< std::vector< double > > v =
00153 boost::shared_ptr< std::vector< double > >(
00154 new std::vector< double >( a, a + sizeof( a ) / sizeof( double ) ) );
00155 WValueSet< double >* valueSet = new WValueSet< double >( 0, 1, v, W_DT_DOUBLE );
00156
00157
00158 WValueSetHistogram hist( *valueSet, 5 );
00159
00160
00161
00162
00163
00164
00165 TS_ASSERT_EQUALS( hist.getIndexForValue( 4.0 ), 4 );
00166 TS_ASSERT_EQUALS( hist.getIndexForValue( 3.999 ), 3 );
00167 TS_ASSERT_EQUALS( hist.getIndexForValue( 0.0 ), 0 );
00168 TS_ASSERT_EQUALS( hist.getIndexForValue( 122.0 ), 4 );
00169 TS_ASSERT_EQUALS( hist.getIndexForValue( -122.0 ), 0 );
00170 }
00171
00172
00173
00174
00175 void testAccum( void )
00176 {
00177
00178 double a[5] = { 0.0, 4.0, 1.0, 2.0, 1.0 };
00179 const boost::shared_ptr< std::vector< double > > v =
00180 boost::shared_ptr< std::vector< double > >(
00181 new std::vector< double >( a, a + sizeof( a ) / sizeof( double ) ) );
00182 WValueSet< double >* valueSet = new WValueSet< double >( 0, 1, v, W_DT_DOUBLE );
00183
00184
00185 WValueSetHistogram hist( *valueSet, 5 );
00186 std::cout << hist << std::endl;
00187
00188 TS_ASSERT_EQUALS( hist.accumulate( 0, 2 ), 3 );
00189 TS_ASSERT_EQUALS( hist.accumulate( 2, 0 ), 3 );
00190 TS_ASSERT_EQUALS( hist.accumulate( 2, 2 ), 0 );
00191 TS_ASSERT( hist.accumulate( 2, 2 ) != hist[ 2 ] );
00192
00193 TS_ASSERT_THROWS_ANYTHING( hist.accumulate( 0, 123 ) );
00194 }
00195
00196
00197
00198
00199 void testCopyWithoutIntervalChanges( void )
00200 {
00201
00202 double a[5] = { 0.0, 4.0, 1.0, 2.0, 1.0 };
00203 const boost::shared_ptr< std::vector< double > > v =
00204 boost::shared_ptr< std::vector< double > >(
00205 new std::vector< double >( a, a + sizeof( a ) / sizeof( double ) ) );
00206 WValueSet< double >* valueSet = new WValueSet< double >( 0, 1, v, W_DT_DOUBLE );
00207
00208
00209 WValueSetHistogram hist( *valueSet, 5 );
00210 WValueSetHistogram hist2 = hist;
00211 WValueSetHistogram hist3( *valueSet, 10 );
00212
00213
00214 TS_ASSERT_EQUALS( hist.m_minimum, hist2.m_minimum );
00215 TS_ASSERT_EQUALS( hist.m_maximum, hist2.m_maximum );
00216 TS_ASSERT_EQUALS( hist.m_initialBucketSize, hist2.m_initialBucketSize );
00217 TS_ASSERT_EQUALS( hist.m_initialBuckets.get(), hist2.m_initialBuckets.get() );
00218 TS_ASSERT_EQUALS( hist.m_nInitialBuckets, hist2.m_nInitialBuckets );
00219 TS_ASSERT_EQUALS( hist.m_mappedBuckets.get(), hist2.m_mappedBuckets.get() );
00220 TS_ASSERT_EQUALS( hist.m_nMappedBuckets, hist2.m_nMappedBuckets );
00221 TS_ASSERT_EQUALS( hist.m_mappedBucketSize, hist2.m_mappedBucketSize );
00222
00223
00224 hist = hist3;
00225 TS_ASSERT_EQUALS( hist.m_minimum, hist3.m_minimum );
00226 TS_ASSERT_EQUALS( hist.m_maximum, hist3.m_maximum );
00227 TS_ASSERT_EQUALS( hist.m_initialBucketSize, hist3.m_initialBucketSize );
00228 TS_ASSERT_EQUALS( hist.m_initialBuckets.get(), hist3.m_initialBuckets.get() );
00229 TS_ASSERT_EQUALS( hist.m_nInitialBuckets, hist3.m_nInitialBuckets );
00230 TS_ASSERT_EQUALS( hist.m_mappedBuckets, hist3.m_mappedBuckets );
00231 TS_ASSERT_EQUALS( hist.m_nMappedBuckets, hist3.m_nMappedBuckets );
00232 TS_ASSERT_EQUALS( hist.m_nMappedBuckets, 10 );
00233 TS_ASSERT_EQUALS( hist.m_mappedBucketSize, hist3.m_mappedBucketSize );
00234 }
00235
00236
00237
00238
00239 void testCopyWithIntervalChanges( void )
00240 {
00241
00242 double a[5] = { 0.0, 4.0, 1.0, 2.0, 1.0 };
00243 const boost::shared_ptr< std::vector< double > > v =
00244 boost::shared_ptr< std::vector< double > >(
00245 new std::vector< double >( a, a + sizeof( a ) / sizeof( double ) ) );
00246 WValueSet< double >* valueSet = new WValueSet< double >( 0, 1, v, W_DT_DOUBLE );
00247
00248
00249 WValueSetHistogram hist( *valueSet, 4 );
00250 WValueSetHistogram hist2( hist, 2 );
00251 TS_ASSERT_THROWS_ANYTHING( WValueSetHistogram hist2( hist, 1 ) );
00252
00253
00254 TS_ASSERT_EQUALS( hist.m_minimum, hist2.m_minimum );
00255 TS_ASSERT_EQUALS( hist.m_maximum, hist2.m_maximum );
00256 TS_ASSERT_EQUALS( hist.m_initialBucketSize, hist2.m_initialBucketSize );
00257 TS_ASSERT_EQUALS( hist.m_initialBuckets.get(), hist2.m_initialBuckets.get() );
00258 TS_ASSERT_EQUALS( hist.m_nInitialBuckets, hist2.m_nInitialBuckets );
00259
00260
00261 TS_ASSERT_EQUALS( hist2.m_mappedBucketSize, 4.0 );
00262 TS_ASSERT_EQUALS( hist2.m_nMappedBuckets, 2 );
00263 TS_ASSERT( hist2.m_mappedBuckets != hist.m_mappedBuckets );
00264
00265
00266 TS_ASSERT_EQUALS( hist2.at( 0 ), 4 );
00267 TS_ASSERT_EQUALS( hist2.at( 1 ), 1 );
00268 }
00269 };
00270
00271 #endif // WVALUESETHISTOGRAM_TEST_H