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 WTENSORSYM_TEST_H
00026 #define WTENSORSYM_TEST_H
00027
00028 #include <string>
00029 #include <vector>
00030 #include <algorithm>
00031
00032 #include <cxxtest/TestSuite.h>
00033 #include "../WTensorSym.h"
00034
00035
00036
00037
00038 class WTensorSymTest : public CxxTest::TestSuite
00039 {
00040 public:
00041
00042
00043
00044 void testAccessOperator1()
00045 {
00046 WTensorSym< 3, 2 > w;
00047 w( 0, 0, 0 ) = 2;
00048 w( 0, 0, 1 ) = 3;
00049 w( 0, 1, 0 ) = 0;
00050 w( 0, 1, 1 ) = 5;
00051 w( 1, 0, 0 ) = 2;
00052 w( 1, 0, 1 ) = 1;
00053 w( 1, 1, 0 ) = 8;
00054 w( 1, 1, 1 ) = 10;
00055
00056 TS_ASSERT_EQUALS( w( 0, 0, 0 ), 2 );
00057 TS_ASSERT_EQUALS( w( 0, 0, 1 ), 2 );
00058 TS_ASSERT_EQUALS( w( 0, 1, 0 ), 2 );
00059 TS_ASSERT_EQUALS( w( 0, 1, 1 ), 8 );
00060 TS_ASSERT_EQUALS( w( 1, 0, 0 ), 2 );
00061 TS_ASSERT_EQUALS( w( 1, 0, 1 ), 8 );
00062 TS_ASSERT_EQUALS( w( 1, 1, 0 ), 8 );
00063 TS_ASSERT_EQUALS( w( 1, 1, 1 ), 10 );
00064
00065
00066
00067 WTensorSym< 4, 1 > t;
00068
00069 t( 0, 0, 0, 0 ) = 2.0;
00070
00071 TS_ASSERT_EQUALS( t( 0, 0, 0, 0 ), 2.0 );
00072 }
00073
00074
00075
00076
00077 void testAccessOperator2()
00078 {
00079 std::vector< unsigned int > v( 3, 0 );
00080 WTensorSym< 3, 4 > w;
00081
00082 for( v[ 0 ] = 0; v[ 0 ] < 4; ++v[ 0 ] )
00083 {
00084 for( v[ 1 ] = 0; v[ 1 ] < 4; ++v[ 1 ] )
00085 {
00086 for( v[ 2 ] = 0; v[ 2 ] < 4; ++v[ 2 ] )
00087 {
00088 w[ v ] = v[ 0 ] + v[ 1 ] + v[ 2 ];
00089 std::vector< unsigned int > v0 = v;
00090 std::sort( v0.begin(), v0.end() );
00091 TS_ASSERT_EQUALS( w[ v0 ], v[ 0 ] + v[ 1 ] + v[ 2 ] );
00092 }
00093 }
00094 }
00095 }
00096
00097
00098
00099
00100 void testStandardConstructor()
00101 {
00102
00103 WTensorSym< 1, 1 > t11d;
00104 WTensorSym< 1, 2 > t12d;
00105 WTensorSym< 1, 3 > t13d;
00106 WTensorSym< 1, 4 > t14d;
00107 WTensorSym< 1, 1, float > t11f;
00108 WTensorSym< 1, 2, int > t12i;
00109 WTensorSym< 1, 3, char > t13c;
00110 WTensorSym< 1, 4, std::string > t14s;
00111 WTensorSym< 2, 1 > t21d;
00112 WTensorSym< 2, 2 > t22d;
00113 WTensorSym< 2, 3 > t23d;
00114 WTensorSym< 2, 4 > t24d;
00115 WTensorSym< 2, 1, int > t21i;
00116 WTensorSym< 2, 2, char > t22c;
00117 WTensorSym< 2, 3, float > t23f;
00118 WTensorSym< 2, 4, float > t24f;
00119 WTensorSym< 3, 5 > t35d;
00120 WTensorSym< 4, 3 > t43d;
00121 WTensorSym< 5, 2 > t52d;
00122 WTensorSym< 6, 3 > t63d;
00123
00124 TS_ASSERT_EQUALS( t35d( 0, 4, 2 ), 0.0 );
00125 TS_ASSERT_EQUALS( t35d( 1, 4, 0 ), 0.0 );
00126 TS_ASSERT_EQUALS( t35d( 0, 3, 0 ), 0.0 );
00127 TS_ASSERT_EQUALS( t35d( 2, 4, 1 ), 0.0 );
00128 TS_ASSERT_EQUALS( t35d( 0, 2, 2 ), 0.0 );
00129 TS_ASSERT_EQUALS( t35d( 4, 1, 4 ), 0.0 );
00130 TS_ASSERT_EQUALS( t35d( 4, 4, 4 ), 0.0 );
00131 TS_ASSERT_EQUALS( t35d( 3, 4, 3 ), 0.0 );
00132
00133 TS_ASSERT_EQUALS( t11d( 0 ), 0.0 );
00134 TS_ASSERT_EQUALS( t22d( 0, 1 ), 0.0 );
00135 }
00136
00137
00138
00139
00140 void testCopyConstructor()
00141 {
00142 WTensorSym< 2, 3 > w;
00143 w( 0, 1 ) = 2;
00144 w( 2, 1 ) = 0.456;
00145
00146 WTensorSym< 2, 3 > m( w );
00147 TS_ASSERT_EQUALS( m( 1, 0 ), 2 );
00148 TS_ASSERT_EQUALS( m( 1, 2 ), 0.456 );
00149 }
00150
00151
00152
00153
00154 void testCopyOperator()
00155 {
00156 WTensorSym< 6, 2 > w;
00157 w( 0, 0, 1, 1, 0, 1 ) = 4.0;
00158 w( 1, 1, 0, 0, 0, 0 ) = 0.56;
00159 WTensorSym< 6, 2 > m;
00160
00161 {
00162 m = w;
00163 TS_ASSERT_EQUALS( m( 0, 1, 0, 1, 0, 1 ), 4.0 );
00164 TS_ASSERT_EQUALS( m( 1, 0, 0, 0, 1, 0 ), 0.56 );
00165 TS_ASSERT_EQUALS( m( 0, 0, 0, 1, 0, 0 ), 0.0 );
00166 }
00167 }
00168
00169
00170
00171
00172 void testCastToVariousTypes()
00173 {
00174
00175
00176
00177
00178 {
00179 WTensorSym< 0, 0, double > t;
00180 t() = 3.0;
00181 double d = t;
00182 TS_ASSERT_EQUALS( d, 3.0 );
00183 }
00184
00185 {
00186 WTensorSym< 1, 2, int > t;
00187 t( 0 ) = 3.0;
00188 WValue< int > v = t;
00189 TS_ASSERT_EQUALS( v[ 0 ], 3.0 );
00190 }
00191
00192 {
00193 WTensorSym< 2, 3, float > t;
00194 t( 0, 1 ) = 3.0;
00195 WMatrix< float > m = t;
00196 TS_ASSERT_EQUALS( m( 1, 0 ), 3.0 );
00197 }
00198 }
00199 };
00200
00201 #endif // WTENSORSYM_TEST_H