aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/NXP/Classes/Token/TokenMinus.php8
-rw-r--r--tests/MathTest.php7
2 files changed, 13 insertions, 2 deletions
diff --git a/src/NXP/Classes/Token/TokenMinus.php b/src/NXP/Classes/Token/TokenMinus.php
index d8ac079..b4b04e3 100644
--- a/src/NXP/Classes/Token/TokenMinus.php
+++ b/src/NXP/Classes/Token/TokenMinus.php
@@ -53,8 +53,12 @@ class TokenMinus extends AbstractOperator
$op2 = array_pop($stack);
$op1 = array_pop($stack);
- if ($op1 === null || $op2 === null) {
- throw new IncorrectExpressionException("Subtraction requires two operators");
+ if ($op2 === null) {
+ throw new IncorrectExpressionException("Subtraction requires right operator");
+ }
+
+ if (!$op1) {
+ $op1 = new TokenNumber(0);
}
$result = $op1->getValue() - $op2->getValue();
diff --git a/tests/MathTest.php b/tests/MathTest.php
index 27817db..3e5a7ff 100644
--- a/tests/MathTest.php
+++ b/tests/MathTest.php
@@ -297,4 +297,11 @@ class MathTest extends \PHPUnit\Framework\TestCase
$calculator->execute('test("' . $testString . '")'); // single quotes
$calculator->execute("test('" . $testString . "')"); // double quotes
}
+
+ public function testBeginWithBracketAndMinus()
+ {
+ $calculator = new MathExecutor();
+ $this->assertEquals(-4, $calculator->execute('(-4)'));
+ $this->assertEquals(1, $calculator->execute('(-4 + 5)'));
+ }
}