summaryrefslogtreecommitdiffstats
path: root/test/src/test-lifecycle.cpp
diff options
context:
space:
mode:
authorStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2014-06-24 13:03:20 (GMT)
committerStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2014-06-24 13:03:20 (GMT)
commit758bda908ded461c9d34d274a18454ffba4b7450 (patch)
treefb7f1ba28eab9f20b4ca16ed4dbc36d07dfce06e /test/src/test-lifecycle.cpp
parentfebde41c4c69d8f38967d5c195328d468834d037 (diff)
downloaduscxml-758bda908ded461c9d34d274a18454ffba4b7450.zip
uscxml-758bda908ded461c9d34d274a18454ffba4b7450.tar.gz
uscxml-758bda908ded461c9d34d274a18454ffba4b7450.tar.bz2
- Prolog DM compiles with recent SWI release again
- Bugfixes for stress test - Beautified code
Diffstat (limited to 'test/src/test-lifecycle.cpp')
-rw-r--r--test/src/test-lifecycle.cpp341
1 files changed, 172 insertions, 169 deletions
diff --git a/test/src/test-lifecycle.cpp b/test/src/test-lifecycle.cpp
index d28d1a5..4c044c4 100644
--- a/test/src/test-lifecycle.cpp
+++ b/test/src/test-lifecycle.cpp
@@ -48,7 +48,7 @@ void __cxa_throw (void *thrown_exception, void *pvtinfo, void (*dest)(void *)) {
std::cerr << __FUNCTION__ << " will throw exception from " << std::endl;
if (orig_cxa_throw == 0)
load_orig_throw_code();
-
+
void *array[50];
size_t size = backtrace(array, 50);
printBacktrace(array, size);
@@ -71,204 +71,207 @@ void customTerminate() {
};
} catch (const std::exception &e) {
std::cerr << __FUNCTION__ << " caught unhandled exception. what(): "
- << e.what() << std::endl;
+ << e.what() << std::endl;
} catch (const uscxml::Event &e) {
std::cerr << __FUNCTION__ << " caught unhandled exception. Event: "
- << e << std::endl;
+ << e << std::endl;
} catch (...) {
std::cerr << __FUNCTION__ << " caught unknown/unhandled exception."
- << std::endl;
+ << std::endl;
}
-
+
#ifdef HAS_EXECINFO_H
void * array[50];
int size = backtrace(array, 50);
-
+
printBacktrace(array, size);
#endif
abort();
}
int main(int argc, char** argv) {
using namespace uscxml;
-
+
std::set_terminate(customTerminate);
-
+
#if defined(HAS_SIGNAL_H) && !defined(WIN32)
signal(SIGPIPE, SIG_IGN);
#endif
-
+
google::InitGoogleLogging(argv[0]);
google::LogToStderr();
InterpreterState state;
- if (1) {
- // syntactic xml parse error
- const char* xml = "<invalid>";
- Interpreter interpreter = Interpreter::fromXML(xml);
- state = interpreter.getState();
- assert(!interpreter);
- assert(state == uscxml::InterpreterState::USCXML_FAULTED);
- std::cout << interpreter.getState() << std::endl;
- }
+ int iterations = 1;
- if (1) {
- // semantic xml parse error
- const char* xml = "<invalid />";
- Interpreter interpreter = Interpreter::fromXML(xml);
- state = interpreter.getState();
- assert(state == uscxml::InterpreterState::USCXML_INSTANTIATED);
-
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_FAULTED);
- std::cout << interpreter.getState() << std::endl;
- }
+ while(iterations--) {
+ if (1) {
+ // syntactic xml parse error
+ const char* xml = "<invalid>";
+ Interpreter interpreter = Interpreter::fromXML(xml);
+ state = interpreter.getState();
+ assert(!interpreter);
+ assert(state == uscxml::InterpreterState::USCXML_FAULTED);
+ std::cout << interpreter.getState() << std::endl;
+ }
- if (1) {
- // single macrostep, multiple runs
- const char* xml =
- "<scxml>"
- " <state id=\"start\">"
- " <transition target=\"done\" />"
- " </state>"
- " <final id=\"done\" />"
- "</scxml>";
-
- Interpreter interpreter = Interpreter::fromXML(xml);
- assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED);
- interpreter.reset();
- assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED);
- interpreter.reset();
- assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED);
- interpreter.reset();
- assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED);
- }
+ if (1) {
+ // semantic xml parse error
+ const char* xml = "<invalid />";
+ Interpreter interpreter = Interpreter::fromXML(xml);
+ state = interpreter.getState();
+ assert(state == uscxml::InterpreterState::USCXML_INSTANTIATED);
- if (1) {
- // two microsteps
- const char* xml =
- "<scxml>"
- " <state id=\"start\">"
- " <transition target=\"s2\" />"
- " </state>"
- " <state id=\"s2\">"
- " <transition target=\"done\" />"
- " </state>"
- " <final id=\"done\" />"
- "</scxml>";
-
- Interpreter interpreter = Interpreter::fromXML(xml);
-
- assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED);
- }
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_FAULTED);
+ std::cout << interpreter.getState() << std::endl;
+ }
- if (0) {
- // macrostep in between
- const char* xml =
- "<scxml>"
- " <state id=\"start\">"
- " <onentry>"
- " <send event=\"continue\" delay=\"2s\"/>"
- " </onentry>"
- " <transition target=\"s2\" event=\"continue\" />"
- " </state>"
- " <state id=\"s2\">"
- " <transition target=\"done\" />"
- " </state>"
- " <final id=\"done\" />"
- "</scxml>";
-
- Interpreter interpreter = Interpreter::fromXML(xml);
-
- assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_IDLE);
- assert(interpreter.step(true) == uscxml::InterpreterState::USCXML_MACROSTEPPED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED);
- interpreter.reset();
- assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_IDLE);
- assert(interpreter.step(true) == uscxml::InterpreterState::USCXML_MACROSTEPPED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED);
- }
+ if (1) {
+ // single macrostep, multiple runs
+ const char* xml =
+ "<scxml>"
+ " <state id=\"start\">"
+ " <transition target=\"done\" />"
+ " </state>"
+ " <final id=\"done\" />"
+ "</scxml>";
- if (1) {
- // macrostep in between, external event
- const char* xml =
- "<scxml>"
- " <state id=\"start\">"
- " <transition target=\"s2\" event=\"continue\" />"
- " </state>"
- " <state id=\"s2\">"
- " <transition target=\"done\" />"
- " </state>"
- " <final id=\"done\" />"
- "</scxml>";
-
- Interpreter interpreter = Interpreter::fromXML(xml);
-
- assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_IDLE);
- interpreter.receive(Event("continue"));
- assert(interpreter.step(true) == uscxml::InterpreterState::USCXML_MACROSTEPPED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED);
- interpreter.reset();
- assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_IDLE);
- interpreter.receive(Event("continue"));
- assert(interpreter.step(true) == uscxml::InterpreterState::USCXML_MACROSTEPPED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED);
- assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED);
- }
+ Interpreter interpreter = Interpreter::fromXML(xml);
+ assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED);
+ interpreter.reset();
+ assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED);
+ interpreter.reset();
+ assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED);
+ interpreter.reset();
+ assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED);
+ }
+
+ if (1) {
+ // two microsteps
+ const char* xml =
+ "<scxml>"
+ " <state id=\"start\">"
+ " <transition target=\"s2\" />"
+ " </state>"
+ " <state id=\"s2\">"
+ " <transition target=\"done\" />"
+ " </state>"
+ " <final id=\"done\" />"
+ "</scxml>";
+
+ Interpreter interpreter = Interpreter::fromXML(xml);
+
+ assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED);
+ }
+
+ if (0) {
+ // macrostep in between
+ const char* xml =
+ "<scxml>"
+ " <state id=\"start\">"
+ " <onentry>"
+ " <send event=\"continue\" delay=\"2s\"/>"
+ " </onentry>"
+ " <transition target=\"s2\" event=\"continue\" />"
+ " </state>"
+ " <state id=\"s2\">"
+ " <transition target=\"done\" />"
+ " </state>"
+ " <final id=\"done\" />"
+ "</scxml>";
+
+ Interpreter interpreter = Interpreter::fromXML(xml);
+
+ assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_IDLE);
+ assert(interpreter.step(true) == uscxml::InterpreterState::USCXML_MACROSTEPPED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED);
+ interpreter.reset();
+ assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_IDLE);
+ assert(interpreter.step(true) == uscxml::InterpreterState::USCXML_MACROSTEPPED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED);
+ }
+
+ if (1) {
+ // macrostep in between, external event
+ const char* xml =
+ "<scxml>"
+ " <state id=\"start\">"
+ " <transition target=\"s2\" event=\"continue\" />"
+ " </state>"
+ " <state id=\"s2\">"
+ " <transition target=\"done\" />"
+ " </state>"
+ " <final id=\"done\" />"
+ "</scxml>";
+
+ Interpreter interpreter = Interpreter::fromXML(xml);
+
+ assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_IDLE);
+ interpreter.receive(Event("continue"));
+ assert(interpreter.step(true) == uscxml::InterpreterState::USCXML_MACROSTEPPED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED);
+ interpreter.reset();
+ assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_IDLE);
+ interpreter.receive(Event("continue"));
+ assert(interpreter.step(true) == uscxml::InterpreterState::USCXML_MACROSTEPPED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED);
+ assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED);
+ }
+
+ if (1) {
+ // macrostep in between, external event
+ const char* xml =
+ "<scxml>"
+ " <state id=\"start\">"
+ " <transition target=\"s2\" event=\"continue\" />"
+ " </state>"
+ " <state id=\"s2\">"
+ " <transition target=\"done\" />"
+ " </state>"
+ " <final id=\"done\" />"
+ "</scxml>";
+
+ Interpreter interpreter = Interpreter::fromXML(xml);
+ interpreter.start();
+ // assume interpreter is started
+ assert(interpreter.getState() & InterpreterState::USCXML_THREAD_STARTED);
+ tthread::this_thread::sleep_for(tthread::chrono::milliseconds(100));
+
+ // assume it is started and running
+ std::cout << interpreter.getState() << std::endl;
+
+ assert(interpreter.getState() & InterpreterState::USCXML_THREAD_STARTED);
+ assert(interpreter.getState() & InterpreterState::USCXML_THREAD_RUNNING);
+ assert(interpreter.getState() & InterpreterState::USCXML_IDLE);
+
+ interpreter.receive(Event("continue"));
+ tthread::this_thread::sleep_for(tthread::chrono::milliseconds(200));
- if (1) {
- // macrostep in between, external event
- const char* xml =
- "<scxml>"
- " <state id=\"start\">"
- " <transition target=\"s2\" event=\"continue\" />"
- " </state>"
- " <state id=\"s2\">"
- " <transition target=\"done\" />"
- " </state>"
- " <final id=\"done\" />"
- "</scxml>";
-
- Interpreter interpreter = Interpreter::fromXML(xml);
- interpreter.start();
- // assume interpreter is started
- assert(interpreter.getState() & InterpreterState::USCXML_THREAD_STARTED);
- tthread::this_thread::sleep_for(tthread::chrono::milliseconds(100));
-
- // assume it is started and running
- std::cout << interpreter.getState() << std::endl;
-
- assert(interpreter.getState() & InterpreterState::USCXML_THREAD_STARTED);
- assert(interpreter.getState() & InterpreterState::USCXML_THREAD_RUNNING);
- assert(interpreter.getState() & InterpreterState::USCXML_IDLE);
-
- interpreter.receive(Event("continue"));
- tthread::this_thread::sleep_for(tthread::chrono::milliseconds(200));
-
- std::cout << interpreter.getState() << std::endl;
- int state = interpreter.getState();
- assert(state & InterpreterState::USCXML_FINISHED);
- assert(!(state & InterpreterState::USCXML_THREAD_STARTED));
- assert(!(state & InterpreterState::USCXML_THREAD_RUNNING));
+ std::cout << interpreter.getState() << std::endl;
+ int state = interpreter.getState();
+ assert(state & InterpreterState::USCXML_FINISHED);
+ assert(!(state & InterpreterState::USCXML_THREAD_STARTED));
+ assert(!(state & InterpreterState::USCXML_THREAD_RUNNING));
+ }
}
-
return EXIT_SUCCESS;
} \ No newline at end of file