// LTrack_t.cpp #include "LTrack.h" #include #include #include "trfutil/trfstream.h" #include "trfbase/SurfTest.h" using std::cout; using std::cerr; using std::endl; using std::string; using namespace trf; // Dummy layer class. // Layer depends on LTrack not vv. namespace trf { class Layer { }; } // end namespace trf //********************************************************************** int main( ) { string component = "LTrack"; string ok_prefix = component + " (I): "; string error_prefix = component + " test (E): "; cout << ok_prefix << "---------- Testing component " + component + ". ----------" << endl; // Make sure assert is enabled. bool assert_flag = false; assert ( ( assert_flag = true, assert_flag ) ); if ( ! assert_flag ) { cerr << "Assert is disabled" << endl; return 1; } //******************************************************************** cout << trf_format; cout << ok_prefix << "Test constructor." << endl; SurfTest stst(1.0); ETrack tre( SurfacePtr(stst.new_pure_surface()) ); Layer ltst; LayerStat lstat(ltst); lstat.set_state(2); LTrack trl1; trl1.get_track() = tre; trl1.push_status(lstat); cout << trl1 << endl; const LTrack& trl2(trl1); cout << trl2 << endl; //******************************************************************** cout << ok_prefix << "Test access." << endl; assert( trl1.get_track() == trl2.get_track() ); assert( trl1.get_status().get_state() == 2 ); //******************************************************************** cout << ok_prefix << "Test status manipulation." << endl; assert( trl1.at_valid_status() ); assert( trl1.get_status().get_state() == 2 ); cout << trl1 << endl; trl1.get_status().set_state(1); cout << trl1 << endl; assert( trl1.get_status().get_state() == 1 ); // insert 2nd status lstat.set_state(2); trl1.push_status(lstat); cout << trl1 << endl; assert( trl1.get_status().get_state() == 2 ); assert( trl1.set_previous_status() ); // insert 3rd status lstat.set_state(3); trl1.push_status(lstat); assert( ! trl1.at_top_status() ); assert( trl1.get_status().get_state() == 3 ); // step up to 2nd status assert( trl1.set_previous_status() ); assert( trl1.get_status().get_state() == 2 ); // step up to 1st status assert( trl1.set_previous_status() ); assert( ! trl1.set_previous_status() ); assert( trl1.at_top_status() ); assert( trl1.get_status().get_state() == 1 ); // step down assert( trl1.set_next_status() ); assert( trl1.get_status().get_state() == 2 ); assert( trl1.set_next_status() ); assert( trl1.get_status().get_state() == 3 ); assert( ! trl1.set_next_status() ); // pop last status -- should leave us positioned at 2nd assert( trl1.pop_status() ); assert( trl1.get_status().get_state() == 2 ); //******************************************************************** cout << ok_prefix << "Test propagator status" << endl; assert( ! trl2.get_prop_stat().success() ); trl1.get_prop_stat().set_forward(); assert( trl2.get_prop_stat().success() ); double s = 123.4; trl1.get_prop_stat().set_path_distance(s); assert( trl2.get_prop_stat().path_distance() == s ); //******************************************************************** cout << ok_prefix << "Test assignment." << endl; LTrack trl0; assert( ! trl0.at_valid_status() ); trl0 = trl1; assert( trl0.at_valid_status() ); assert( trl0.get_status().get_state() == 2 ); //******************************************************************** cout << ok_prefix << "Test const access." << endl; LayerStatChain::Iterator ibeg = trl1.get_status_chain().begin(); LayerStatChain::Iterator iend = trl1.get_status_chain().end(); int icnt = 0; for ( LayerStatChain::Iterator i=ibeg; i!=iend; ++i ) ++icnt; cout << "count (should be 2) = " << icnt << endl; assert( icnt == 2 ); //******************************************************************** cout << ok_prefix << "------------- All tests passed. -------------" << endl; return 0; //******************************************************************** }