diff options
author | Christian Kamm <christian.d.kamm@nokia.com> | 2010-03-23 12:57:51 +0100 |
---|---|---|
committer | Christian Kamm <christian.d.kamm@nokia.com> | 2010-03-26 13:05:03 +0100 |
commit | 5548690f4a9f45c2d276bf36cfa8ca325a71dfc0 (patch) | |
tree | a78799e2181f333b60838fdfd5dcc603bf9a201d | |
parent | a443ffc48e5bc131f8980186e577b8329744a3e2 (diff) |
Add more complex test.
-rw-r--r-- | tests/auto/basic/tst_basic.cpp | 82 |
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" |