This commit is contained in:
Matthias
2017-07-24 16:37:13 +02:00
parent 3d8f381bae
commit 6c3a14afc8
14 changed files with 266 additions and 2 deletions
+2 -1
View File
@@ -56,7 +56,7 @@ ADD_DEFINITIONS( -std=c++11 -DSPARSELU_SKIP_BOTS_MAIN )
function(add_wfr_utest utest_name add_inc)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${utest_name})
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${utest_name}/${utest_name}.cpp ${CMAKE_CURRENT_BINARY_DIR}/${utest_name}/${utest_name}.h
COMMAND ${IWIR2WFR_EXE} -i ${IWIR_DIR}/${utest_name}.iwir -o ${CMAKE_CURRENT_BINARY_DIR}/${utest_name}/${utest_name} -skipmain -printir -repoconfig ${REPO_DIR}/${utest_name}.properties
COMMAND ${IWIR2WFR_EXE} -i ${IWIR_DIR}/${utest_name}.iwir -o ${CMAKE_CURRENT_BINARY_DIR}/${utest_name}/${utest_name} -printir -repoconfig ${REPO_DIR}/${utest_name}.properties
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${utest_name}
)
add_executable(${utest_name}.bin ${CMAKE_CURRENT_BINARY_DIR}/${utest_name}/${utest_name}.cpp ${ARGN})
@@ -74,6 +74,7 @@ endfunction()
add_wfr_utest(for1 "")
add_wfr_utest(foreach1 "")
add_wfr_utest(if1 "")
#add_wfr_utest(if01 "")
add_wfr_utest(if2 "")
add_wfr_utest(pfor1 "")
add_wfr_utest(pforeach1 "")
+11
View File
@@ -29,6 +29,7 @@ exec_test() {
echo -n -e "$PROLOG"
let TOTAL_COUNT=$TOTAL_COUNT+1
#echo LD_LIBRARY_PATH=$LIBRARY_PATH timeout $TIMELIMIT ./$BINARY
OUTPUT=$(LD_LIBRARY_PATH=$LIBRARY_PATH timeout $TIMELIMIT ./$BINARY 1>/dev/null 2>&1)
CODE=$?
RESULT=""
@@ -78,6 +79,16 @@ exec_test 10 "$BIN_BASE/while1/while1.bin --early-evaluation"
exec_test 10 "$BIN_BASE/while1/while1.bin --late-evaluation"
exec_test 10 "$BIN_BASE/if1/if1.bin --early-evaluation"
exec_test 10 "$BIN_BASE/if1/if1.bin --late-evaluation"
exec_test 10 "$BIN_BASE/if1/if1.bin --early-evaluation --if1 false"
exec_test 10 "$BIN_BASE/if1/if1.bin --late-evaluation --if1 false"
exec_test 10 "$BIN_BASE/if1/if1.bin --early-evaluation --if2 false"
exec_test 10 "$BIN_BASE/if1/if1.bin --late-evaluation --if2 false"
exec_test 10 "$BIN_BASE/if1/if1.bin --early-evaluation --if3 false"
exec_test 10 "$BIN_BASE/if1/if1.bin --late-evaluation --if3 false"
exec_test 10 "$BIN_BASE/if1/if1.bin --early-evaluation --if4 false"
exec_test 10 "$BIN_BASE/if1/if1.bin --late-evaluation --if4 false"
exec_test 10 "$BIN_BASE/if1/if1.bin --early-evaluation --ifall false"
exec_test 10 "$BIN_BASE/if1/if1.bin --late-evaluation --ifall false"
exec_test 10 "$BIN_BASE/if2/if2.bin --early-evaluation"
exec_test 10 "$BIN_BASE/if2/if2.bin --late-evaluation"
#exec_test 30 "$BIN_BASE/wavefront/wavefront.bin --early-evaluation"
+9
View File
@@ -0,0 +1,9 @@
wfinput=if01/wfInput.code
wfoutput=if01/wfOutput.code
includes=if01/includes.code
atomicTask.0=if01/atomic1.properties
atomicTask.1=if01/atomic2.properties
atomicTask.2=if01/atomic3.properties
+3
View File
@@ -0,0 +1,3 @@
sout->if1condOut.setValue(sin->if1cond.getValue());
sout->if1ValueOut.setValue(sin->if1Value.getValue());
+4
View File
@@ -0,0 +1,4 @@
name=AtomicActivity1
entries=1
entry.0=atomic1.code
+16
View File
@@ -0,0 +1,16 @@
std::cout << "AtomicActivity2:" << std::endl
<< "\tif1cond: " << sin->if1cond.getValue() << std::endl
<< "\tif1value: " << sin->if1Value.getValue() << std::endl;
if (!sin->if1cond.getValue()) {
#include <sstream>
std::stringstream ss;
ss << "Test Failure: if1cond [" << sin->if1cond.getValue() << "] is not true.";
throw wfr::exception::wfr_fatal_error(ss.str());
}
if (sin->if1Value.getValue() != -1) {
#include <sstream>
std::stringstream ss;
ss << "Test Failure: if1Value [" << sin->if1Value.getValue() << "] is not -1.";
throw wfr::exception::wfr_fatal_error(ss.str());
}
sout->if1ValueOut.setValue(2);
+4
View File
@@ -0,0 +1,4 @@
name=AtomicActivity2
entries=1
entry.0=atomic2.code
+16
View File
@@ -0,0 +1,16 @@
std::cout << "AtomicActivity3:" << std::endl
<< "\tif1cond: " << sin->if1Cond.getValue() << std::endl
<< "\tif1value: " << sin->if1Value.getValue() << std::endl;
if (sin->if1Cond.getValue()) {
#include <sstream>
std::stringstream ss;
ss << "Test Failure: if1cond [" << sin->if1Cond.getValue() << "] is not false.";
throw wfr::exception::wfr_fatal_error(ss.str());
}
if (sin->if1Value.getValue() != -1) {
#include <sstream>
std::stringstream ss;
ss << "Test Failure: if1Value [" << sin->if1Value.getValue() << "] is not -1.";
throw wfr::exception::wfr_fatal_error(ss.str());
}
sout->if1ValueOut.setValue(3);
+4
View File
@@ -0,0 +1,4 @@
name=AtomicActivity3
entries=1
entry.0=atomic3.code
+2
View File
@@ -0,0 +1,2 @@
#include <boost/program_options.hpp>
#include <thread>
+47
View File
@@ -0,0 +1,47 @@
bool isHelp = false;
bool if1Cond = true;
bool if2Cond = true;
bool if3Cond = true;
bool if4Cond = true;
boost::program_options::options_description opts("if1 Options");
opts.add_options()
("help", "Print help message.")
("if1", boost::program_options::value<bool>(), "if1 condition")
("if2", boost::program_options::value<bool>(), "if2 condition")
("if3", boost::program_options::value<bool>(), "if3 condition")
("if4", boost::program_options::value<bool>(), "if4 condition");
boost::program_options::variables_map vm;
auto parsed = boost::program_options::command_line_parser(argc, argv).options(opts).allow_unregistered().run();
boost::program_options::store(parsed, vm);
boost::program_options::notify(vm);
if (vm.count("help")) {
std::cerr << opts << std::endl;
isHelp = true;
} else {
if (vm.count("if1")) {
if1Cond = vm["if1"].as<bool>();
}
if (vm.count("if2")) {
if2Cond = vm["if2"].as<bool>();
}
if (vm.count("if3")) {
if3Cond = vm["if3"].as<bool>();
}
if (vm.count("if4")) {
if4Cond = vm["if4"].as<bool>();
}
std::cerr << "if1 = " << if1Cond << std::endl;
std::cerr << "if2 = " << if2Cond << std::endl;
std::cerr << "if3 = " << if3Cond << std::endl;
std::cerr << "if4 = " << if4Cond << std::endl;
}
wfInput.if1cond.setValue(if1Cond);
wfInput.if2cond.setValue(if2Cond);
wfInput.if3cond.setValue(if3Cond);
wfInput.if4cond.setValue(if4Cond);
wfInput.if1Value.setValue(-1);
wfInput.if2Value.setValue(-1);
wfInput.if3Value.setValue(-1);
wfInput.if4Value.setValue(-1);
+63
View File
@@ -0,0 +1,63 @@
std::cout << "wfOutput:" << std::endl
<< "\tisOk1: " << wfOutput.isOk1.getValue() << std::endl
<< "\tisOk2: " << wfOutput.isOk2.getValue() << std::endl
<< "\tif1valueOut: " << wfOutput.if1valueOut.getValue() << std::endl
<< "\tif2valueOut: " << wfOutput.if2ValueOut.getValue() << std::endl
<< "\tif3valueOut: " << wfOutput.if3ValueOut.getValue() << std::endl
<< "\tif4valueOut: " << wfOutput.if4ValueOut.getValue() << std::endl;
if (wfOutput.isOk1.getValue() != true) {
#include <sstream>
std::stringstream ss;
ss << "Test Failure: isOk1 [" << wfOutput.isOk1.getValue() << "] is not true.";
throw wfr::exception::wfr_fatal_error(ss.str());
}
if (wfOutput.isOk2.getValue() != true) {
#include <sstream>
std::stringstream ss;
ss << "Test Failure: isOk2 [" << wfOutput.isOk2.getValue() << "] is not true.";
throw wfr::exception::wfr_fatal_error(ss.str());
}
if (wfInput.if1cond.getValue() && wfOutput.if1valueOut.getValue() != 2) {
#include <sstream>
std::stringstream ss;
ss << "Test Failure: if1valueOut [" << wfOutput.if1valueOut.getValue() << "] is not 2.";
throw wfr::exception::wfr_fatal_error(ss.str());
} else if (!wfInput.if1cond.getValue() && wfOutput.if1valueOut.getValue() != 3) {
#include <sstream>
std::stringstream ss;
ss << "Test Failure: if1valueOut [" << wfOutput.if1valueOut.getValue() << "] is not 3.";
throw wfr::exception::wfr_fatal_error(ss.str());
}
if (wfInput.if2cond.getValue() && wfOutput.if2ValueOut.getValue() != 4) {
#include <sstream>
std::stringstream ss;
ss << "Test Failure: if2valueOut [" << wfOutput.if2ValueOut.getValue() << "] is not 4.";
throw wfr::exception::wfr_fatal_error(ss.str());
} else if (!wfInput.if2cond.getValue() && wfOutput.if2ValueOut.getValue() != -1) {
#include <sstream>
std::stringstream ss;
ss << "Test Failure: if2valueOut [" << wfOutput.if2ValueOut.getValue() << "] is not -1.";
throw wfr::exception::wfr_fatal_error(ss.str());
}
if (wfInput.if3cond.getValue() && wfOutput.if3ValueOut.getValue() != -1) {
#include <sstream>
std::stringstream ss;
ss << "Test Failure: if3valueOut [" << wfOutput.if3ValueOut.getValue() << "] is not -1.";
throw wfr::exception::wfr_fatal_error(ss.str());
} else if (!wfInput.if3cond.getValue() && wfOutput.if3ValueOut.getValue() != 6) {
#include <sstream>
std::stringstream ss;
ss << "Test Failure: if3valueOut [" << wfOutput.if3ValueOut.getValue() << "] is not 6.";
throw wfr::exception::wfr_fatal_error(ss.str());
}
if (wfInput.if4cond.getValue() && wfOutput.if4ValueOut.getValue() != 7) {
#include <sstream>
std::stringstream ss;
ss << "Test Failure: if4valueOut [" << wfOutput.if4ValueOut.getValue() << "] is not 7.";
throw wfr::exception::wfr_fatal_error(ss.str());
} else if (!wfInput.if4cond.getValue() && wfOutput.if4ValueOut.getValue() != -1) {
#include <sstream>
std::stringstream ss;
ss << "Test Failure: if4valueOut [" << wfOutput.if4ValueOut.getValue() << "] is not -1.";
throw wfr::exception::wfr_fatal_error(ss.str());
}
+9 -1
View File
@@ -10,7 +10,8 @@
("if1", boost::program_options::value<bool>(), "if1 condition")
("if2", boost::program_options::value<bool>(), "if2 condition")
("if3", boost::program_options::value<bool>(), "if3 condition")
("if4", boost::program_options::value<bool>(), "if4 condition");
("if4", boost::program_options::value<bool>(), "if4 condition")
("ifall", boost::program_options::value<bool>(), "all if conditions");
boost::program_options::variables_map vm;
auto parsed = boost::program_options::command_line_parser(argc, argv).options(opts).allow_unregistered().run();
boost::program_options::store(parsed, vm);
@@ -31,6 +32,13 @@
if (vm.count("if4")) {
if4Cond = vm["if4"].as<bool>();
}
if (vm.count("ifall")) {
auto val = vm["ifall"].as<bool>();
if1Cond = val;
if2Cond = val;
if3Cond = val;
if4Cond = val;
}
std::cerr << "if1 = " << if1Cond << std::endl;
std::cerr << "if2 = " << if2Cond << std::endl;
std::cerr << "if3 = " << if3Cond << std::endl;
+76
View File
@@ -0,0 +1,76 @@
<IWIR version="1.1" wfname="UTest_Conditional1" xmlns="http://shiwa-workflow.eu/IWIR">
<blockScope name="toplevel">
<inputPorts>
<inputPort name="if1cond" type="boolean"/>
<inputPort name="if1Value" type="integer"/>
</inputPorts>
<body>
<task name="AtomicActivity1" tasktype="AtomicActivity1">
<inputPorts>
<inputPort name="if1cond" type="boolean"/>
<inputPort name="if1Value" type="integer"/>
</inputPorts>
<outputPorts>
<outputPort name="if1condOut" type="boolean"/>
<outputPort name="if1ValueOut" type="integer"/>
</outputPorts>
</task>
<if name="DecisionNode1">
<inputPorts>
<inputPort name="if1cond" type="boolean"/>
<inputPort name="if1Value" type="integer"/>
</inputPorts>
<condition>if1cond = true</condition>
<then>
<task name="AtomicActivity2" tasktype="AtomicActivity2">
<inputPorts>
<inputPort name="if1cond" type="boolean"/>
<inputPort name="if1Value" type="integer"/>
</inputPorts>
<outputPorts>
<outputPort name="if1ValueOut" type="integer"/>
</outputPorts>
</task>
</then>
<else>
<task name="AtomicActivity3" tasktype="AtomicActivity3">
<inputPorts>
<inputPort name="if1Cond" type="boolean"/>
<inputPort name="if1Value" type="integer"/>
</inputPorts>
<outputPorts>
<outputPort name="if1ValueOut" type="integer"/>
</outputPorts>
</task>
</else>
<outputPorts>
<outputPort name="if1ValueOut" type="integer"/>
</outputPorts>
<links>
<link from="DecisionNode1/if1Value" to="AtomicActivity2/if1Value"/>
<link from="DecisionNode1/if1cond" to="AtomicActivity2/if1cond"/>
<link from="DecisionNode1/if1cond" to="AtomicActivity3/if1Cond"/>
<link from="DecisionNode1/if1Value" to="AtomicActivity3/if1Value"/>
<link from="AtomicActivity2/if1ValueOut" to="DecisionNode1/if1ValueOut"/>
<link from="AtomicActivity3/if1ValueOut" to="DecisionNode1/if1ValueOut"/>
</links>
</if>
</body>
<outputPorts>
<outputPort name="if1valueOut" type="integer"/>
</outputPorts>
<links>
<link from="toplevel/if1Value" to="AtomicActivity1/if1Value"/>
<link from="toplevel/if1cond" to="AtomicActivity1/if1cond"/>
<link from="AtomicActivity1/if1condOut" to="DecisionNode1/if1cond"/>
<link from="AtomicActivity1/if1ValueOut" to="DecisionNode1/if1Value"/>
<link from="DecisionNode1/if1ValueOut" to="toplevel/if1valueOut"/>
</links>
<properties>
<property name="version" value="1.0.0"/>
<property name="author" value="matthias"/>
<property name="domain" value="Generic"/>
</properties>
</blockScope>
</IWIR>