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)')); + } }