diff --git a/src/flextype/core/Entries/Expressions/MathExpression.php b/src/flextype/core/Entries/Expressions/MathExpression.php new file mode 100644 index 00000000..a169b772 --- /dev/null +++ b/src/flextype/core/Entries/Expressions/MathExpression.php @@ -0,0 +1,35 @@ + '\ceil($num)', static fn (array $arguments, int|float $num): float => \ceil($num)), + new ExpressionFunction('floor', static fn (int|float $num): float => '\floor($num)', static fn (array $arguments, int|float $num): float => \floor($num)), + new ExpressionFunction('min', static fn (mixed ...$values): mixed => '\min($values)', static fn (array $arguments, mixed ...$values): mixed => \min($values)), + new ExpressionFunction('max', static fn (mixed ...$values): mixed => '\max($values)', static fn (array $arguments, mixed ...$values): mixed => \max($values)), + ]; + } +} diff --git a/tests/src/flextype/core/Entries/Expressions/MathExpressionTest.php b/tests/src/flextype/core/Entries/Expressions/MathExpressionTest.php new file mode 100644 index 00000000..cf847d55 --- /dev/null +++ b/tests/src/flextype/core/Entries/Expressions/MathExpressionTest.php @@ -0,0 +1,33 @@ +directory(FLEXTYPE_PATH_PROJECT . '/entries')->create(); +}); + +afterEach(function (): void { + filesystem()->directory(FLEXTYPE_PATH_PROJECT . '/entries')->delete(); +}); + +test('ceil expression', function () { + entries()->create('ceil', ['test' => '[[ ceil(42.1) ]]']); + expect(entries()->fetch('ceil')['test'])->toBe('43'); +}); + +test('floor expression', function () { + entries()->create('floor', ['test' => '[[ floor(4.3) ]]']); + expect(entries()->fetch('floor')['test'])->toBe('4'); +}); + +test('min expression', function () { + entries()->create('min', ['test' => '[[ min(2, 3, 1, 6, 7) ]]']); + expect(entries()->fetch('min')['test'])->toBe('1'); +}); + +test('max expression', function () { + entries()->create('max', ['test' => '[[ max(2, 3, 1, 6, 7) ]]']); + expect(entries()->fetch('max')['test'])->toBe('7'); +}); \ No newline at end of file