summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kamm <christian.d.kamm@nokia.com>2010-03-23 12:57:51 +0100
committerChristian Kamm <christian.d.kamm@nokia.com>2010-03-26 13:05:03 +0100
commit5548690f4a9f45c2d276bf36cfa8ca325a71dfc0 (patch)
treea78799e2181f333b60838fdfd5dcc603bf9a201d
parenta443ffc48e5bc131f8980186e577b8329744a3e2 (diff)
Add more complex test.
-rw-r--r--tests/auto/basic/tst_basic.cpp82
1 files changed, 82 insertions, 0 deletions
diff --git a/tests/auto/basic/tst_basic.cpp b/tests/auto/basic/tst_basic.cpp
index c33ef40..bbc9977 100644
--- a/tests/auto/basic/tst_basic.cpp
+++ b/tests/auto/basic/tst_basic.cpp
@@ -7,6 +7,7 @@ Q_OBJECT
private slots:
void noYield();
+ void coroutineStartingCoroutine();
};
class NoYieldCoro : public Coroutine
@@ -33,5 +34,86 @@ void tst_basic::noYield()
Q_ASSERT(Coroutine::currentCoroutine() != &coro);
}
+namespace CoroutineStartingCoroutine {
+ static Coroutine *base = 0;
+ static Coroutine *c1 = 0;
+
+ static void c1code()
+ {
+ QCOMPARE(base->status(), Coroutine::Running);
+ QCOMPARE(c1->status(), Coroutine::Running);
+ QCOMPARE(Coroutine::currentCoroutine(), c1);
+
+ Coroutine::yield();
+
+ QCOMPARE(base->status(), Coroutine::Stopped);
+ QCOMPARE(c1->status(), Coroutine::Running);
+ QCOMPARE(Coroutine::currentCoroutine(), c1);
+ }
+
+ static void startCoroutines()
+ {
+ QCOMPARE(base->status(), Coroutine::Running);
+ QCOMPARE(Coroutine::currentCoroutine(), base);
+
+ c1 = Coroutine::build(&c1code);
+ Q_ASSERT(c1);
+ QCOMPARE(c1->status(), Coroutine::NotStarted);
+
+ Coroutine::yield();
+
+ QCOMPARE(base->status(), Coroutine::Running);
+ QCOMPARE(c1->status(), Coroutine::NotStarted);
+ QCOMPARE(Coroutine::currentCoroutine(), base);
+
+ QCOMPARE(c1->cont(), true);
+
+ QCOMPARE(base->status(), Coroutine::Running);
+ QCOMPARE(c1->status(), Coroutine::Stopped);
+ QCOMPARE(Coroutine::currentCoroutine(), base);
+
+ Coroutine::yield();
+
+ QCOMPARE(base->status(), Coroutine::Running);
+ QCOMPARE(c1->status(), Coroutine::Terminated);
+ QCOMPARE(Coroutine::currentCoroutine(), base);
+ }
+}
+
+void tst_basic::coroutineStartingCoroutine()
+{
+ using namespace CoroutineStartingCoroutine;
+
+ Coroutine *start = Coroutine::currentCoroutine();
+
+ base = Coroutine::build(&startCoroutines);
+ Q_ASSERT(base);
+
+ QCOMPARE(base->cont(), true);
+
+ Q_ASSERT(c1);
+ QCOMPARE(base->status(), Coroutine::Stopped);
+ QCOMPARE(c1->status(), Coroutine::NotStarted);
+ QCOMPARE(Coroutine::currentCoroutine(), start);
+
+ QCOMPARE(base->cont(), true);
+
+ QCOMPARE(base->status(), Coroutine::Stopped);
+ QCOMPARE(c1->status(), Coroutine::Stopped);
+ QCOMPARE(Coroutine::currentCoroutine(), start);
+
+ QCOMPARE(c1->cont(), false);
+
+ QCOMPARE(base->status(), Coroutine::Stopped);
+ QCOMPARE(c1->status(), Coroutine::Terminated);
+ QCOMPARE(Coroutine::currentCoroutine(), start);
+
+ QCOMPARE(base->cont(), false);
+
+ QCOMPARE(base->status(), Coroutine::Terminated);
+ QCOMPARE(c1->status(), Coroutine::Terminated);
+ QCOMPARE(Coroutine::currentCoroutine(), start);
+}
+
QTEST_MAIN(tst_basic)
#include "tst_basic.moc"