|
From: <ba...@us...> - 2009-01-08 17:02:50
|
Revision: 156
http://scstudio.svn.sourceforge.net/scstudio/?rev=156&view=rev
Author: babicaj
Date: 2009-01-08 17:02:30 +0000 (Thu, 08 Jan 2009)
Log Message:
-----------
msc duplicator bug removed -- race checker is now working with correct data
Modified Paths:
--------------
trunk/src/check/pseudocode/msc_duplicators.cpp
trunk/tests/race_checker_test.cpp
Modified: trunk/src/check/pseudocode/msc_duplicators.cpp
===================================================================
--- trunk/src/check/pseudocode/msc_duplicators.cpp 2009-01-06 21:28:18 UTC (rev 155)
+++ trunk/src/check/pseudocode/msc_duplicators.cpp 2009-01-08 17:02:30 UTC (rev 156)
@@ -129,7 +129,11 @@
//in this case currently traversed event isn't alone in elements
MscElementPList::const_iterator i = elements.end();
i--; i--;
- return dynamic_cast<CoregionEvent*>(*i);
+ if(dynamic_cast<CoregionEventRelation*>(*i))
+ {
+ i--;
+ return dynamic_cast<CoregionEvent*>(*i);
+ }
}
return NULL;
}
@@ -146,13 +150,14 @@
void EventsCreatorListener::create_successor(Event* e)
{
- CoregionEvent* coreg_new_event = dynamic_cast<CoregionEvent*>(e);
- if(coreg_new_event)
+ CoregionEvent* coreg_new = dynamic_cast<CoregionEvent*>(m_duplicator->get_copy(e));
+ if(coreg_new)
{
CoregionEvent* preceding = get_preceding_event();
if(preceding)
{
- preceding->add_successor(coreg_new_event);
+ CoregionEvent* preceding_new = dynamic_cast<CoregionEvent*>(m_duplicator->get_copy(preceding));
+ preceding_new->add_successor(coreg_new);
}
}
}
Modified: trunk/tests/race_checker_test.cpp
===================================================================
--- trunk/tests/race_checker_test.cpp 2009-01-06 21:28:18 UTC (rev 155)
+++ trunk/tests/race_checker_test.cpp 2009-01-08 17:02:30 UTC (rev 156)
@@ -256,11 +256,58 @@
return check(hmsc1,true,false);
}
+bool HMscE()
+{
+ std::cout << "HMscE:" << std::endl;
+
+ BMscPtr bmsc1(new BMsc("BMsc"));
+ InstancePtr instance1(new Instance("1"));
+ InstancePtr instance2(new Instance("2"));
+ bmsc1->add_instance(instance1);
+ bmsc1->add_instance(instance2);
+ StrictOrderAreaPtr strict(new StrictOrderArea());
+ CoregionAreaPtr coregion(new CoregionArea());
+
+ instance1->add_area(coregion);
+ instance2->add_area(strict);
+
+
+
+ EventPtr e1 = strict->add_event();
+ EventPtr e2 = strict->add_event();
+
+ CoregionEventPtr e3(new CoregionEvent());
+ CoregionEventPtr e4(new CoregionEvent());
+ coregion->add_event(e3);
+ coregion->add_event(e4);
+ e3->add_successor(e4.get());
+
+ CompleteMessagePtr m1 = new CompleteMessage("b1");
+ m1->glue_events(e1, e3);
+ CompleteMessagePtr m2 = new CompleteMessage("d1");
+ m2->glue_events(e4, e2);
+
+ HMscPtr hmsc1(new HMsc("HMsc"));
+ StartNodePtr start1 = new StartNode();
+ hmsc1->set_start(start1);
+ ReferenceNodePtr r1(new ReferenceNode());
+ EndNodePtr end1(new EndNode());
+ hmsc1->add_node(r1);
+ hmsc1->add_node(end1);
+ start1->add_successor(r1.get());
+ r1->add_successor(end1.get());
+
+ r1->set_msc(bmsc1);
+
+ return check(hmsc1,true,true);
+}
+
int main(int argc, char** argv) {
RETURN_IF_FAILED(HMscA());
RETURN_IF_FAILED(HMscB());
RETURN_IF_FAILED(HMscC());
RETURN_IF_FAILED(HMscD());
+ RETURN_IF_FAILED(HMscE());
return 0;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|