Range::__invoke()   A
last analyzed

Complexity

Conditions 3
Paths 1

Size

Total Lines 21
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 3

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 7
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 21
ccs 8
cts 8
cp 1
crap 3
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace loophp\collection\Operation;
6
7
use Closure;
8
use Generator;
9
10
use const INF;
11
12
/**
13
 * @immutable
14
 *
15
 * @template TKey
16
 * @template T
17
 */
18
final class Range extends AbstractOperation
19
{
20
    /**
21
     * @return Closure(int|float=): Closure(int|float=): Closure(int|float=): Closure(): Generator<int, int|float>
22
     */
23 2
    public function __invoke(): Closure
24
    {
25 2
        return
26
            /**
27
             * @return Closure(int|float=): Closure(int|float=): Closure(): Generator<int, int|float>
28
             */
29 2
            static fn (float|int $start = 0.0): Closure =>
30
                /**
31
                 * @return Closure(int|float=): Closure(): Generator<int, int|float>
32
                 */
33 2
                static fn (float|int $end = INF): Closure =>
34
                    /**
35
                     * @return Closure(): Generator<int, int|float>
36
                     */
37 2
                    static fn (float|int $step = 1.0): Closure =>
38
                        /**
39
                         * @return Generator<int, int|float>
40
                         */
41 2
                        static function () use ($start, $end, $step): Generator {
42 2
                            for ($current = $start; $current < $end; $current += $step) {
43 2
                                yield (($intCurrent = (int) $current) === $current) ? $intCurrent : $current;
44
                            }
45 2
                        };
46
    }
47
}
48