[Avida-SVN] r1684 - branches/uml/source/main
hjg at myxo.css.msu.edu
hjg at myxo.css.msu.edu
Sun Jun 17 17:13:16 PDT 2007
Author: hjg
Date: 2007-06-17 20:13:16 -0400 (Sun, 17 Jun 2007)
New Revision: 1684
Modified:
branches/uml/source/main/cTaskContext.h
branches/uml/source/main/cTaskLib.cc
branches/uml/source/main/cTaskLib.h
Log:
Bug fix for when to run verification tasks.
Modified: branches/uml/source/main/cTaskContext.h
===================================================================
--- branches/uml/source/main/cTaskContext.h 2007-06-15 18:34:05 UTC (rev 1683)
+++ branches/uml/source/main/cTaskContext.h 2007-06-18 00:13:16 UTC (rev 1684)
@@ -63,7 +63,7 @@
tBuffer<int>* m_received_messages;
int m_logic_id;
bool m_on_divide;
- int task_success_complete;
+ bool task_success_complete;
cTaskEntry* m_task_entry;
@@ -89,7 +89,7 @@
, m_task_entry(NULL)
, m_task_states(NULL)
, organism(in_org)
- , task_success_complete(0)
+ , task_success_complete(true)
{
}
Modified: branches/uml/source/main/cTaskLib.cc
===================================================================
--- branches/uml/source/main/cTaskLib.cc 2007-06-15 18:34:05 UTC (rev 1683)
+++ branches/uml/source/main/cTaskLib.cc 2007-06-18 00:13:16 UTC (rev 1684)
@@ -411,6 +411,8 @@
NewTask(name, "Successfully ran hydra", &cTaskLib::Task_Hydra);
else if (name == "spin1") //
NewTask(name, "Successfully ran Spin", &cTaskLib::Task_SpinN1);
+ else if (name == "spin-w1") //
+ NewTask(name, "Successfully ran Spin witness trace", &cTaskLib::Task_SpinW1);
else if (name == "mult_trans") //
NewTask(name, "Successfully completed multiple transitions", &cTaskLib::Task_MultTrans);
else if (name == "mod_eval") //
@@ -2658,6 +2660,10 @@
double cTaskLib::Task_Trans1(cTaskContext& ctx) const
{
double bonus = 0.0;
+
+ //Init
+ ctx.task_success_complete = true;
+
// if (ctx.organism->currTrans(1, -1, -1, -1, -1, "^TempSensor.getOpState()")) {
// if (ctx.organism->currTrans(1, -1, -1, -1, -1, 1)) {
// if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(-1, -1, -1, -1, 1))
@@ -2666,13 +2672,11 @@
// temp sensor
if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(0, 1, 0, 0, 0))
{
-
-
- ctx.task_success_complete = 1;
+ // ctx.task_success_complete += 1;
bonus = 1.0;
}
- ctx.task_success_complete = 0;
+ ctx.task_success_complete = ctx.task_success_complete && bonus;
return bonus;
}
@@ -2687,12 +2691,10 @@
// temp sensor
if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(1, 2, 0, 0, 2))
{
-
-
- ctx.task_success_complete += 1;
bonus = 1.0;
}
-
+
+ ctx.task_success_complete = ctx.task_success_complete && bonus;
return bonus;
}
@@ -2708,12 +2710,10 @@
// temp sensor
if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(2, 3, 2, 0, 0))
{
-
-
bonus = 1.0;
- ctx.task_success_complete += 1;
}
+ ctx.task_success_complete = ctx.task_success_complete && bonus;
return bonus;
}
@@ -2729,11 +2729,10 @@
// temp sensor
if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(3, 1, 0, 0, 0))
{
-
- ctx.task_success_complete += 1;
bonus = 1.0;
}
-
+
+ ctx.task_success_complete = ctx.task_success_complete && bonus;
return bonus;
}
@@ -2746,12 +2745,10 @@
// if (ctx.organism->getUMLModel()->getStateDiagram(0)->findTrans(-1, -1, -1, -1, 1))
if (ctx.organism->getUMLModel()->getStateDiagram(0)->findTrans(4, 0, 3, 0, 0))
{
-
-
- ctx.task_success_complete += 1;
bonus = 1.0;
}
-
+
+ ctx.task_success_complete = ctx.task_success_complete && bonus;
return bonus;
}
@@ -2765,13 +2762,10 @@
// if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(-1, -1, -1, -1, 1))
if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(0, 4, 2, 1, 0))
{
-
-
- ctx.task_success_complete = 1;
bonus = 1.0;
}
-
- ctx.task_success_complete = 0;
+
+ ctx.task_success_complete = ctx.task_success_complete && bonus;
return bonus;
}
@@ -2783,12 +2777,10 @@
// if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(-1, -1, 1, -1, -1))
if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(4, 1, 0, 1, 0))
{
-
-
- ctx.task_success_complete += 1;
bonus = 1.0;
}
-
+
+ ctx.task_success_complete = ctx.task_success_complete && bonus;
return bonus;
}
@@ -2801,12 +2793,10 @@
// if (ctx.organism->getUMLModel()->getStateDiagram(0)->findTrans(-1, -1, 1, -1, -1))
if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(1, 3, 1, 1, 1))
{
-
-
bonus = 1.0;
- ctx.task_success_complete += 1;
}
+ ctx.task_success_complete = ctx.task_success_complete && bonus;
return bonus;
}
@@ -2819,11 +2809,10 @@
// if (ctx.organism->getUMLModel()->getStateDiagram(0)->findTrans(-1, -1, -1, -1, 3))
if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(3, 2, 2, 0, 3))
{
-
- ctx.task_success_complete += 1;
- bonus = 1.0;
+ bonus = 1.0;
}
+ ctx.task_success_complete = ctx.task_success_complete && bonus;
return bonus;
}
@@ -2836,12 +2825,10 @@
// if (ctx.organism->getUMLModel()->getStateDiagram(0)->findTrans(-1, -1, -1, -1, 1))
if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(2, 4, 3, 2, 1))
{
-
-
- ctx.task_success_complete += 1;
- bonus = 1.0;
+ bonus = 1.0;
}
+ ctx.task_success_complete = ctx.task_success_complete && bonus;
return bonus;
}
@@ -2870,7 +2857,6 @@
}
-// broken - 4/11
double cTaskLib::Task_Hydra(cTaskContext& ctx) const
{
cOrganism* organism = ctx.organism;
@@ -2886,11 +2872,15 @@
*/
// Check for task success...
- if (ctx.task_success_complete < 4) {
+
+
+ if (!ctx.task_success_complete) {
return 0;
}
+
+
m_world->GetStats().HydraAttempt();
double bonus = 0.0;
@@ -2955,14 +2945,15 @@
// if there are no errors, return 0 from hydraulic. otherwise, return non-zero.
if(status != 0) {
-// ctx->task_failed = 0;
// organism->setBonusInfo("hydra", 0.0);
+ ctx.task_success_complete = false;
+
return 0.0;
} else {
- // ctx->task_failed = ctx->task_failed && 1;
-// ctx.task_success_complete += 1;
m_world->GetStats().HydraPassed();
// organism->setBonusInfo("hydra", 1.0);
+ ctx.task_success_complete = true;
+
return 1.0;
}
@@ -2993,6 +2984,31 @@
return 3.0;
}
+double cTaskLib::SpinWitnessCoprocess(cTaskContext& ctx, const std::string& neverclaimFile) const {
+ cOrganism* organism = ctx.organism;
+// m_world->GetStats().SpinAttempt();
+ int status=0;
+ int num_witness = 0;
+ std::string cmd = "cat " + neverclaimFile + " >> tmp.pr && ./spin -a tmp.pr &> /dev/null";
+ if(system(cmd.c_str())!=0) return 0.0;
+// m_world->GetStats().SpinPassed();
+// m_world->GetStats().PanAttempt();
+
+ if(system("/usr/bin/gcc -DMEMLIM=512 pan.c -o pan &> /dev/null")!=0) return 0.0;
+ if(system("./pan -e -n -a -w19 -m100000 -c25 &> ./pan.out")!=0) return 0.0;
+ num_witness = (system("cat pan.out | perl -e 'while(<STDIN>) { if(/errors:\\s(\\d+)/) {exit($1);}}'"));
+// if(system("cat pan.out | perl -e 'while(<STDIN>) { if(/unreached/) {exit(1);}}'")!=0) return 0.0;
+
+
+// std::ostringstream strstrm;
+// strstrm << "cp tmp.xmi " << m_world->GetStats().GetUpdate() << "." << organism->GetID();
+// strstrm << ".xml";
+// if(system(strstrm.str().c_str())!=0) return 0.0;
+
+// m_world->GetStats().PanPassed();
+ return num_witness;
+}
+
double cTaskLib::Task_SpinN1(cTaskContext& ctx) const {
cOrganism* organism = ctx.organism;
std::string temp = organism->getStateDiagram()->getXMI();
@@ -3019,6 +3035,23 @@
return temp1;
}
+
+
+double cTaskLib::Task_SpinW1(cTaskContext& ctx) const {
+ cOrganism* organism = ctx.organism;
+ std::string temp = organism->getStateDiagram()->getXMI();
+ double temp1 = 0.0;
+
+
+ // check property
+ if (ctx.task_success_complete) {
+ temp1 += SpinWitnessCoprocess(ctx, "W1");
+ }
+
+ return temp1;
+
+}
+
double cTaskLib::Task_MultTrans(cTaskContext& ctx) const {
return (2^ctx.task_success_complete);
}
Modified: branches/uml/source/main/cTaskLib.h
===================================================================
--- branches/uml/source/main/cTaskLib.h 2007-06-15 18:34:05 UTC (rev 1683)
+++ branches/uml/source/main/cTaskLib.h 2007-06-18 00:13:16 UTC (rev 1684)
@@ -291,10 +291,13 @@
double Task_NumTrans(cTaskContext& ctx) const;
double Task_Hydra(cTaskContext& ctx) const;
double SpinCoprocess(cTaskContext& ctx, const std::string& neverclaimFile) const;
+ double SpinWitnessCoprocess(cTaskContext& ctx, const std::string& neverclaimFile) const;
double Task_SpinN1(cTaskContext& ctx) const;
+ double Task_SpinW1(cTaskContext& ctx) const;
double Task_MultTrans(cTaskContext& ctx) const;
double Task_ModEval(cTaskContext& ctx) const;
+
};
More information about the Avida-cvs
mailing list