|
From: <ma...@us...> - 2011-07-13 08:31:34
|
Revision: 1139
http://scstudio.svn.sourceforge.net/scstudio/?rev=1139&view=rev
Author: madzin
Date: 2011-07-13 08:31:27 +0000 (Wed, 13 Jul 2011)
Log Message:
-----------
Modify output of Find Flow algorithm. Add new visualization of a path and corupted time constraints.
Modified Paths:
--------------
trunk/src/data/Z120/z120_save.cpp
trunk/src/data/msc.h
trunk/src/membership/membership_alg.cpp
trunk/src/membership/membership_alg.h
trunk/src/membership/membership_base.h
trunk/src/membership/membership_time.cpp
trunk/src/membership/membership_time.h
trunk/src/view/visio/addon/visualize.cpp
trunk/tests/membership/membership_test.cpp
Modified: trunk/src/data/Z120/z120_save.cpp
===================================================================
--- trunk/src/data/Z120/z120_save.cpp 2011-07-12 21:33:15 UTC (rev 1138)
+++ trunk/src/data/Z120/z120_save.cpp 2011-07-13 08:31:27 UTC (rev 1139)
@@ -328,6 +328,9 @@
case MARKED: stream << "/* MARKED */" << std::endl; break;
case ADDED: stream << "/* ADDED */" << std::endl; break;
case REMOVED: stream << "/* REMOVED */" << std::endl; break;
+ case NOT_COVER: stream << "/* NOT_COVER */" << std::endl; break;
+ case NOT_FULL_COVER: stream << "/* NOT_FULL_COVER */" << std::endl; break;
+ case PATH: stream << "/* PATH */" << std::endl; break;
default: throw std::runtime_error("Error: unexpected behaviour");
}
Modified: trunk/src/data/msc.h
===================================================================
--- trunk/src/data/msc.h 2011-07-12 21:33:15 UTC (rev 1138)
+++ trunk/src/data/msc.h 2011-07-13 08:31:27 UTC (rev 1139)
@@ -143,7 +143,7 @@
#endif
-enum MarkType {NONE, MARKED, ADDED, REMOVED};
+enum MarkType {NONE, MARKED, ADDED, REMOVED, NOT_COVER, NOT_FULL_COVER, PATH};
/**
* \brief Common basic abstract class for all elements of MSC
Modified: trunk/src/membership/membership_alg.cpp
===================================================================
--- trunk/src/membership/membership_alg.cpp 2011-07-12 21:33:15 UTC (rev 1138)
+++ trunk/src/membership/membership_alg.cpp 2011-07-13 08:31:27 UTC (rev 1139)
@@ -16,8 +16,6 @@
*/
#include "membership/membership_alg.h"
-#include "check/time/time_pseudocode.h"
-#include "check/time/tightening.h"
#include <map>
/*
@@ -39,6 +37,9 @@
*
* returns the cover of the specification, when the cover is not supposed to be shown it returns NULL.
* this occurs when concrete flow does not match the specification or the specification is bMSC.
+ *
+ * return: in current version only NULL,
+ * NULL value means that the specification cover will not be depicted.
*/
MscPtr MembershipAlg::find_flow(MscPtr msc, MscPtr bmsc, std::vector<std::wstring> instances,
std::map<std::wstring, std::vector<MscPtr> >& messages)
@@ -63,16 +64,52 @@
if (hmsc != NULL)
{
result = search_hmsc(c, hmsc, bmsc_f);
- delete c;
if(result == NULL)
{
- print_report(RS_ERROR, L"HMsc specification does not contain \"" + bmsc->get_label() + L"\" flow.");
+ print_report(RS_ERROR, L"The specification does not contain \"" + bmsc->get_label() + L"\" flow.");
+ delete c;
return NULL;
}
else
{
- print_report(RS_NOTICE, L"Flow \"" + bmsc->get_label() + L"\" meets the specification.");
+ if(c->get_min_not_covered_intervals() != 0)
+ {
+ std::wstring msg = L"Some intervals does not satisfy the time constraints. ";
+ msg += L"For more information: ";
+
+ std::vector<MscPtr> result_vec;
+ result_vec.push_back(result);
+
+ messages.insert(std::make_pair(msg, result_vec));
+
+ delete c;
+ return NULL;
+ }
+
+ if(c->get_min_not_full_covered_intervals() != 0)
+ {
+ std::wstring msg = L"Some intervals could not satisfy the time constraints. ";
+ msg += L"For more information: ";
+
+ std::vector<MscPtr> result_vec;
+ result_vec.push_back(result);
+
+ messages.insert(std::make_pair(msg, result_vec));
+
+ delete c;
+ return NULL;
+ }
+
+ std::wstring msg = L"Flow \"" + bmsc->get_label() + L"\" meets the specification. ";
+ msg += L"The specification cover: ";
+
+ std::vector<MscPtr> result_vec;
+ result_vec.push_back(result);
+
+ messages.insert(std::make_pair(msg, result_vec));
+
+ delete c;
return result;
}
}
@@ -84,26 +121,33 @@
if(bmsc != NULL)
{
result = search_bmsc(c, bmsc, bmsc_f);
- delete c;
- if(result != NULL)
+ if(result == NULL)
{
- print_report(RS_NOTICE, L"Flow \"" + bmsc->get_label() + L"\" meets the specification.");
- }
- else
- {
- //TODO check the output message whether the message that the flow does not meet the specification is printed.
if(!instances.empty())
+ {
+ std::wstring instances_name;
+
+ for(unsigned int i = 0; i < instances.size(); i++)
+ {
+ if(i != 0)
+ instances_name += L",";
+
+ instances_name += instances[i];
+ }
+
+ print_report(RS_ERROR, L"Flow \"" + bmsc->get_label() + L"\" does not meet the specification on instances:" + instances_name);
+
+ delete c;
return NULL;
+ }
std::vector<MscPtr> flows;
flows.push_back(bmsc_f);
result = diff(bmsc, flows);
- if(result == NULL)
- print_report(RS_ERROR, L"Error: Internal Error.");
- else
+ if(result != NULL)
{
std::wstring message;
message = L"Msc \"" + bmsc_f->get_label() + L"\" does not meet the specification. Diff: ";
@@ -113,9 +157,44 @@
messages.insert(std::make_pair(message, diff_result));
}
+
+std::cerr << "som tuuuuuuuuuuuuu" << std::endl;
+
+ delete c;
+ return NULL;
}
- //the NULL value means that the specification cover will not be depicted
+ if(c->get_min_not_covered_intervals() != 0)
+ {
+ std::wstring msg = L"Some intervals does not satisfy the time constraints. ";
+ msg += L"For more information: ";
+
+ std::vector<MscPtr> result_vec;
+ result_vec.push_back(result);
+
+ messages.insert(std::make_pair(msg, result_vec));
+
+ delete c;
+ return NULL;
+ }
+
+ if(c->get_min_not_full_covered_intervals() != 0)
+ {
+ std::wstring msg = L"Some intervals could not satisfy the time constraints. ";
+ msg += L"For more information: ";
+
+ std::vector<MscPtr> result_vec;
+ result_vec.push_back(result);
+
+ messages.insert(std::make_pair(msg, result_vec));
+
+ delete c;
+ return NULL;
+ }
+
+ print_report(RS_NOTICE, L"Flow \"" + bmsc->get_label() + L"\" meets the specification.");
+
+ delete c;
return NULL;
}
}
@@ -146,9 +225,9 @@
msc_cover.push_back(msc);
if(bmscs.size() > 1)
- messages.insert(std::make_pair(L"Flows coverege of the specification.", msc_cover));
+ messages.insert(std::make_pair(L"Flows coverage of the specification.", msc_cover));
else
- messages.insert(std::make_pair(L"Flow coverege of the specification.", msc_cover));
+ messages.insert(std::make_pair(L"Flow coverage of the specification.", msc_cover));
}
return messages;
@@ -173,18 +252,19 @@
dup_hmsc = hmsc;
// dup_hmsc = dup_hmsc = duplicator.duplicate(hmsc);
+ c->set_hmsc(dup_hmsc);
+
//creates configuration of defined bMSC
ConfigurationPtr searched_conf = new Configuration(bmsc_f->get_instances());
StartNodePtr start_node = dup_hmsc->get_start();
- //strt of searching
- if (check_branch(c, start_node, searched_conf))
+ //strt of searching, make result in case the flow was found or message matching was found
+ //(not satisfied time constraints are marked in make_result function)
+ if (check_branch(c, start_node, searched_conf) || c->get_result_path_size() > 0)
return make_result(c, dup_hmsc);
else
return NULL;
-
- return NULL;
}
bool check_end_node(MembershipContext* c, EndNodePtr end, ConfigurationPtr b)
@@ -204,6 +284,29 @@
}
}
+bool store_result(MembershipContext* c)
+{
+ if(c->get_not_full_covered_intervals().size() == 0 && c->get_not_covered_intervals().size() == 0)
+ return true;
+
+ if(c->get_not_covered_intervals().size() < c->get_min_not_covered_intervals())
+ {
+ c->set_min_not_covered_intervals(c->get_not_covered_intervals().size());
+ c->set_min_not_full_covered_intervals(c->get_not_full_covered_intervals().size());
+ c->update_result_path();
+ }
+ else
+ {
+ if(c->get_not_covered_intervals().size() == c->get_min_not_covered_intervals() &&
+ c->get_not_full_covered_intervals().size() < c->get_min_not_full_covered_intervals())
+ {
+ c->set_min_not_full_covered_intervals(c->get_not_full_covered_intervals().size());
+ c->update_result_path();
+ }
+ }
+
+ return false;
+}
/*
* Checks branch if the communication is coressponding
*
@@ -223,7 +326,7 @@
if (end != NULL)
{
if(check_end_node(c, end, b) && check_time_constraints(c))
- return true;
+ return store_result(c);
else
return false;
}
@@ -983,54 +1086,35 @@
return false;
}
-MscPtr make_result(MembershipContext* c, HMscPtr msc)
+//! makes not full covered intervals colored
+void color_intervals(MembershipContext* c)
{
- if(c->get_not_covered_intervals().size() > 0)
- {
- if(c->get_not_covered_intervals().size() > 1)
- c->get_mem()->print_report(RS_ERROR, L"Marked time intervals in the specification is not full covered.");
- else
- c->get_mem()->print_report(RS_ERROR, L"Marked time interval in the specification is not full covered.");
+ std::vector<TimeRelationPtr> relations = c->get_not_full_covered_intervals();
- color_intervals(c);
- }
+ for(unsigned int i = 0; i < relations.size(); i++)
+ relations[i]->set_marked(NOT_FULL_COVER);
- if(c->get_print_path())
- return color_path(c, msc);
- else
- {
- HMscNodePtr start = msc->get_start();
+ relations = c->get_not_covered_intervals();
- if(start == NULL)
- throw std::runtime_error("Unexpected behaviour.");
-
- PredecessorNode* predecessor = dynamic_cast<PredecessorNode*>(start.get());
-
- if(predecessor == NULL)
- throw std::runtime_error("Unexpected behaviour.");
-
- SuccessorNode* suc = predecessor->get_successors().front()->get_successor();
- ReferenceNode* ref = dynamic_cast<ReferenceNode*>(suc);
-
- if(ref == NULL)
- throw std::runtime_error("Unexpected behaviour.");
-
- return ref->get_msc();
- }
+ for(unsigned int i = 0; i < relations.size(); i++)
+ relations[i]->set_marked(NOT_COVER);
}
+//! makes path colored
HMscPtr color_path(MembershipContext* c, HMscPtr msc)
{
HMscNodePtr node;
PredecessorNode* predecessor;
SuccessorNode* successor;
- NodeRelationPtrVector predecessors_rel;
+ NodeRelationPtrVector predecessors_rel;
while(c->get_path_size() > 0)
{
node = c->top_pop_path();
- node->set_marked();
+ if(node->get_marked() == NONE)
+ node->set_marked(PATH);
+
//in case the node is reference,
//this increase the value of attribute membership_counter
//membership counter - store amount of node memberships (occurrences) in the flow
@@ -1049,20 +1133,42 @@
//end node is not predecessor
if(predecessor == NULL)
continue;
-
+
//mark the connections
for(unsigned int i = 0; i < predecessors_rel.size(); i++)
if(predecessors_rel[i]->get_predecessor() == predecessor)
- predecessors_rel[i]->set_marked();
+ predecessors_rel[i]->set_marked(PATH);
}
return msc;
}
-void color_intervals(MembershipContext* c)
+MscPtr make_result(MembershipContext* c, HMscPtr msc)
{
- std::vector<TimeRelationPtr> relations = c->get_not_covered_intervals();
-
- for(unsigned int i = 0; i < relations.size(); i++)
- relations[i]->set_marked();
+//TODO remove the second parameter and use duplicator to create new
+ if(c->get_not_full_covered_intervals().size() > 0 || c->get_not_covered_intervals().size() > 0)
+ color_intervals(c);
+
+ if(c->get_print_path())
+ return color_path(c, msc);
+ else
+ {
+ HMscNodePtr start = msc->get_start();
+
+ if(start == NULL)
+ throw std::runtime_error("Unexpected behaviour.");
+
+ PredecessorNode* predecessor = dynamic_cast<PredecessorNode*>(start.get());
+
+ if(predecessor == NULL)
+ throw std::runtime_error("Unexpected behaviour.");
+
+ SuccessorNode* suc = predecessor->get_successors().front()->get_successor();
+ ReferenceNode* ref = dynamic_cast<ReferenceNode*>(suc);
+
+ if(ref == NULL)
+ throw std::runtime_error("Unexpected behaviour.");
+
+ return ref->get_msc();
+ }
}
Modified: trunk/src/membership/membership_alg.h
===================================================================
--- trunk/src/membership/membership_alg.h 2011-07-12 21:33:15 UTC (rev 1138)
+++ trunk/src/membership/membership_alg.h 2011-07-13 08:31:27 UTC (rev 1139)
@@ -98,10 +98,4 @@
MscPtr make_result(MembershipContext* c, HMscPtr msc);
-//! makes path colored
-HMscPtr color_path(MembershipContext* c, HMscPtr msc);
-
-//! makes not full covered intervals colored
-void color_intervals(MembershipContext* c);
-
#endif
Modified: trunk/src/membership/membership_base.h
===================================================================
--- trunk/src/membership/membership_base.h 2011-07-12 21:33:15 UTC (rev 1138)
+++ trunk/src/membership/membership_base.h 2011-07-13 08:31:27 UTC (rev 1139)
@@ -21,6 +21,7 @@
#include <set>
#include <vector>
#include <string>
+#include <climits>
#include "data/msc.h"
#include "data/searcher.h"
#include "membership/export.h"
@@ -34,6 +35,7 @@
class MembershipAlg;
class SnapshotContext;
class CoregionOrdering;
+class MembershipContext;
class MembershipTimeRelation;
enum check_type {membership, receive_ordering};
@@ -52,6 +54,7 @@
private:
std::set<Event*> start;
std::set<Event*> end;
+ TimeRelationPtr original_relation;
MscTimeIntervalSet<double> interval_set;
@@ -63,9 +66,10 @@
friend void intrusive_ptr_release(const MembershipTimeRelation *ptr);
public:
- MembershipTimeRelation(MscTimeIntervalSet<double> interval_set)
+ MembershipTimeRelation(TimeRelationPtr original_relation)
{
- this->interval_set = interval_set;
+ this->original_relation = original_relation;
+ this->interval_set = original_relation->get_interval_set();
this->m_counter = 0;
}
@@ -102,6 +106,11 @@
{
return interval_set;
}
+
+ TimeRelationPtr get_original_rel()
+ {
+ return original_relation;
+ }
};
inline void intrusive_ptr_add_ref(const MembershipTimeRelation *ptr)
@@ -128,6 +137,7 @@
int max_id; //! identification for receive events
BMscPtr bmsc; //! bmsc which represents the flow
MscPtr msc; //! msc which represents the specification
+ HMscPtr hmsc; //! hmsc which represents the specification //TODO (find uses hmsc, diff uses msc)
std::vector<std::wstring> focused_instances; //! name of instances on which a user is focused on
std::map<CoregionAreaPtr, SnapshotContextPtr> snapshots; //! snapshots of context for each coregion
std::vector<Event*> attributed_events; //! events with attribute
@@ -137,9 +147,17 @@
std::map<CoregionAreaPtr, std::vector<CoregionOrderingPtr> > checked_orderings; //! checked possibilities of coregion ordering
std::map<CoregionAreaPtr, CoregionOrderingPtr> coregion_ordering; //! save ordering of coregion events in appropriate coregion
BMscIntervalSetComponentMatrix* time_matrix; //! matrix of all time intervals among events in bmsc
+ std::vector<TimeRelationPtr> not_covered_intervals; //! intervals in specification which are not satisfied
std::vector<TimeRelationPtr> not_full_covered_intervals; //! intervals in specification which are not full covered
std::stack<HMscNodePtr> path; //! store information about the path if the flow meets the specification
bool print_path; //! store whether the path will be printed
+
+// std::multimap<int, HMscPtr> not_covered_intervals_per_path;
+// std::multimap<int, HMscPtr> not_full_covered_intervals_per_path;
+ unsigned int min_not_covered_intervals;
+ unsigned int min_not_full_covered_intervals;
+ std::vector<HMscNodePtr> result_path;
+
std::stack<std::map<TimeRelationEventPtr, std::vector<MembershipTimeRelationPtr> > > relative_time;
std::stack<std::vector<TimeRelationRefNodePtr> > ref_node_time_stack;
std::map<TimeRelationRefNodePtr, std::vector<MembershipTimeRelationPtr> > ref_node_time; //! key is a time relation in hmsc specification and set of MembershipTimeRelationPtr which hold possible events for the comparison.
@@ -159,6 +177,8 @@
print_path = true;
diff_type = NOT_DIFF;
checking_time_mode = NO_TIME;
+ min_not_covered_intervals = UINT_MAX;
+ min_not_full_covered_intervals = UINT_MAX;
}
void set_mem(MembershipAlg* m)
@@ -190,6 +210,11 @@
{
return bmsc;
}
+
+ void set_hmsc(HMscPtr h)
+ {
+ hmsc = h;
+ }
void set_specification(MscPtr m)
{
@@ -340,16 +365,86 @@
return time_matrix;
}
- void add_not_covered_interval(TimeRelationPtr hmsc_inter)
+ void add_not_full_covered_interval(TimeRelationPtr inter)
{
- not_full_covered_intervals.push_back(hmsc_inter);
+ not_full_covered_intervals.push_back(inter);
}
- const std::vector<TimeRelationPtr> get_not_covered_intervals()
+ const std::vector<TimeRelationPtr> get_not_full_covered_intervals()
{
return not_full_covered_intervals;
}
+/*
+ void add_not_full_covered_path()
+ {
+ MscPtr result = make_result(this, hmsc);
+ not_full_covered_intervals_per_path.insert(std::make_pair(not_full_covered_intervals.size(), hmsc));
+
+ not_full_covered_intervals.clear();
+
+ while(path.empty())
+ {
+ path.pop();
+ }
+ }
+
+ std::multimap<int, HMscPtr> get_not_full_covered_paths()
+ {
+ return not_full_covered_intervals_per_path;
+ }
+*/
+
+ void add_not_covered_interval(TimeRelationPtr inter)
+ {
+ not_covered_intervals.push_back(inter);
+ }
+
+ const std::vector<TimeRelationPtr> get_not_covered_intervals()
+ {
+ return not_covered_intervals;
+ }
+
+/*
+ void add_not_covered_path()
+ {
+ MscPtr result = make_result(this, hmsc);
+ not_full_covered_intervals_per_path.insert(std::make_pair(not_covered_intervals.size(), hmsc));
+
+ not_covered_intervals.clear();
+ not_full_covered_intervals.clear();
+
+ while(path.empty())
+ {
+ path.pop();
+ }
+ }
+
+ std::multimap<int, HMscPtr> get_not_covered_paths()
+ {
+ return not_covered_intervals_per_path;
+ }
+*/
+ void set_min_not_covered_intervals(int x)
+ {
+ min_not_covered_intervals = x;
+ }
+
+ unsigned int get_min_not_covered_intervals()
+ {
+ return min_not_covered_intervals;
+ }
+
+ void set_min_not_full_covered_intervals(int x)
+ {
+ min_not_full_covered_intervals = x;
+ }
+
+ unsigned int get_min_not_full_covered_intervals()
+ {
+ return min_not_full_covered_intervals;
+ }
+
void push_path(HMscNodePtr node)
{
path.push(node);
@@ -372,6 +467,11 @@
return path.size();
}
+ int get_result_path_size()
+ {
+ return result_path.size();
+ }
+
void print_msc_path(bool value)
{
print_path = value;
@@ -382,6 +482,22 @@
return print_path;
}
+ //TODO upravit aby nedochadzalo k tolkemu kopirovaniu
+ void update_result_path()
+ {
+ result_path.clear();
+
+ while(!path.empty())
+ {
+ result_path.push_back(top_pop_path());
+ }
+
+ for(int i = result_path.size()-1; i >=0; i--)
+ {
+ path.push(result_path[i]);
+ }
+ }
+
void add_relative_time(Event* e, TimeRelationEventPtrList list, Event* node_e)
{
std::map<TimeRelationEventPtr, std::vector<MembershipTimeRelationPtr> >::iterator map_it;
@@ -396,7 +512,7 @@
{
std::set<Event*> end;
end.insert(e);
- MembershipTimeRelationPtr time_rel = new MembershipTimeRelation((*list_it)->get_interval_set());
+ MembershipTimeRelationPtr time_rel = new MembershipTimeRelation(*list_it);
time_rel->set_end(end);
std::vector<MembershipTimeRelationPtr> vec;
@@ -407,7 +523,7 @@
{
std::set<Event*> start;
start.insert(e);
- MembershipTimeRelationPtr time_rel = new MembershipTimeRelation((*list_it)->get_interval_set());
+ MembershipTimeRelationPtr time_rel = new MembershipTimeRelation(*list_it);
time_rel->set_start(start);
std::vector<MembershipTimeRelationPtr> vec;
@@ -429,7 +545,7 @@
{
std::set<Event*> end;
end.insert(e);
- MembershipTimeRelationPtr time_rel = new MembershipTimeRelation((*list_it)->get_interval_set());
+ MembershipTimeRelationPtr time_rel = new MembershipTimeRelation(*list_it);
time_rel->set_end(end);
map_it->second.push_back(time_rel);
@@ -447,7 +563,7 @@
{
std::set<Event*> start;
start.insert(e);
- MembershipTimeRelationPtr time_rel = new MembershipTimeRelation((*list_it)->get_interval_set());
+ MembershipTimeRelationPtr time_rel = new MembershipTimeRelation(*list_it);
time_rel->set_start(start);
map_it->second.push_back(time_rel);
@@ -493,7 +609,7 @@
if(rel == NULL)
return ;
- MembershipTimeRelationPtr time_rel = new MembershipTimeRelation(rel->get_interval_set());
+ MembershipTimeRelationPtr time_rel = new MembershipTimeRelation(rel);
time_rel->set_start(event_set);
map_it = ref_node_time.find(rel);
Modified: trunk/src/membership/membership_time.cpp
===================================================================
--- trunk/src/membership/membership_time.cpp 2011-07-12 21:33:15 UTC (rev 1138)
+++ trunk/src/membership/membership_time.cpp 2011-07-13 08:31:27 UTC (rev 1139)
@@ -203,10 +203,10 @@
result = MscTimeIntervalSetD::set_intersection(hmsc_inter, bmsc_inter);
if(result.is_empty())
- return false;
+ c->add_not_covered_interval(map_it->first);
else
if(result != bmsc_inter)
- c->add_not_covered_interval(map_it->first);
+ c->add_not_full_covered_interval(map_it->first);
}
}
//----------------------------------------------------------------------------------------------
@@ -225,10 +225,10 @@
result = MscTimeIntervalSetD::set_intersection(hmsc_absolute, bmsc_inter);
if(result.is_empty())
- return false;
+ c->add_not_covered_interval(map_it->first);
else
if(result != bmsc_inter)
- c->add_not_covered_interval(map_it->first);
+ c->add_not_full_covered_interval(map_it->first);
}
}
@@ -250,12 +250,10 @@
result = MscTimeIntervalSetD::set_intersection(hmsc_inter, bmsc_inter);
if(result.is_empty())
- return false;
+ c->add_not_covered_interval((*relative_it)->get_original_rel());
else
if(result != bmsc_inter)
-//TODO
-std::cerr << "Error: some relative interval was not satisfied" << std::endl;
-// c->add_not_covered_interval(relative_it->first);
+ c->add_not_full_covered_interval((*relative_it)->get_original_rel());
}
return true;
@@ -434,10 +432,10 @@
result = MscTimeIntervalSetD::set_intersection(hmsc_inter, bmsc_inter);
if(result.is_empty())
- return false;
+ c->add_not_covered_interval(map_it->first);
else
if(result != bmsc_inter)
- c->add_not_covered_interval(map_it->first);
+ c->add_not_full_covered_interval(map_it->first);
}
}
@@ -457,10 +455,10 @@
result = MscTimeIntervalSetD::set_intersection(hmsc_absolute, bmsc_inter);
if(result.is_empty())
- return false;
+ c->add_not_covered_interval(map_it->first);
else
if(result != bmsc_inter)
- c->add_not_covered_interval(map_it->first);
+ c->add_not_full_covered_interval(map_it->first);
}
}
@@ -479,12 +477,10 @@
result = MscTimeIntervalSetD::set_intersection(hmsc_inter, bmsc_inter);
if(result.is_empty())
- return false;
+ c->add_not_covered_interval((*relative_it)->get_original_rel());
else
if(result != bmsc_inter)
-//TODO
-std::cerr << "Error: some relative interval was not satisfied" << std::endl;
-// c->add_not_covered_interval(relative_it->first);
+ c->add_not_full_covered_interval((*relative_it)->get_original_rel());
}
return true;
Modified: trunk/src/membership/membership_time.h
===================================================================
--- trunk/src/membership/membership_time.h 2011-07-12 21:33:15 UTC (rev 1138)
+++ trunk/src/membership/membership_time.h 2011-07-13 08:31:27 UTC (rev 1139)
@@ -19,6 +19,8 @@
#define __MEMBERSHIP_TIME__
#include "membership/membership_additional.h"
+#include "check/time/time_pseudocode.h"
+#include "check/time/tightening.h"
bool check_time_constraints(MembershipContext* c);
Modified: trunk/src/view/visio/addon/visualize.cpp
===================================================================
--- trunk/src/view/visio/addon/visualize.cpp 2011-07-12 21:33:15 UTC (rev 1138)
+++ trunk/src/view/visio/addon/visualize.cpp 2011-07-13 08:31:27 UTC (rev 1139)
@@ -443,6 +443,8 @@
case MARKED: CShapeUtils::MarkShape(result, SC_RED); break;
case ADDED: CShapeUtils::MarkShape(result, SC_GREEN); break;
case REMOVED: CShapeUtils::MarkShape(result, SC_RED); break;
+ case NOT_COVER: CShapeUtils::MarkShape(result, SC_RED); break;
+ case NOT_FULL_COVER: CShapeUtils::MarkShape(result, SC_BLUE); break;
default: throw std::runtime_error("Error: unexpected behaviour");
}
@@ -683,6 +685,7 @@
case MARKED: CShapeUtils::MarkShape(shape, SC_RED); break;
case ADDED: CShapeUtils::MarkShape(shape, SC_GREEN); break;
case REMOVED: CShapeUtils::MarkShape(shape, SC_RED); break;
+ case PATH: CShapeUtils::MarkShape(shape, SC_GREEN); break;
default: throw std::runtime_error("Error: unexpected behaviour");
}
@@ -777,6 +780,7 @@
case MARKED: CShapeUtils::MarkShape(connector, SC_RED); break;
case ADDED: CShapeUtils::MarkShape(connector, SC_GREEN); break;
case REMOVED: CShapeUtils::MarkShape(connector, SC_RED); break;
+ case PATH: CShapeUtils::MarkShape(connector, SC_GREEN); break;
default: throw std::runtime_error("Error: unexpected behaviour");
}
Modified: trunk/tests/membership/membership_test.cpp
===================================================================
--- trunk/tests/membership/membership_test.cpp 2011-07-12 21:33:15 UTC (rev 1138)
+++ trunk/tests/membership/membership_test.cpp 2011-07-13 08:31:27 UTC (rev 1139)
@@ -150,7 +150,18 @@
if(result.empty())
std::cerr << "Result messages are empty" << std::endl;
else
-std::cerr << "Result messages are NOT empty" << std::endl;
+{
+ std::map<std::wstring, std::vector<MscPtr> >::iterator map_it;
+
+ for(map_it = result.begin(); map_it != result.end(); map_it++)
+ {
+ std::wcerr << map_it->first << std::endl;
+ for(unsigned int i = 0; i < map_it->second.size(); i++)
+ {
+ z120.save_msc(std::cout, TOWSTRING(filename), map_it->second.at(i));
+ }
+ }
+}
return errors;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|