PHP Classes

File: tests/unit/ParserTest.php

Recommend this page to a friend!
  Classes of Jon Lawrence   Equation Operating System   tests/unit/ParserTest.php   Download  
File: tests/unit/ParserTest.php
Role: Unit test script
Content type: text/plain
Description: Unit test script
Class: Equation Operating System
Solve equations with multiple variables
Author: By
Last change: Make variable test for 5.3

Remove shorthand array to 'array()' format for PHP 5.3.
Even More Tests

All the tests! Run them!
More Tests

More Tests Added
Add more tests
Merge branch 'master' of https://github.com/jlawrence11/eos
Merge pull request #9 from elliotwms/master

Commenting consistency
Date: 8 years ago
Size: 5,218 bytes
 

Contents

Class file image Download
<?php

require_once __DIR__ . "/../../vendor/autoload.php";

use
jlawrence\eos\Parser;
use
jlawrence\eos\Trig;

class
ParserTest extends PHPUnit_Framework_TestCase
{
    public function
testAddition()
    {
       
$this->assertEquals(2, Parser::solve('1+1'));
    }

    public function
testSubtraction()
    {
       
$this->assertEquals(3, Parser::solve('9-6'));
    }

    public function
testMultiplication()
    {
       
$this->assertEquals(10, Parser::solve('5*2'));
    }

    public function
testDivision()
    {
       
$this->assertEquals(4, Parser::solve('12 / 3'));
    }

    public function
testAdditionAndSubtraction()
    {
       
$this->assertEquals(5, Parser::solve('3 + 4 - 2'));
    }

    public function
testMultiplicationAndDivision()
    {
       
$this->assertEquals(8, Parser::solve('16 * 2 / 4'));
    }

    public function
testBIDMAS()
    {
       
$this->assertEquals(14, Parser::solve('2 + 3 * 4'));
       
$this->assertEquals(12, Parser::solve('3 * (7 - 3)'));
       
$this->assertEquals(13, Parser::solve('2 + 3 * 5 - 4'));
       
$this->assertEquals(20, Parser::solve('5+((1+2)*4)+3'));
    }

    public function
testVariables()
    {
       
$this->assertEquals(10, Parser::solve('x*y', array(
           
'x' => 5,
           
'y' => 2
       
)));

       
$this->assertEquals(24, Parser::solve('2(4x)', array(
           
'x' => 3
       
)));

       
$this->assertEquals(15, Parser::solve('2a+a', array(
           
'a' => 5
       
)));
    }

    public function
testTrigonometryInDegrees()
    {
       
Trig::$DEGREES = true;
       
$this->assertEquals(0, Parser::solve('sin(180)'));
       
$this->assertEquals(0, Parser::solve('cos(90)'));
       
$this->assertEquals(1, Parser::solve('tan(45)'));

       
Trig::$DEGREES = false;
    }

    public function
testTrigonometry()
    {
       
$this->assertEquals(1, Parser::solve('sin(pi/2)'));
       
$this->assertEquals(-1, Parser::solve('cos(pi)'));
       
$this->assertEquals(1, Parser::solve('tan(pi/4)'));
       
$this->assertEquals(1, Parser::solve('csc(pi/2)'));
       
$this->assertEquals(-1, Parser::solve('sec(pi)'));
       
$this->assertEquals(1, Parser::solve('cot(pi/4)'));
    }

    public function
testGamma()
    {
       
$this->assertEquals(120, Parser::solve('5!'));
       
$this->assertEquals(720, Parser::solve('3!!'));

       
$result = Parser::solve('3.5!');

       
$this->assertTrue(11.64 > $result && $result > 11.63);
    }

    public function
testLogSqrtPowersSummation()
    {
       
$this->assertEquals(2, Parser::solve('ln(e^2)'));
       
$this->assertEquals(8, Parser::solve("log(sqrt(2^x),2)", 16));
       
$this->assertEquals(2, Parser::solve("log(100)"));
       
$this->assertEquals(9, Parser::solve('sum(sum(x, 1, 2)x, 1, 2)'));
       
$this->assertEquals(100, Parser::solve("sum(100, 2, 3)"));
    }

    public function
testModulus()
    {
       
$this->assertEquals(2, Parser::solve("5%3"));
       
$this->assertEquals(1, Parser::solve("4%3"));
    }

    public function
testAbs()
    {
       
$this->assertEquals(4, Parser::solve("abs(-4)"));
    }

    public function
testSolvePostFix()
    {
       
$pf = array('2', '3', '+');
       
$this->assertEquals(5, Parser::solve($pf));
    }

   
/**
     * @expectedException \Exception
     * @expectedExceptionCode \jlawrence\eos\Math::E_DIV_ZERO
     */
   
public function testDivisionByZero()
    {
       
Parser::solve("3/0");
    }

   
/**
     * @expectedException \Exception
     * @expectedExceptionCode \jlawrence\eos\Math::E_DIV_ZERO
     */
   
public function testModulusByZero()
    {
       
Parser::solve("3%0");
    }

   
/**
     * @expectedException \Exception
     * @expectedExceptionCode \jlawrence\eos\Math::E_NAN
     */
   
public function testLnError()
    {
       
Parser::solve("ln(0)");
    }

   
/**
     * @expectedException \Exception
     * @expectedExceptionCode \jlawrence\eos\Math::E_NAN
     */
   
public function testLogError()
    {
       
Parser::solve("log(0)");
    }

   
/**
     * @expectedException \Exception
     * @expectedExceptionCode \jlawrence\eos\Math::E_NAN
     */
   
public function testSqrtError()
    {
       
Parser::solve("sqrt(-4)");
    }

   
/**
     * @expectedException \Exception
     * @expectedExceptionCode \jlawrence\eos\Math::E_NO_VAR
     */
   
public function testNoVariable()
    {
       
Parser::solve("4x");
    }

   
/**
     * @expectedException \Exception
     * @expectedExceptionCode \jlawrence\eos\Math::E_NAN
     */
   
public function testNegativeFactorial()
    {
       
Parser::solve("-4!");
    }

   
/**
     * @expectedException \Exception
     * @expectedExceptionCode \jlawrence\eos\Math::E_NO_EQ
     */
   
public function testNoEquation()
    {
       
Parser::solve("");
    }

   
/**
     * @expectedException \Exception
     * @expectedExceptionCode \jlawrence\eos\Math::E_NO_SET
     */
   
public function testMismatchedParenthesis()
    {
       
Parser::solve("(2+(3*4)");
    }

   
/**
     * @expectedException \Exception
     * @expectedExceptionCode \jlawrence\eos\Math::E_NO_SET
     */
   
public function testMismatchedBrackets()
    {
       
Parser::solve("[2+[3*4]");
    }
}