// VTrack_t.cpp // Test VTrack. #include "VTrack.h" #include #include #include #include "trfutil/trfstream.h" #include "SurfTest.h" #include "VTrackDataTest.h" using std::cout; using std::cerr; using std::endl; using std::string; using trf::trf_format; using trf::SurfacePtr; //********************************************************************** int main( ) { string ok_prefix = "VTrack test (I): "; string error_prefix = "VTrack test (E): "; cout << ok_prefix << "------- Testing component VTrack. -------" << endl; //******************************************************************** cout << ok_prefix << "Test constructors." << endl; cout << trf_format; VTrack trv0; cout << trv0 << endl; SurfacePtr psrf1( new SurfTest(-123) ); VTrack trv1(psrf1); trv1.set_forward(); cout << trv1 << endl; TrackVector vec; vec(0) = 1.0; vec(1) = 2.0; vec(2) = 3.0; vec(3) = 4.0; vec(4) = 5.0; VTrack trv2(psrf1,vec); trv2.set_backward(); cout << trv2 << endl; //******************************************************************** cout << ok_prefix << "Test copy constructor." << endl; VTrack* ptrv3 = new VTrack(trv1); VTrack* ptrv4 = new VTrack(*ptrv3); delete ptrv3; cout << trv1 << endl; cout << *ptrv4 << endl; assert( trv1 == *ptrv4 ); //******************************************************************** cout << ok_prefix << "Test assignment." << endl; VTrack trv3 = *ptrv4; delete ptrv4; cout << trv1 << endl; cout << trv3 << endl; assert( trv1 == trv3 ); assert( ! trv0.is_valid() ); trv0 = trv1; assert( trv0.is_valid() ); cout << trv0 << endl; assert( trv0 == trv1 ); //******************************************************************** cout << ok_prefix << "Test surface access." << endl; SurfacePtr psrf2( new SurfTest(246) ); trv2 = trv1; trv2.set_surface(psrf2); cout << *psrf2 << endl; cout << *trv2.get_surface() << endl; cout << trv2 << endl; assert( *psrf2 == *trv2.get_surface() ); assert( psrf2 == trv2.get_surface() ); assert( trv1 != trv2 ); //******************************************************************** cout << ok_prefix << "Test vector access." << endl; trv2 = trv1; trv2.set_vector(vec); cout << vec << endl; cout << trv2.get_vector() << endl; cout << trv2 << endl; assert( vec == trv2.get_vector() ); assert( trv1 != trv2 ); for ( int i=0; i<5; ++i ) assert( trv2.get_vector(i) == vec(i) ); //******************************************************************** cout << ok_prefix << "Test direction." << endl; assert( trv1.is_forward() ); assert( ! trv1.is_backward() ); trv1.set_backward(); assert( ! trv1.is_forward() ); assert( trv1.is_backward() ); trv1.set_forward(); assert( trv1.is_forward() ); assert( ! trv1.is_backward() ); //******************************************************************** cout << ok_prefix << "Test extra data." << endl; { VTrack trv1(psrf1,vec); assert( ! trv1.has_data() ); int val = 4; VTrackDataTest* pdat1 = new VTrackDataTest(val); assert( pdat1->value() == 4 ); trv1.set_data(pdat1); assert( trv1.has_data() ); assert( trv1.get_data() == pdat1 ); const VTrack& trv1c = trv1; assert( trv1c.has_data() ); assert( trv1c.get_data() == pdat1 ); VTrack trv2 = trv1; assert( trv2.has_data() ); assert( trv2.get_data() != pdat1 ); VTrackDataTest& rdat2 = dynamic_cast(*trv2.get_data()); assert( rdat2.value() == val ); VTrack trv3; trv3 = trv1; assert( trv3.has_data() ); assert( trv3.get_data() != pdat1 ); VTrackDataTest& rdat3 = dynamic_cast(*trv3.get_data()); assert( rdat3.value() == val ); trv3.drop_data(); assert( ! trv3.has_data() ); } //******************************************************************** cout << ok_prefix << "------------- All tests passed. -------------" << endl; return 0; }