- Fix compilation of test-history

git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@515 3ecf2c5c-341e-0410-92b4-d18e462d057c
This commit is contained in:
tchernobog 2006-03-09 11:37:09 +00:00
parent 92e6f3be2b
commit 0c2cba8bbe
6 changed files with 169 additions and 98 deletions

View File

@ -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: -

View File

@ -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

View File

@ -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;
}

View File

@ -55,32 +55,32 @@ namespace sgpem
\param time The inquired time instant.
\return The Schedulable object running at the given time.
*/
memory::smart_ptr<sgpem::SchedulableStatus> get_scheduled_at(int time) const;
virtual memory::smart_ptr<sgpem::SchedulableStatus> 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<sgpem::SchedulableList> get_simulation_status_at(int time) const;
virtual memory::smart_ptr<sgpem::SchedulableList> 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<sgpem::Slice> _slices;
};

View File

@ -36,6 +36,7 @@
#include <vector>
#include <iostream>
#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);

View File

@ -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 <glibmm/module.h>
#include "standard_io.hh"
#include "text_simulation.hh"
#include "templates/smartp.hh"
#include <cassert>
#include <string>
@ -38,94 +36,76 @@
#include <vector>
#include <iostream>
#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<sgpem::SchedulableStatus> get_scheduled_at(int time)
memory::smart_ptr<sgpem::SchedulableStatus> 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<sgpem::SchedulableList> 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
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<IOManager> io(new StandardIO());