Commit 8ad596ce authored by Savva Golubitsky's avatar Savva Golubitsky

all tests ready

parent 05347c7d
......@@ -361,7 +361,7 @@ def print_graph(cur_state, entities, bushes):
# print(cur_state.name, cur_state.selector)
if cur_state.selector not in toloadsel:
toloadsel.append(cur_state.selector)
body+="else {\n"+ "\tSEL_{} = {}();//{}\n".format(cur_state.name, cur_state.selector, cur_state.selector.comment )+"}\n"
body+="else {\n"+ "\tSEL_{} = {}(&data);//{}\n".format(cur_state.name, cur_state.selector, cur_state.selector.comment )+"}\n"
else:
body+="else {\n\tfor (int seli = 0;"+" seli < {};".format(len(cur_state.transfers))+" seli++)\n"+"\t\tSEL_{}[seli]=true;".format(cur_state.name)+"\n}\n"
for i, br in enumerate(cur_b.branches):
......@@ -441,12 +441,12 @@ class _Bush():
if edge.pred_f.name != "":
if edge.pred_f not in toloadpred:
toloadpred.append(edge.pred_f)
res+="\tcheck_pred({}(data), \"{}\");".format(edge.pred_f, edge.pred_f)
res+="\tcheck_pred({}(&data), \"{}\");".format(edge.pred_f, edge.pred_f)
res+="//{}\n".format(edge.pred_f.comment) if edge.pred_f.comment != "" else "\n"
if edge.morph_f.name != "":
if edge.morph_f not in toloadmorph:
toloadmorph.append(edge.morph_f)
res+="\t{}(data);".format(edge.morph_f)
res+="\t{}(&data);".format(edge.morph_f)
res+="//{}\n".format(edge.morph_f.comment) if edge.morph_f.comment != "" else "\n"
return res, toloadpred, toloadmorph
......
g++ -c -fPIC printers.cpp -o printers.o -I./dev ; g++ printers.o -shared -o libprinters.so;
if g++ ./template.cpp -o template.out -I./dev ./dev/core/anymap.cpp -ldl; then
./template.out;
g++ -c -fPIC ./dev/core/anymap.cpp -o anymap.o -I./dev;
g++ -c -fPIC tests.cpp -o tests.o -I./dev;
# g++ -c -fPIC ./dev/iniparser/iniparser.cpp -o iniparser.o -I./dev;
g++ tests.o anymap.o -shared -o libtest.so; rm tests.o anymap.o;
if g++ $1 -o graph.out -I./dev ./dev/core/anymap.cpp -ldl; then
./graph.out;
else
echo "Not Compiled!";
fi;
\ No newline at end of file
......@@ -2,23 +2,23 @@
#include <anymap.h>
#include <iniparser.h>
typedef std::function<int(com::Anymap)> IntFunc;
typedef std::function<bool(com::Anymap)> BoolFunc;
typedef std::function<bool*(com::Anymap)> BoolArrFunc;
typedef std::function<int(com::Anymap*)> IntFunc;
typedef std::function<bool(com::Anymap*)> BoolFunc;
typedef std::function<bool*(com::Anymap*)> BoolArrFunc;
IntFunc LoadEntry(std::string lib, std::string func) {
DllHandle handler;
return com::lib::loadFunction<int (com::Anymap), DllHandle>(lib.c_str(), func.c_str(), handler);
return com::lib::loadFunction<int (com::Anymap*), DllHandle>(lib.c_str(), func.c_str(), handler);
}
BoolFunc LoadPred(std::string lib, std::string func) {
DllHandle handler;
return com::lib::loadFunction<int (com::Anymap), DllHandle>(lib.c_str(), func.c_str(), handler);
return com::lib::loadFunction<int (com::Anymap*), DllHandle>(lib.c_str(), func.c_str(), handler);
}
BoolArrFunc LoadSelector(std::string lib, std::string func){
DllHandle handler;
return com::lib::loadFunction<bool* (com::Anymap), DllHandle>(lib.c_str(), func.c_str(), handler);
return com::lib::loadFunction<bool* (com::Anymap*), DllHandle>(lib.c_str(), func.c_str(), handler);
}
void check_pred(bool predval, std::string predname) {
......@@ -30,13 +30,7 @@ void check_pred(bool predval, std::string predname) {
int main(int argc, char const *argv[])
{
com::ini::INIParser parser(argv[1]);
if(!parser.isLoaded()){
std::cerr<<"Cannot find file:"<<argv[1]<<std::endl;
return -1;
}
auto data = com::Anymap();
parser.loadINIDataToAnyMap(data, {"sld", "tsl", "bc"}, enu_LoadMode::lmRecursive);
//Predicates
% for pred in preds:
auto ${pred} = LoadPred("${pred.module}", "${pred.name}");
......
from comsdk.graph import *
from comsdk.edge import *
from comsdk.communication import *
from test_funcs.simplest import *
data= {"a":1}
pred = Func(func=dummy_predicate)
morph = Func(func=increment_a_edge)
s_1 = State('s_1')
s_2 = State('s_2')
s_3 = State('s_3')
s_1.connect_to(s_2, edge=Edge(pred, morph))
s_2.connect_to(s_3, edge=Edge(pred, morph))
sub_s_1 = State('sub_s_1')
sub_s_2 = State('sub_s_2')
sub_s_1.connect_to(sub_s_2, edge=Edge(pred, morph))
s_2.replace_with_graph(Graph(sub_s_1, sub_s_2))
gr = Graph(s_1, s_3)
gr.init_graph()
gr.run(data)
\ No newline at end of file
#include <libtools.h>
#include <anymap.h>
#include <iniparser.h>
typedef std::function<int(com::Anymap)> IntFunc;
typedef std::function<bool(com::Anymap)> BoolFunc;
typedef std::function<bool*(com::Anymap)> BoolArrFunc;
IntFunc LoadEntry(std::string lib, std::string func) {
DllHandle handler;
return com::lib::loadFunction<int (com::Anymap), DllHandle>(lib.c_str(), func.c_str(), handler);
}
BoolFunc LoadPred(std::string lib, std::string func) {
DllHandle handler;
return com::lib::loadFunction<int (com::Anymap), DllHandle>(lib.c_str(), func.c_str(), handler);
}
BoolArrFunc LoadSelector(std::string lib, std::string func){
DllHandle handler;
return com::lib::loadFunction<bool* (com::Anymap), DllHandle>(lib.c_str(), func.c_str(), handler);
}
void check_pred(bool predval, std::string predname) {
if predval{
std::cout<<"Predicate"<<predname<<"returned FALSE!"<<std::endl;
exit(-1)
}
}
int main(int argc, char const *argv[])
{
com::ini::INIParser parser(argv[1]);
if(!parser.isLoaded()){
std::cerr<<"Cannot find file:"<<argv[1]<<std::endl;
return -1;
}
com::Anymap data();
parser.loadINIDataToAnyMap(data);
//Predicates
auto test_funcs.simplest_positiveness_predicate = LoadPred("test_funcs.simplest", "positiveness_predicate");
auto libcomsdk_pass_predicate = LoadPred("libcomsdk", "pass_predicate");
//Entry functions
auto test_funcs.simplest_increment_a_edge = LoadEntry("test_funcs.simplest", "increment_a_edge");
auto libgcdfes_pso_swarm_init = LoadEntry("libgcdfes", "pso_swarm_init");
auto libgcdfes_pso_agent_init = LoadEntry("libgcdfes", "pso_agent_init");
auto libgcdfes_pso_task_data_reinit = LoadEntry("libgcdfes", "pso_task_data_reinit");
auto libgcdfes_pso_hom_agent_postproc = LoadEntry("libgcdfes", "pso_hom_agent_postproc");
auto libgcdfes_pso_agent_reinit = LoadEntry("libgcdfes", "pso_agent_reinit");
auto libgcdfes_pso_swarm_analysing = LoadEntry("libgcdfes", "pso_swarm_analysing");
auto libgcdfes_pso_swarm_reinit = LoadEntry("libgcdfes", "pso_swarm_reinit");
auto libcomsdk_pass_processor = LoadEntry("libcomsdk", "pass_processor");
//Selectors
auto libgcdfes_check_pso_agent_reinit = LoadSelector("libgcdfes", "check_pso_agent_reinit");
auto libgcdfes_check_pso_swarm_reinit = LoadSelector("libgcdfes", "check_pso_swarm_reinit");
//Branch tokens
bool* SEL___BEGIN__ = new bool[1];
std::fill_n(SEL___BEGIN__, 1, true);
bool* SEL_gcdhom_inverted_model_pso1_S_4 = new bool[1];
std::fill_n(SEL_gcdhom_inverted_model_pso1_S_4, 1, false);
bool* SEL_gcdhom_inverted_model_pso1_S_6 = new bool[2];
std::fill_n(SEL_gcdhom_inverted_model_pso1_S_6, 2, false);
bool* SEL_gcdhom_inverted_model_pso1_S_7 = new bool[2];
std::fill_n(SEL_gcdhom_inverted_model_pso1_S_7, 2, false);
bool* SEL___END__ = new bool[0];
std::fill_n(SEL___END__, 0, false);
if (SEL___BEGIN__[0]){
//root graph
check_pred(test_funcs.simplest_positiveness_predicate(data), "test_funcs.simplest_positiveness_predicate");
test_funcs.simplest_increment_a_edge(data);
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");
libgcdfes_pso_swarm_init(data);//Инициализация метода роя частиц.
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");
libgcdfes_pso_swarm_init(data);//Инициализация роя частиц.
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");
libgcdfes_pso_agent_init(data);//Инициализация отдельной частицы в рамках метода роя частиц.
}
gcdhom_inverted_model_pso1_S_4:
if (!(false || SEL___BEGIN__[0] || SEL_gcdhom_inverted_model_pso1_S_6[0] || SEL_gcdhom_inverted_model_pso1_S_7[0] )){
for (int seli = 0; seli < 1; seli++)
SEL_gcdhom_inverted_model_pso1_S_4[seli]=false;
}else {
for (int seli = 0; seli < 1; seli++)
SEL_gcdhom_inverted_model_pso1_S_4[seli]=true;
}
if (SEL_gcdhom_inverted_model_pso1_S_4[0]){
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");
libgcdfes_pso_task_data_reinit(data);//Реинициализация постановки задачи анализа эффективных характеристик КМ методом асимптотического осреднения.
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");
libgcdfes_pso_hom_agent_postproc(data);//Постпроцессинг после решения отдельной задачи методом асимптотического осреднения.
}
gcdhom_inverted_model_pso1_S_6:
if (!(false || SEL_gcdhom_inverted_model_pso1_S_4[0] )){
for (int seli = 0; seli < 2; seli++)
SEL_gcdhom_inverted_model_pso1_S_6[seli]=false;
}else {
SEL_gcdhom_inverted_model_pso1_S_6 = libgcdfes_check_pso_agent_reinit();//
}
if (SEL_gcdhom_inverted_model_pso1_S_6[0]){
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");
libgcdfes_pso_agent_reinit(data);//Реинициализация отдельной частицы (смещение частицы) в рое в рамках метода роя частиц.
goto gcdhom_inverted_model_pso1_S_4;
}
if (SEL_gcdhom_inverted_model_pso1_S_6[1]){
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");
libgcdfes_pso_swarm_analysing(data);//Анализ всего роя частиц в рамках метода роя частиц.
}
gcdhom_inverted_model_pso1_S_7:
if (!(false || SEL_gcdhom_inverted_model_pso1_S_6[1] )){
for (int seli = 0; seli < 2; seli++)
SEL_gcdhom_inverted_model_pso1_S_7[seli]=false;
}else {
SEL_gcdhom_inverted_model_pso1_S_7 = libgcdfes_check_pso_swarm_reinit();//
}
if (SEL_gcdhom_inverted_model_pso1_S_7[0]){
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");
libgcdfes_pso_swarm_reinit(data);//Реинициализация всего роя частиц в рамках метода роя частиц.
goto gcdhom_inverted_model_pso1_S_4;
}
if (SEL_gcdhom_inverted_model_pso1_S_7[1]){
//ПАСС, морфизм.
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");
libcomsdk_pass_processor(data);
//root graph
check_pred(test_funcs.simplest_positiveness_predicate(data), "test_funcs.simplest_positiveness_predicate");
test_funcs.simplest_increment_a_edge(data);
}
if (!(false || SEL_gcdhom_inverted_model_pso1_S_7[1] )){
for (int seli = 0; seli < 0; seli++)
SEL___END__[seli]=false;
}else {
for (int seli = 0; seli < 0; seli++)
SEL___END__[seli]=true;
}
TERM:
std::cout<<"Termination!\n";
return 0;
}
__BEGIN__ --.()-.()--> INPUT_READY
INPUT_READY --predicate_funcs.predicate_x()-case_gen_funcs.function_1()--> TEPMLATE_COPIED
TEPMLATE_COPIED --predicate_funcs.predicate_y()-case_gen_funcs.function_2()--> NAMES_SUBSTITUTED
NAMES_SUBSTITUTED --predicate_funcs.predicate_x()-case_gen_funcs.function_3()--> CONTENT_SUBSTITUTED
CONTENT_SUBSTITUTED --.()-case_gen_funcs.create_dump()--> DUMP_CREATED
CONTENT_SUBSTITUTED --predicate_funcs.predicate_y()-case_gen_funcs.save_to_db()--> RESULT_SAVED
CONTENT_SUBSTITUTED --predicate_funcs.predicate_x()-case_gen_funcs.save_to_file()--> RESULT_SAVED
RESULT_SAVED --predicate_funcs.predicate_y()-case_gen_funcs.repeat()--> INPUT_READY
RESULT_SAVED --predicate_funcs.predicate_x()-case_gen_funcs.exit()--> __END__
RESULT_SAVED --.()-case_gen_funcs.exit()--> __END__
DUMP_CREATED --case_gen_funcs.check_dump()-case_gen_funcs.exit()--> __END__
#include <libtools.h>
#include <anymap.h>
typedef std::function<int(com::Anymap)> IntFunc;
typedef std::function<bool(com::Anymap)> BoolFunc;
typedef std::function<bool*(com::Anymap)> BoolArrFunc;
IntFunc LoadEntry(std::string lib, std::string func) {
DllHandle handler;
return com::lib::loadFunction<int (com::Anymap), DllHandle>(lib.c_str(), func.c_str(), handler);
}
BoolFunc LoadPred(std::string lib, std::string func) {
DllHandle handler;
return com::lib::loadFunction<int (com::Anymap), DllHandle>(lib.c_str(), func.c_str(), handler);
}
BoolArrFunc LoadSelector(std::string lib, std::string func){
DllHandle handler;
return com::lib::loadFunction<bool* (com::Anymap), DllHandle>(lib.c_str(), func.c_str(), handler);
}
void check_pred(bool predval, std::string predname) {
if predval{
std::cout<<"Predicate"<<predname<<"returned FALSE!"<<std::endl;
exit(-1)
}
}
int main(int argc, char const *argv[])
{
auto data = com::Anymap();
//Predicates
auto test_funcs.simplest_positiveness_predicate = LoadPred("test_funcs.simplest", "positiveness_predicate");
auto libcomsdk_pass_predicate = LoadPred("libcomsdk", "pass_predicate");
//Entry functions
auto test_funcs.simplest_increment_a_edge = LoadEntry("test_funcs.simplest", "increment_a_edge");
auto libgcdfes_pso_swarm_init = LoadEntry("libgcdfes", "pso_swarm_init");
auto libgcdfes_pso_agent_init = LoadEntry("libgcdfes", "pso_agent_init");
auto libgcdfes_pso_task_data_reinit = LoadEntry("libgcdfes", "pso_task_data_reinit");
auto libgcdfes_pso_hom_agent_postproc = LoadEntry("libgcdfes", "pso_hom_agent_postproc");
auto libgcdfes_pso_agent_reinit = LoadEntry("libgcdfes", "pso_agent_reinit");
auto libgcdfes_pso_swarm_analysing = LoadEntry("libgcdfes", "pso_swarm_analysing");
auto libgcdfes_pso_swarm_reinit = LoadEntry("libgcdfes", "pso_swarm_reinit");
auto libcomsdk_pass_processor = LoadEntry("libcomsdk", "pass_processor");
//Selectors
//Branch tokens
bool* SEL___BEGIN__ = new bool[1];
std::fill_n(SEL___BEGIN__, 1, true);
bool* SEL_gcdhom_inverted_model_pso1_S_4 = new bool[1];
std::fill_n(SEL_gcdhom_inverted_model_pso1_S_4, 1, false);
bool* SEL_gcdhom_inverted_model_pso1_S_6 = new bool[2];
std::fill_n(SEL_gcdhom_inverted_model_pso1_S_6, 2, false);
bool* SEL_gcdhom_inverted_model_pso1_S_7 = new bool[2];
std::fill_n(SEL_gcdhom_inverted_model_pso1_S_7, 2, false);
bool* SEL___END__ = new bool[0];
std::fill_n(SEL___END__, 0, false);
if (SEL___BEGIN__[0]){
check_pred(test_funcs.simplest_positiveness_predicate(data), "test_funcs.simplest_positiveness_predicate");
test_funcs.simplest_increment_a_edge(data);
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");
libgcdfes_pso_swarm_init(data);//Инициализация метода роя частиц.
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");
libgcdfes_pso_swarm_init(data);//Инициализация роя частиц.
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");
libgcdfes_pso_agent_init(data);//Инициализация отдельной частицы в рамках метода роя частиц.
}
gcdhom_inverted_model_pso1_S_4:
if (!(false || SEL___BEGIN__[0] || SEL_gcdhom_inverted_model_pso1_S_6[0] || SEL_gcdhom_inverted_model_pso1_S_7[0] )){
for (int seli = 0; seli < 1; seli++)
SEL_gcdhom_inverted_model_pso1_S_4[seli]=false;
}else {
for (int seli = 0; seli < 1; seli++)
SEL_gcdhom_inverted_model_pso1_S_4[seli]=true;
}
if (SEL_gcdhom_inverted_model_pso1_S_4[0]){
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");
libgcdfes_pso_task_data_reinit(data);//Реинициализация постановки задачи анализа эффективных характеристик КМ методом асимптотического осреднения.
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");
libgcdfes_pso_hom_agent_postproc(data);//Постпроцессинг после решения отдельной задачи методом асимптотического осреднения.
}
gcdhom_inverted_model_pso1_S_6:
if (!(false || SEL_gcdhom_inverted_model_pso1_S_4[0] )){
for (int seli = 0; seli < 2; seli++)
SEL_gcdhom_inverted_model_pso1_S_6[seli]=false;
}else {
for (int seli = 0; seli < 2; seli++)
SEL_gcdhom_inverted_model_pso1_S_6[seli]=true;
}
if (SEL_gcdhom_inverted_model_pso1_S_6[0]){
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");
libgcdfes_pso_agent_reinit(data);//Реинициализация отдельной частицы (смещение частицы) в рое в рамках метода роя частиц.
goto gcdhom_inverted_model_pso1_S_4;
}
if (SEL_gcdhom_inverted_model_pso1_S_6[1]){
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");
libgcdfes_pso_swarm_analysing(data);//Анализ всего роя частиц в рамках метода роя частиц.
}
gcdhom_inverted_model_pso1_S_7:
if (!(false || SEL_gcdhom_inverted_model_pso1_S_6[1] )){
for (int seli = 0; seli < 2; seli++)
SEL_gcdhom_inverted_model_pso1_S_7[seli]=false;
}else {
for (int seli = 0; seli < 2; seli++)
SEL_gcdhom_inverted_model_pso1_S_7[seli]=true;
}
if (SEL_gcdhom_inverted_model_pso1_S_7[0]){
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");
libgcdfes_pso_swarm_reinit(data);//Реинициализация всего роя частиц в рамках метода роя частиц.
goto gcdhom_inverted_model_pso1_S_4;
}
if (SEL_gcdhom_inverted_model_pso1_S_7[1]){
//ПАСС, морфизм.
check_pred(libcomsdk_pass_predicate(data), "libcomsdk_pass_predicate");
libcomsdk_pass_processor(data);
}
if (!(false || SEL_gcdhom_inverted_model_pso1_S_7[1] )){
for (int seli = 0; seli < 0; seli++)
SEL___END__[seli]=false;
}else {
for (int seli = 0; seli < 0; seli++)
SEL___END__[seli]=true;
}
TERM:
std::cout<<"Termination!\n";
return 0;
}
digraph ADD {
FUNC [module=test_funcs.simplest, entry_func=increment_b_edge]
PRED [module=test_funcs.simplest, entry_func=positiveness_predicate]
MORPH [predicate=PRED, function=FUNC, comment="ADD"]
__BEGIN__ -> ST [morphism = MORPH]
ST -> __END__
}
\ No newline at end of file
digraph gcdhom_inverted_model_pso
{
// Определение функций-обработчиков
PASS_PROCESSOR [module=libcomsdk, entry_func=pass_processor]
CHECK_PSO_AGENT_REINIT [module=libgcdfes, entry_func=check_pso_agent_reinit, comment="Проверка о необходимости реинициализации отдельной частицы (смещение частицы) в рое в рамках метода роя частиц."]
CHECK_PSO_SWARM_REINIT [module=libgcdfes, entry_func=check_pso_swarm_reinit, comment="Проверка о необходимости реинициализации всего роя частиц в рамках метода роя частиц."]
PSO_AGENT_REINIT [module=libgcdfes, entry_func=pso_agent_reinit, comment="Реинициализация отдельной частицы (смещение частицы) в рое в рамках метода роя частиц."]
PSO_SWARM_REINIT [module=libgcdfes, entry_func=pso_swarm_reinit, comment="Реинициализация всего роя частиц в рамках метода роя частиц."]
PSO_SWARM_ANALYSING [module=libgcdfes, entry_func=pso_swarm_analysing, comment="Анализ всего роя частиц в рамках метода роя частиц."]
PSO_HOM_AGENT_POSTPROC [module=libgcdfes, entry_func=pso_hom_agent_postproc, comment="Постпроцессинг после решения отдельной задачи методом асимптотического осреднения."]
PSO_TASK_DATA_REINIT [module=libgcdfes, entry_func=pso_task_data_reinit, comment="Реинициализация постановки задачи анализа эффективных характеристик КМ методом асимптотического осреднения."]
PSO_AGENT_INIT [module=libgcdfes, entry_func=pso_agent_init, comment="Инициализация отдельной частицы в рамках метода роя частиц."]
PSO_SWARM_INIT [module=libgcdfes, entry_func=pso_swarm_init, comment="Инициализация роя частиц."]
PSO_INIT [module=libgcdfes, entry_func=pso_swarm_init, comment="Инициализация метода роя частиц."]
// Определение функций-предикатов
PASS_PREDICATE [module=libcomsdk, entry_func=pass_predicate]
// Определение морфизмов
PASS_MORPHISM [predicate=PASS_PREDICATE, function=PASS_PROCESSOR, comment="ПАСС, морфизм."]
PSO_AGENT_REINIT_MORPHISM [predicate=PASS_PREDICATE, function=PSO_AGENT_REINIT]
PSO_SWARM_REINIT_MORPHISM [predicate=PASS_PREDICATE, function=PSO_SWARM_REINIT]
PSO_SWARM_ANALYSING_MORPHISM [predicate=PASS_PREDICATE, function=PSO_SWARM_ANALYSING]
PSO_HOM_AGENT_POSTPROC_MORPHISM [predicate=PASS_PREDICATE, function=PSO_HOM_AGENT_POSTPROC]
PSO_TASK_DATA_REINIT_MORPHISM [predicate=PASS_PREDICATE, function=PSO_TASK_DATA_REINIT]
PSO_AGENT_INIT_MORPHISM [predicate=PASS_PREDICATE, function=PSO_AGENT_INIT]
PSO_SWARM_INIT_MORPHISM [predicate=PASS_PREDICATE, function=PSO_SWARM_INIT]
PSO_INIT_MORPHISM [predicate=PASS_PREDICATE, function=PSO_INIT]
// Определение атрибутов узлов
//S_1 [subgraph=gcdhom_preprocessor.adot]
//S_5 [subgraph=gcdhom_processor.adot]
S_6 [selector=CHECK_PSO_AGENT_REINIT]
S_7 [selector=CHECK_PSO_SWARM_REINIT]
// Определение топологии графовой модели метода конечных элементов
__BEGIN__ -> S_1
S_1 -> S_2 [morphism=PSO_INIT_MORPHISM]
S_2 -> S_3 [morphism=PSO_SWARM_INIT_MORPHISM]
S_3 -> S_4 [morphism=PSO_AGENT_INIT_MORPHISM]
S_4 -> S_5 [morphism=PSO_TASK_DATA_REINIT_MORPHISM]
S_5 -> S_6 [morphism=PSO_HOM_AGENT_POSTPROC_MORPHISM]
S_6 -> S_4, S_7 [morphism=(PSO_AGENT_REINIT_MORPHISM, PSO_SWARM_ANALYSING_MORPHISM), order=(10,20)]
S_7 -> S_4, S_8 [morphism=(PSO_SWARM_REINIT_MORPHISM, PASS_MORPHISM), order=(30,40)]
S_8 -> __END__ [comment = "Расчет завершён."]
}
digraph CYCLED {
FUNC [module=test_funcs.simplest, entry_func=decrement_a_edge]
PRED [module=test_funcs.simplest, entry_func=positiveness_predicate]
MORPH [predicate=PRED, function=FUNC]
SEL [module = test_funcs.simplest, entry_func = selector_a_nonpositive]
ST2 [selector = SEL]
__BEGIN__ -> ST1
ST1 -> ST2 [morphism=MORPH]
ST2 -> ST1
ST2 -> __END__
}
\ No newline at end of file
digraph SIMPLEST {
FUNCA [module=test_funcs.simplest, entry_func=increment_a_edge]
FUNCB [module=test_funcs.simplest, entry_func=increment_b_edge]
PRED [module=test_funcs.simplest, entry_func=positiveness_predicate]
INCR_A [predicate=PRED, function=FUNCA]
INCR_B [predicate=PRED, function=FUNCB]
__BEGIN__ -> ROOT
ROOT -> BR1, BR2, BR3 [morphism=(INCR_A, INCR_A, INCR_A)]
//BR3 -> SIBL3_BR1, SIBL3_BR2 [morphism=(INCR_A, INCR_A)]
//BR2 -> SIBL2_BR1, SIBL2_BR2 [morphism=(INCR_A, INCR_A)]
//SIBL3_BR1 -> SIBL3_BR1_1, SIBL3_BR1_2 [morphism=(INCR_A, INCR_A)]
//SIBL3_BR1_1, SIBL3_BR1_2 -> TERM [morphism=(INCR_A, INCR_A)]
//BR1, SIBL2_BR1, SIBL2_BR2, TERM, SIBL3_BR2 -> __END__ [morphism=(INCR_A, INCR_A, INCR_A, INCR_A, INCR_A)]
BR1, BR2, BR3 -> __END__ [morphism=(INCR_A, INCR_A, INCR_A)]
}
\ No newline at end of file
digraph SIMPLE {
FUNC [module=libprinters, entry_func=PrintHello]
PRED [module=libprinters, entry_func=ReturnTrue]
MORPH [predicate=PRED, function=FUNC]
FUNC1 [module=libprinters, entry_func=PrintHello1]
PRED1 [module=libprinters, entry_func=ReturnTrue1]
MORPH1 [predicate=PRED1, function=FUNC1]
FUNC2 [module=libprinters, entry_func=PrintHello2]
PRED2 [module=libprinters, entry_func=ReturnTrue2]
MORPH2 [predicate=PRED2, function=FUNC2]
__BEGIN__ -> ST1 [morphism = MORPH]
ST1 -> ST2, ST3, ST4 [morphism = (MORPH, MORPH1, MORPH2)]
ST2 -> ST3, ST5 [morphism = (MORPH1,MORPH2)]
ST4 -> ST5 [morphism = MORPH]
ST3 -> ST5 [morphism = MORPH]
//ST21 -> ST31, ST312[morphism =(MORPH1,MORPH2)]
//ST3, ST31, ST312 -> ST4[morphism = (MORPH,MORPH1,MORPH2) ]
ST5 -> __END__
}
\ No newline at end of file
digraph TEST_SUB {
FUNC [module=test_funcs.simplest, entry_func=increment_a_edge]
PRED [module=test_funcs.simplest, entry_func=positiveness_predicate]
MORPH [predicate=PRED, function=FUNC, comment="root graph"]
// SEL [module=test_funcs.simplest, entry_func=selector_a_nonpositive]
ST2 [subgraph = templates/adot/file.adot]
// ST3 [selector = SEL]
__BEGIN__ -> ST1 [morphism = MORPH]
ST1 -> ST2
ST2 -> ST3
ST3 -> __END__ [morphism = MORPH]
}
\ No newline at end of file
digraph CODEOBJECT_GENERATOR
{
// Определения функций-обработчиков
FUNC_1 [module=case_gen_funcs, entry_func=function_1]
FUNC_2 [module=case_gen_funcs, entry_func=function_2]
FUNC_3 [module=case_gen_funcs, entry_func=function_3]
SAVE_TO_DB [module=case_gen_funcs, entry_func=save_to_db]
SAVE_TO_FILE [module=case_gen_funcs, entry_func=save_to_file]
REPEAT [module=case_gen_funcs, entry_func=repeat]
EXIT [module=case_gen_funcs, entry_func=exit]
CREATE_DUMP [module=case_gen_funcs, entry_func=create_dump]
CHECK_DUMP [module=case_gen_funcs, entry_func=check_dump]
// Определения функций-предикатов
PREDICATE_X [module=predicate_funcs, entry_func=predicate_x]
PREDICATE_Y [module=predicate_funcs, entry_func=predicate_y]
SELECTOR [module=predicate_funcs, entry_func=selector]
// Определения функций перехода
EDGE_1 [predicate=PREDICATE_X, function=FUNC_1]
EDGE_2 [predicate=PREDICATE_Y, function=FUNC_2]
EDGE_3 [predicate=PREDICATE_X, function=FUNC_3]
EDGE_4 [predicate=PREDICATE_Y, function=SAVE_TO_DB]
EDGE_5 [predicate=PREDICATE_X, function=SAVE_TO_FILE]
EDGE_6 [predicate=PREDICATE_Y, function=REPEAT]
EDGE_7 [predicate=PREDICATE_X, function=EXIT]
EDGE_8 [function=EXIT]
EDGE_9 [predicate=CHECK_DUMP, function=EXIT]
EDGE_10 [function=CREATE_DUMP]
// В узле указана стратегия распараллеливания
CONTENT_SUBSTITUTED [parallelism=threading]
// Определение графовой модели
__BEGIN__ -> INPUT_READY
INPUT_READY -> TEPMLATE_COPIED [morphism=EDGE_1]
TEPMLATE_COPIED -> NAMES_SUBSTITUTED [morphism=EDGE_2]
NAMES_SUBSTITUTED -> CONTENT_SUBSTITUTED [morphism=EDGE_3]
CONTENT_SUBSTITUTED -> DUMP_CREATED [morphism=EDGE_10, order=3]
CONTENT_SUBSTITUTED -> RESULT_SAVED [morphism=EDGE_4, order=2]
CONTENT_SUBSTITUTED -> RESULT_SAVED [morphism=EDGE_5,order=1,comment="test comment to cpp"]
// В зависимости от результата вычисления функции-SELECTOR осуществляется переход по
//первому или второму ребру
RESULT_SAVED -> __END__ [morphism=EDGE_8, order=(40)]
RESULT_SAVED -> INPUT_READY,FAKE,__END__ [selector=SELECTOR, morphism=(EDGE_6,EDGE_1,EDGE_7), order=(30,20,10)]
}
......@@ -27,7 +27,7 @@ def copy_to_c(data):
data['c'] = data['a']
def selector_a_nonpositive(data):
res = data['a'] < 0
res = data['a'] <= 0
return [res, not res]
def true_predicate(data):
......
import unittest
from copy import deepcopy
import subprocess
import os
import random
import sys
from test_funcs.simplest import *
import comsdk.parser as pars
from comsdk.graph import *
from comsdk.edge import Edge
prsr = pars.Parser(tocpp=True)
data = {"a":10, "b":0}
gr = prsr.parse_file(sys.argv[1])
prsr.generate_cpp(sys.argv[2])
digraph SIMPLEST {
FUNCA [module=test_funcs.simplest, entry_func=increment_a_edge]
FUNCB [module=test_funcs.simplest, entry_func=increment_b_edge]
PRED [module=test_funcs.simplest, entry_func=positiveness_predicate]
PRED [module=test_funcs.simplest, entry_func=true_predicate]
INCR_A [predicate=PRED, function=FUNCA]
INCR_B [predicate=PRED, function=FUNCB]
......
digraph SIMPLEST {
FUNCA [module=libtest, entry_func=IncA]
FUNCB [module=libtest, entry_func=IncB]
CHECKA [module=libtest, entry_func=CheckAEq4]
CHECKB [module=libtest, entry_func=CheckBEq4]
SETA [module=libtest, entry_func=SetAEq1]
SETB [module=libtest, entry_func=SetBEq1]
PASS [module=libtest, entry_func=PassFunc]
PRED [module=libtest, entry_func=PassPred]
INCR_A [predicate=PRED, function=FUNCA]
INCR_B [predicate=PRED, function=FUNCB]
CH_A [predicate=CHECKA, function = PASS]
SET_A [predicate=PRED, function=SETA]
SET_B [predicate=PRED, function=SETB]
CH_B [predicate=CHECKB, function = PASS]
__BEGIN__ -> ROT [morphism=SET_A]
ROT -> ROOT[morphism=SET_B]
ROOT -> BR1, BR2 [morphism=(INCR_A, INCR_B)]
BR1 -> BR1_ST [morphism=INCR_A]
BR2 -> BR2_ST [morphism=INCR_B]
BR1_ST, BR2_ST -> MERGE [morphism=(INCR_A, INCR_B)]
MERGE -> __END__, __END__ [morphism=(CH_A, CH_B)]
}
\ No newline at end of file
digraph SIMPLEST {
FUNCA [module=test_funcs.simplest, entry_func=increment_a_edge]
PRED [module=test_funcs.simplest, entry_func=true_predicate]
INCR_A [predicate=PRED, function=FUNCA]
ST1 [subgraph=tests/adot/cpptrivial.adot]
ST2 [subgraph=tests/adot/cppcycled.adot]
ST3 [subgraph=tests/adot/cppbranching.adot]
__BEGIN__ -> ST1
ST1 -> ST2
ST2 -> ST3
ST3 -> __END__
}
\ No newline at end of file
digraph CYCLED {
SETA [module=libtest, entry_func=SetAEq10]
FUNC [module=libtest, entry_func=DecA]
PRED [module=libtest, entry_func=PassPred]
SET [predicate=PRED, function=SETA]
MORPH [predicate=PRED, function=FUNC]
SEL [module = libtest, entry_func=SelectorA]
ST2 [selector = SEL]
__BEGIN__ -> ST1 [morphism=SET]
ST1 -> ST2 [morphism=MORPH]
ST2 -> ST1 [order=1]
ST2 -> __END__ [order = 2]
}
\ No newline at end of file
digraph SIMPLE {
FUNC [module=libtest, entry_func=IncA]
PRED [module=libtest, entry_func=ReturnTrue]
PRED [module=libtest, entry_func=PassPred]
MORPH [predicate=PRED, function=FUNC]
__BEGIN__ -> ST1 [morphism = MORPH]
......
digraph CYCLED {
FUNC [module=test_funcs.simplest, entry_func=decrement_a_edge]
PRED [module=test_funcs.simplest, entry_func=positiveness_predicate]
PRED [module=test_funcs.simplest, entry_func=true_predicate]
MORPH [predicate=PRED, function=FUNC]
SEL [module = test_funcs.simplest, entry_func = selector_a_nonpositive]
......
digraph trivial {
digraph TRIVIAL {
FUNC [module=test_funcs.simplest, entry_func=increment_a_edge]
PRED [module=test_funcs.simplest, entry_func=positiveness_predicate]
PRED [module=test_funcs.simplest, entry_func=true_predicate]
MORPH [predicate=PRED, function=FUNC, comment="ADD"]
__BEGIN__ -> ST1 [morphism = MORPH]
......
import unittest
import subprocess
from comsdk.graph import *
from comsdk.parser import Parser
path_to_comsdk = "/home/lbstr/bmstu/comsdk"
path_to_pycomsdk = "/home/lbstr/bmstu/pycomsdk"
class ParserGoodCheck(unittest.TestCase):
......@@ -38,18 +40,32 @@ class ParserGoodCheck(unittest.TestCase):
self.assertEqual(data["b"], 4)
def test_cpp_trivial_graph(self):
pass
parsr = Parser(tocpp=True)
gr = parsr.parse_file("./tests/adot/cpptrivial.adot")
parsr.generate_cpp(path_to_comsdk+"res.cpp")
command = "cd "+path_to_comsdk+"; "+path_to_pycomsdk+"/cpp/run.sh "+path_to_comsdk+"res.cpp"
subprocess.check_output(["bash", "-c", command])
def test_cpp_branching_graph(self):
pass
parsr = Parser(tocpp=True)
gr = parsr.parse_file("./tests/adot/cppbranching.adot")
parsr.generate_cpp(path_to_comsdk+"res.cpp")
command = "cd "+path_to_comsdk+"; "+path_to_pycomsdk+"/cpp/run.sh "+path_to_comsdk+"res.cpp"
subprocess.check_output(["bash", "-c", command])
def test_cpp_cycled_graph(self):
pass
parsr = Parser(tocpp=True)
gr = parsr.parse_file("./tests/adot/cppcycled.adot")
parsr.generate_cpp(path_to_comsdk+"res.cpp")
command = "cd "+path_to_comsdk+"; "+path_to_pycomsdk+"/cpp/run.sh "+path_to_comsdk+"res.cpp"
subprocess.check_output(["bash", "-c", command])
def test_cpp_complex_graph(self):
pass
parsr = Parser(tocpp=True)
gr = parsr.parse_file("./tests/adot/cppcomplex.adot")
parsr.generate_cpp(path_to_comsdk+"res.cpp")
command = "cd "+path_to_comsdk+"; "+path_to_pycomsdk+"/cpp/run.sh "+path_to_comsdk+"res.cpp"
subprocess.check_output(["bash", "-c", command])
if __name__ == '__main__':
unittest.main()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment