diff --git a/ChangeLog b/ChangeLog index 46cef03..646ed07 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,46 @@ +2006-03-09 10:49 tchernobog + + * trunk/Makefile.am, trunk/src/backend/global_settings.cc, + trunk/src/backend/global_settings.hh, + trunk/src/backend/pyloader/python_policy_manager.cc, + trunk/src/builtin-policies/fcfs.py, + trunk/src/builtin-policies/sjf.py, trunk/src/main.cc, + trunk/src/parse_opts.cc, + trunk/src/testsuite/test-python_loader.cc: - Add copyright notices + to existing builtin python policies - Implement system to + dinamically pass plugins and policies search paths to the sgpemv2 + binary and tests (class GlobalSettings) - Drastically reduce usage + of hardcoded paths in code except as default overridable values + +2006-03-09 05:19 matrevis + + * trunk/src/testsuite/test-history.cc, + trunk/src/testsuite/test-stepforward.cc: - added some test drafts + +2006-03-08 16:57 matrevis + + * trunk/src/testsuite/test-parse_command.cc: - Added draft of test + code for Frontend Unit testing + +2006-03-08 16:47 tchernobog + + * trunk/ChangeLog, trunk/Makefile.am, + trunk/src/backend/pyloader/python_policy.hh, + trunk/src/backend/pyloader/python_policy_manager.cc, + trunk/src/backend/pyloader/python_policy_manager.hh, + trunk/src/main.cc, trunk/src/testsuite/python_loader_configure.py, + trunk/src/testsuite/python_loader_get_time_slice.py, + trunk/src/testsuite/python_loader_is_preemptive.py, + trunk/src/testsuite/python_loader_sort_queue.py, + trunk/src/testsuite/test-python_loader.cc: - Give facelift to + test_loader. Still to be finished. + +2006-03-08 15:50 johnny + + * trunk/config/libtool-labunipd-sgpemfix.patch: - How to spend two + hours tracking a bug of Unipd's laboratory broken distribution + (how fscking unbelievable!) + 2006-03-08 12:49 tchernobog * trunk/src/templates/smartp.hh, trunk/src/templates/smartp.tcc: - diff --git a/Makefile.am b/Makefile.am index fad2b06..a19f87a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -324,7 +324,35 @@ policies_PYTHON = \ # DEJATOOL = src/testsuite/example-test.exp -noinst_PROGRAMS = src/testsuite/test-python_loader +noinst_PROGRAMS = \ + src/testsuite/test-history \ + src/testsuite/test-python_loader + +# disable : +# src/testsuite/test-parse_command +# src/testsuite/test-stepforward + +src_testsuite_test_history_CPPFLAGS = \ + -I@top_srcdir@/src \ + $(GLIBMM_CFLAGS) +src_testsuite_test_history_LDFLAGS = \ + src/backend/libbackend.la \ + $(GLIBMM_LIBS) +src_testsuite_test_history_SOURCES = \ + src/testsuite/test-history.cc + + + +#src_testsuite_test_parse_command_CPPFLAGS = \ +# -I@top_srcdir@/src \ +# $(GLIBMM_CFLAGS) +#src_testsuite_test_parse_command_LDFLAGS = \ +# src/backend/libbackend.la \ +# $(GLIBMM_LIBS) +#src_testsuite_test_parse_command_SOURCES = \ +# src/testsuite/test-parse_command.cc + + src_testsuite_test_python_loader_CPPFLAGS = \ -I@top_srcdir@/src \ @@ -336,7 +364,7 @@ src_testsuite_test_python_loader_DEPENDENCIES = \ src_testsuite_test_python_loader_LDFLAGS = \ src/backend/libbackend.la \ src/backend/pyloader/libpyloader.la \ - $(GTKMM_LIBS) $(GTHREAD_LIBS) + $(GLIBMM_LIBS) $(GTHREAD_LIBS) src_testsuite_test_python_loader_SOURCES = \ src/testsuite/test-python_loader.cc \ src/standard_io.cc \ @@ -349,6 +377,21 @@ noinst_PYTHON += src/testsuite/python_loader_configure.py \ src/testsuite/python_loader_is_preemptive.py \ src/testsuite/python_loader_get_time_slice.py + + +# advice: get dummy_policy from the somewhere in the repository, and compile it in. +#src_testsuite_test_stepforward_CPPFLAGS = \ +# -I@top_srcdir@/src \ +# $(GLIBMM_CFLAGS) +#src_testsuite_test_stepforward_LDFLAGS = \ +# src/backend/libbackend.la \ +# $(GLIBMM_LIBS) +#src_testsuite_test_stepforward_SOURCES = \ +# src/testsuite/test-stepforward.cc + + # Workaround an automake bug that leaves behind some files # while it's finishing the distcheck target -CLEANFILES += src/testsuite/.libs/test-python_loader +CLEANFILES += \ + src/testsuite/.libs/test-python_loader \ + src/testsuite/.libs/test-history diff --git a/src/backend/history.cc b/src/backend/history.cc index 271c6a2..8a3d13e 100644 --- a/src/backend/history.cc +++ b/src/backend/history.cc @@ -24,13 +24,13 @@ using namespace sgpem; using namespace memory; //History::instance; //static object -History History::_instance(10); //dummy parameter +History* History::_instance = 0; /** The constructor sets _total_time_elapsed to -1: this permits to insert the INITIAL STATUS of the simulation which must begin at instant -1 and live for 1 instant. */ -History::History(int) //private constructor. The parameter is discarded +History::History() //private constructor. The parameter is discarded :_total_time_elapsed(-1) {} @@ -38,7 +38,9 @@ History::History(int) //private constructor. The parameter is discarded History& History::get_instance() { - return _instance; + if(!_instance) + _instance = new History(); + return *_instance; } diff --git a/src/backend/history.hh b/src/backend/history.hh index 4e7db4d..4eeb512 100644 --- a/src/backend/history.hh +++ b/src/backend/history.hh @@ -55,32 +55,32 @@ namespace sgpem \param time The inquired time instant. \return The Schedulable object running at the given time. */ - memory::smart_ptr get_scheduled_at(int time) const; + virtual memory::smart_ptr get_scheduled_at(int time) const; /** Gets the status of simulation at the specified time. \param time The inquired time instant. \return The list of Schedulable status objects at the specified time. */ - memory::smart_ptr get_simulation_status_at(int time) const; + virtual memory::smart_ptr get_simulation_status_at(int time) const; /** Gets the current time. \return The current history time. */ - int get_current_time() const; + virtual int get_current_time() const; /** Sets the status of simulation at the current time. \param status The list of \ref Schedulable status objects at the current time. */ - void enqueue_slice(const sgpem::SchedulableList& status); + virtual void enqueue_slice(const sgpem::SchedulableList& status); /** Remove all data in History following the specified time. \param instant Desired cutting time. */ - void truncate_at(int instant); + virtual void truncate_at(int instant); /** @@ -89,9 +89,11 @@ namespace sgpem */ static History& get_instance(); + protected: + History(); //private constructor. The parameter is discarded + static History* _instance; + private: - History(int); //private constructor. The parameter is discarded - static History _instance; int _total_time_elapsed; std::vector _slices; }; diff --git a/src/testsuite/test-history.cc b/src/testsuite/test-history.cc index bdc377f..a542a26 100644 --- a/src/testsuite/test-history.cc +++ b/src/testsuite/test-history.cc @@ -36,6 +36,7 @@ #include #include +#include "backend/history.hh" #include "backend/process.hh" #include "backend/slice.hh" #include "backend/observed_subject.hh" @@ -43,16 +44,15 @@ #include "backend/schedulable_status.hh" #include "templates/smartp.hh" +using namespace sgpem; +using namespace std; class HistoryTester { - - public: - - HistoryTester(SchedulableList sl) : _history_length(-1), _internal_schedulable_list(sl) - { - } - +public: + HistoryTester(SchedulableList sl) + : _history_length(-1), _internal_schedulable_list(sl) + {} /** this method gets a sequence of operations as a parameter and performs them * checking for incongruences. @@ -63,17 +63,17 @@ class HistoryTester // prints the test sequence std::cout << commands_sequence << endl; // executes the test sequence - for (int i = 0; i < commands_sequence.length() && i < 400; i++) + for (unsigned int i = 0; i < commands_sequence.length() && i < 400; i++) { switch(commands_sequence[i]) { - case E: + case 'E': _insert(_internal_schedulable_list); break; - case R: + case 'R': _randomize(_internal_schedulable_list); break; - case T: + case 'T': _truncate(); break; default: @@ -103,11 +103,11 @@ class HistoryTester for (int i = 0; i <= _history_length; i++) { // watch out here, it's if (NOT ...) operator != was not available. - if (!(History::get_instance().get_simulation_status_at(i) == *_get_simulation_status_at[i])) + if (!(*History::get_instance().get_simulation_status_at(i) == *_get_simulation_status_at[i])) { std::cout << "get_simulation_status_at"; } - if (History::get_instance().get_scheduled_at(i) != *_get_scheduled_at[i]) + if (!(*History::get_instance().get_scheduled_at(i) == *_get_scheduled_at[i])) { std::cout << "get_simulation_status_at"; } @@ -120,8 +120,8 @@ class HistoryTester History::get_instance().enqueue_slice(status); _history_length = _history_length + 1; // I hope the copy constructor is available.. - _get_simulation_status_at[history_length] = new SchedulableList(status); - _get_scheduled_at[history_length] = new SchedulableStatus(*(status.top())); + _get_simulation_status_at[_history_length] = new SchedulableList(status); + _get_scheduled_at[_history_length] = new SchedulableStatus(*(status.top())); return; } @@ -140,34 +140,35 @@ class HistoryTester status.swap(9, 4); status.swap(4, 5); status.swap(7, 1); - for (int i = 0; i <= status.size(); i++) + for (unsigned int i = 0; i <= status.size(); i++) { - status.get_item_at(i).give_cpu_time(1); - status.get_item_at(i).set_last_scheduled(_history_length); - status.get_item_at(i).set_state(1<<(i%4)); + // FIXME: These methods aren't implemented!! + //status.get_item_at(i).give_cpu_time(1); + //status.get_item_at(i).set_last_scheduled(_history_length); + //status.get_item_at(i).set_state(1<<(i%4)); } return; } void _truncate() { - delete _get_simulation_status_at[history_length] - delete _get_scheduled_at[history_length] + delete _get_simulation_status_at[_history_length]; + delete _get_scheduled_at[_history_length]; _history_length = _history_length - 1; - History::get_instance().truncate_at(history_length); + History::get_instance().truncate_at(_history_length); return; } -} +}; int -main(int argc, char** argv) { - +main(int argc, char** argv) +{ using namespace sgpem; using Glib::Module; - std::string command(ERERERT); // the sequence of commands to test + std::string command("ERERERT"); // the sequence of commands to test // sets up the test data Process p1("P1", 1,5,1); diff --git a/src/testsuite/test-parse_command.cc b/src/testsuite/test-parse_command.cc index 25c7617..4b8530d 100644 --- a/src/testsuite/test-parse_command.cc +++ b/src/testsuite/test-parse_command.cc @@ -21,11 +21,9 @@ /* This executable tests for workingness of the parseCommand method in the * classTextSimulation class and the StandardIO class. */ -#include "backend/standard_io.hh" -#include "backend/text_simulation.hh" -#include "backend/templates/smartp.hh" - -#include +#include "standard_io.hh" +#include "text_simulation.hh" +#include "templates/smartp.hh" #include #include @@ -38,94 +36,76 @@ #include #include -#include "slice.hh" -#include "observed_subject.hh" -#include "schedulable_list.hh" -#include "schedulable_status.hh" -#include "../templates/smartp.hh" +#include "backend/process.hh" +#include "backend/slice.hh" +#include "backend/observed_subject.hh" +#include "backend/schedulable_list.hh" +#include "backend/schedulable_status.hh" namespace sgpem { - /* History stub: every public method does nothing except printing - in std::cout the signature and the parameters. */ + /* History stub: every public method does nothing except printing + in std::cout the signature and the parameters. */ - class History; - - class SG_DLLEXPORT History : public ObservedSubject + class TestHistory : public History { public: - memory::smart_ptr get_scheduled_at(int time) + memory::smart_ptr get_scheduled_at(int time) { - std::cout << "get_scheduled_at" << time; + std::cout << "get_scheduled_at" << time; + return History::get_scheduled_at(time); } memory::smart_ptr get_simulation_status_at(int time) const { - std::cout << "get_simulation_status_at" << time; + std::cout << "get_simulation_status_at" << time; + return History::get_simulation_status_at(time); } int get_current_time() const { - std::cout << "getCurrentTime"; + std::cout << "getCurrentTime"; + return History::get_current_time(); } void enqueue_slice(const sgpem::SchedulableList& status) { - std::cout << "enqueue_slice"; + std::cout << "enqueue_slice"; + History::enqueue_slice(status); } void truncate_at(int instant) { - std::cout << "TruncateAt" << instant; + std::cout << "TruncateAt" << instant; + History::truncate_at(instant); } - // The following method is not used by the user interface - + // The following method is not used by the user interface static History& get_instance(); + private: + static TestHistory* _instance; }; + + TestHistory* TestHistory::_instance = 0; + + History& + TestHistory::get_instance() + { + if(!_instance) + _instance = new TestHistory(); + return *_instance; + } }//~ namespace sgpem int -main(int argc, char** argv) { +main(int, char**) { using namespace sgpem; - using Glib::Module; - - std::string pyloader_path = Module::build_path(MODDIR, "pyloader"); - Glib::Module pyloader(pyloader_path); - assert(pyloader); - - Glib::thread_init(); - - // Create an INITIAL STATE - Process p1("P1", 0,5,1); - Process p2("P2", 0,5,2); - Process p3("P3", 5,3,3); - Process p4("P4", 6,2,3); - Process p5("P5", 1,2,3); - Process p6("P6", 10,2,1); - - SchedulableStatus ss1(p1); - SchedulableStatus ss2(p2); - SchedulableStatus ss3(p3); - SchedulableStatus ss4(p4); - SchedulableStatus ss5(p5); - SchedulableStatus ss6(p6); - - SchedulableList initial; - initial.add_at_bottom(ss1); - initial.add_at_bottom(ss2); - initial.add_at_bottom(ss3); - initial.add_at_bottom(ss4); - initial.add_at_bottom(ss5); - initial.add_at_bottom(ss6); - History::get_instance().enqueue_slice(initial); Scheduler::get_instance(); // Forces initialization of scheduler. // Cross fingers (depends if PythonPolicyManager // static object has been initialized before?). - - //the textual simulation - TextSimulation text_sim; - History::get_instance().attach(&text_sim); + + //initialize history + TestHistory::get_instance(); //textual IO memory::smart_ptr io(new StandardIO());