Skip to content

Commit 70b3543

Browse files
committed
added Helpers::compare()
1 parent a823f8e commit 70b3543

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

src/Utils/Helpers.php

+19
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,23 @@ public static function getSuggestion(array $possibilities, string $value): ?stri
8282

8383
return $best;
8484
}
85+
86+
87+
/**
88+
* Compares two values. Recognizes operators: >, >=, <, <=, =, ==, ===, !=, !==, <>
89+
*/
90+
public static function compare(mixed $l, string $operator, mixed $r): bool
91+
{
92+
return match ($operator) {
93+
'>' => $l > $r,
94+
'>=' => $l >= $r,
95+
'<' => $l < $r,
96+
'<=' => $l <= $r,
97+
'=', '==' => $l == $r,
98+
'===' => $l === $r,
99+
'!=', '<>' => $l != $r,
100+
'!==' => $l !== $r,
101+
default => throw new Nette\InvalidArgumentException("Unknown operator '$operator'"),
102+
};
103+
}
85104
}

tests/Utils/Helpers.compare().phpt

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use Nette\Utils\Helpers;
6+
use Tester\Assert;
7+
8+
require __DIR__ . '/../bootstrap.php';
9+
10+
11+
Assert::false(Helpers::compare(1, '>', 1));
12+
Assert::false(Helpers::compare(1, '>', 2));
13+
Assert::false(Helpers::compare(1, '<', 1));
14+
Assert::true(Helpers::compare(1, '<', 2));
15+
16+
Assert::true(Helpers::compare(1, '>=', 1));
17+
Assert::false(Helpers::compare(1, '>=', 2));
18+
Assert::true(Helpers::compare(1, '<=', 1));
19+
Assert::true(Helpers::compare(1, '<=', 2));
20+
21+
Assert::true(Helpers::compare(1, '=', 1));
22+
Assert::true(Helpers::compare(1.0, '=', 1));
23+
Assert::false(Helpers::compare(1, '=', 2));
24+
25+
Assert::true(Helpers::compare(1, '==', 1));
26+
Assert::true(Helpers::compare(1.0, '==', 1));
27+
Assert::false(Helpers::compare(1, '==', 2));
28+
29+
Assert::true(Helpers::compare(1, '===', 1));
30+
Assert::false(Helpers::compare(1.0, '===', 1));
31+
Assert::false(Helpers::compare(1, '===', 2));
32+
33+
Assert::false(Helpers::compare(1, '<>', 1));
34+
Assert::false(Helpers::compare(1.0, '<>', 1));
35+
Assert::true(Helpers::compare(1, '<>', 2));
36+
37+
Assert::false(Helpers::compare(1, '!=', 1));
38+
Assert::false(Helpers::compare(1.0, '!=', 1));
39+
Assert::true(Helpers::compare(1, '!=', 2));
40+
41+
Assert::false(Helpers::compare(1, '!==', 1));
42+
Assert::true(Helpers::compare(1.0, '!==', 1));
43+
Assert::true(Helpers::compare(1, '!==', 2));
44+
45+
Assert::exception(function () {
46+
Helpers::compare(1, 'x', 1);
47+
}, Nette\InvalidArgumentException::class, "Unknown operator 'x'");

0 commit comments

Comments
 (0)