87 lines
1.9 KiB
PHP
87 lines
1.9 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);
|
|
}
|
|
|
|
public function testZeroDivision()
|
|
{
|
|
$calculator = new MathExecutor();
|
|
$this->assertEquals($calculator->execute('1 / 0'), 0);
|
|
}
|
|
|
|
public function testExponentiation()
|
|
{
|
|
$calculator = new MathExecutor();
|
|
$this->assertEquals($calculator->execute('10 ^ 2'), 100);
|
|
}
|
|
|
|
/**
|
|
* Expressions data provider
|
|
*/
|
|
public function providerExpressions()
|
|
{
|
|
return [
|
|
['0.1 + 0.2'],
|
|
['1 + 2'],
|
|
|
|
['0.1 - 0.2'],
|
|
['1 - 2'],
|
|
|
|
['0.1 * 2'],
|
|
['1 * 2'],
|
|
|
|
['0.1 / 0.2'],
|
|
['1 / 2'],
|
|
|
|
['2 * 2 + 3 * 3'],
|
|
|
|
['1 + 0.6 - 3 * 2 / 50'],
|
|
|
|
['(5 + 3) * -1'],
|
|
|
|
['2+2*2'],
|
|
['(2+2)*2'],
|
|
['(2+2)*-2'],
|
|
['(2+-2)*2'],
|
|
|
|
['sin(10) * cos(50) / min(10, 20/2)'],
|
|
|
|
['100500 * 3.5E5'],
|
|
['100500 * 3.5E-5'],
|
|
];
|
|
}
|
|
|
|
public function testFunction()
|
|
{
|
|
$calculator = new MathExecutor();
|
|
|
|
$calculator->addFunction('round', function ($arg) { return round($arg); }, 1);
|
|
/** @var float $phpResult */
|
|
eval('$phpResult = round(100/30);');
|
|
$this->assertEquals($calculator->execute('round(100/30)'), $phpResult);
|
|
}
|
|
} |