Lines 75.00% 6 / 8
Methods 50.00% 1 / 2
Classes 0.00% 0 / 1
Name Lines Methods CRAP
 settle 0.00% 0 / 2 0.00% 0 / 1 6
 settleUntil 100.00% 6 / 6 100.00% 1 / 1 4
12final class EventLoopTicks
13{
14    private const int DEFAULT_TICK_LIMIT = 50;
15
16    public static function settle(int $ticks = 2): void
17    {
18        for ($tick = 0; $tick < $ticks; ++$tick) {
19            delay(0);
20        }
21    }
22
23    /** @param Closure(): bool $condition */
24    public static function settleUntil(Closure $condition, int $maxTicks = self::DEFAULT_TICK_LIMIT): void
25    {
26        for ($tick = 0; $tick < $maxTicks; ++$tick) {
27            if ($condition()) {
28                return;
29            }
30
31            delay(0);
32        }
33
34        if (!$condition()) {
35            throw new AssertionFailedError(\sprintf('The condition still fails after %d event loop ticks.', $maxTicks));
36        }
37    }
38}