47 lines
774 B
D
47 lines
774 B
D
|
/+ 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);
|
||
|
});
|
||
|
}
|