9cdc34290a
Some changes: + Added support of functions with multiple arguments + Added some default function (min, max, avg). just example of multiple arguments :) - Removed variables support (I think they pointless) ~ All tokens now in individual classes ~ Parsing based on regular expressions ~ Fix negative numbers ~ Fix grouping with brackets
62 lines
1.3 KiB
PHP
62 lines
1.3 KiB
PHP
<?php
|
|
|
|
/**
|
|
* This file is part of the MathExecutor package
|
|
*
|
|
* (c) Alexander Kiryukhin
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code
|
|
*/
|
|
|
|
namespace NXP\Tests;
|
|
|
|
use \NXP\MathExecutor;
|
|
|
|
class MathTest extends \PHPUnit_Framework_TestCase
|
|
{
|
|
/**
|
|
* @dataProvider providerExpressions
|
|
*/
|
|
public function testCalculating($expression)
|
|
{
|
|
$calculator = new MathExecutor();
|
|
|
|
/** @var float $phpResult */
|
|
eval('$phpResult = ' . $expression . ';');
|
|
$this->assertEquals($calculator->execute($expression), $phpResult);
|
|
}
|
|
|
|
/**
|
|
* Expressions data provider
|
|
*/
|
|
public function providerExpressions()
|
|
{
|
|
return array(
|
|
array('0.1 + 0.2'),
|
|
array('1 + 2'),
|
|
|
|
array('0.1 - 0.2'),
|
|
array('1 - 2'),
|
|
|
|
array('0.1 * 2'),
|
|
array('1 * 2'),
|
|
|
|
array('0.1 / 0.2'),
|
|
array('1 / 2'),
|
|
|
|
array('2 * 2 + 3 * 3'),
|
|
|
|
array('1 + 0.6 - 3 * 2 / 50'),
|
|
|
|
array('(5 + 3) * -1'),
|
|
|
|
array('2+2*2'),
|
|
array('(2+2)*2'),
|
|
array('(2+2)*-2'),
|
|
array('(2+-2)*2'),
|
|
|
|
array('sin(10) * cos(50) / min(10, 20/2)')
|
|
);
|
|
}
|
|
} |