Add test case for #58.
This commit is contained in:
parent
d2146e3881
commit
0ff503afa6
46
tests/issue-58-task-already-scheduled.d
Normal file
46
tests/issue-58-task-already-scheduled.d
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
/+ dub.sdl:
|
||||||
|
name "tests"
|
||||||
|
dependency "vibe-core" path=".."
|
||||||
|
+/
|
||||||
|
module tests;
|
||||||
|
|
||||||
|
import vibe.core.sync;
|
||||||
|
import vibe.core.core;
|
||||||
|
import std.datetime;
|
||||||
|
import core.atomic;
|
||||||
|
|
||||||
|
shared ManualEvent ev;
|
||||||
|
shared size_t counter;
|
||||||
|
|
||||||
|
shared static this()
|
||||||
|
{
|
||||||
|
ev = createSharedManualEvent();
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
setTaskStackSize(64*1024);
|
||||||
|
|
||||||
|
runTask({
|
||||||
|
foreach (x; 0 .. 500) {
|
||||||
|
runWorkerTask(&worker);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
setTimer(dur!"msecs"(10), { ev.emit(); });
|
||||||
|
setTimer(dur!"seconds"(20), { assert(false, "Timers didn't fire within the time limit"); });
|
||||||
|
|
||||||
|
runApplication();
|
||||||
|
|
||||||
|
assert(atomicLoad(counter) == 500, "Event loop exited prematurely.");
|
||||||
|
}
|
||||||
|
|
||||||
|
void worker()
|
||||||
|
{
|
||||||
|
ev.wait();
|
||||||
|
ev.emit();
|
||||||
|
setTimer(dur!"seconds"(1), {
|
||||||
|
auto c = atomicOp!"+="(counter, 1);
|
||||||
|
if (c == 500) exitEventLoop(true);
|
||||||
|
});
|
||||||
|
}
|
Loading…
Reference in a new issue