<?php
require_once __DIR__ . "/../../vendor/autoload.php";
use jlawrence\eos\Matrix;
class MatrixTest extends PHPUnit_Framework_TestCase
{
public function testAssignToString()
{
$matrix = new Matrix("[1,0,1;0,1,0;1,0,1]");
$this->assertEquals("[1,0,1;0,1,0;1,0,1]", $matrix->toString());
}
public function testSquareN()
{
$matrix = new Matrix("[1,0,1;0,1,0;1,0,1]");
$this->assertTrue($matrix->isSquare());
$this->assertEquals(3, $matrix->_getN());
}
public function testIdentity()
{
$matrix = new Matrix();
$matrix->createIdentity(3);
$this->assertEquals("[1,0,0;0,1,0;0,0,1]", $matrix->toString());
}
public function testArray()
{
$matrix = new Matrix("[0,1,0]");
$this->assertEquals(array(array('0','1','0')), $matrix->getArray());
}
public function testPrettyPrint()
{
$toCompare = "| 0.00 1.00 0.00 |\n";
$matrix = new Matrix("[0,1,0]");
$this->assertEquals($toCompare, $matrix->prettyPrint());
}
public function testMatrixAddition()
{
$matrixA = new Matrix("[0,1,0;1,0,1;0,1,0]");
$matrixB = new Matrix("[1,0,1;0,1,0;1,0,1]");
$matrixC = $matrixA->addMatrix($matrixB);
$this->assertEquals("[1,1,1;1,1,1;1,1,1]", $matrixC->toString());
}
public function testMatrixSubtraction()
{
$matrixA = new Matrix("[1,1,1;1,1,1;1,1,1]");
$matrixB = new Matrix("[1,0,1;0,1,0;1,0,1]");
$matrixC = $matrixA->subMatrix($matrixB);
$this->assertEquals("[0,1,0;1,0,1;0,1,0]", $matrixC->toString());
}
public function testScalarMultiplication()
{
$matrixA = new Matrix("[0,3,0;4,0,5;0,6,0]");
$matrixB = $matrixA->mpScalar(2);
$this->assertEquals("[0,6,0;8,0,10;0,12,0]", $matrixB->toString());
}
public function testMatrixMultiplication()
{
$matrixA = new Matrix("[1,2,3;4,5,6;7,8,9]");
$matrixB = new Matrix("[1,0,1;0,1,0;1,0,1]");
$matrixC = $matrixA->mpMatrix($matrixB);
$this->assertEquals("[4,2,4;10,5,10;16,8,16]", $matrixC->toString());
}
public function testDeterminant()
{
$matrixA = new Matrix("[1,-3,3;2,3,-1;4,-3,-1]");
$this->assertEquals(-54, $matrixA->getDeterminant());
}
public function testCoFactor()
{
$matrixA = new Matrix("[1,-3,3;2,3,-1;4,-3,-1]");
$this->assertEquals("[-6,-2,-18;-12,-13,-9;-6,7,9]", $matrixA->coFactor(false,false));
}
public function testTranspose()
{
$matrixA = new Matrix("[1,-3,3;2,3,-1;4,-3,-1]");
$this->assertEquals("[1,2,4;-3,3,-3;3,-1,-1]", $matrixA->transpose(false,false));
}
public function testInverseAdjugate()
{
$matrixA = new Matrix("[1,0,1;0,1,0;0,0,1]");
$this->assertEquals("[1,0,-1;0,1,0;0,0,1]", $matrixA->inverse());
}
public function testNonMatrixInput()
{
$matrix = new Matrix();
$this->assertFalse($matrix->_assign("[1,2,3;4,5;6,7,8]"));
$this->assertFalse($matrix->isValid("[]"));
$this->assertFalse($matrix->isSquare("[]"));
}
public function testMatrixIdentity()
{
$matrix = new Matrix();
$matrixB = $matrix->createIdentity(2, false);
$this->assertEquals("[1,0;0,1]", $matrixB->toString());
}
/**
* @expectedException \Exception
* @expectedExceptionCode \jlawrence\eos\Matrix::E_NOT_SQUARE
*/
public function testNonSquareN()
{
$matrix = new Matrix("[1,2,3;4,5,6]");
$matrix->_getN();
}
/**
* @expectedException \Exception
* @expectedExceptionCode \jlawrence\eos\Matrix::E_NO_MATRIX
*/
public function testNoMatrixString()
{
$matrix = new Matrix();
$temp = sprintf("%s", $matrix->toString());
}
/**
* @expectedException \Exception
* @expectedExceptionCode \jlawrence\eos\Matrix::E_INVALID_INPUT
*/
public function testMismatchedBrackets()
{
$matrix = new Matrix("34'4;5");
}
/**
* @expectedException \Exception
* @expectedExceptionCode \jlawrence\eos\Matrix::E_NOT_EQUAL
*/
public function testWrongAddition()
{
$matrixA = new Matrix("[1,2;3,4]");
$matrixB = new Matrix("[1,2,3;4,5,6;7,8,9]");
$matrixC = $matrixA->addMatrix($matrixB);
}
/**
* @expectedException \Exception
* @expectedExceptionCode \jlawrence\eos\Matrix::E_NOT_EQUAL
*/
public function testWrongSubtraction()
{
$matrixA = new Matrix("[1,2;3,4]");
$matrixB = new Matrix("[1,2,3;4,5,6;7,8,9]");
$matrixC = $matrixA->subMatrix($matrixB);
}
/**
* @expectedException \Exception
* @expectedExceptionCode \jlawrence\eos\Matrix::E_NOT_SQUARE
*/
public function testNoSquareDeterminate()
{
$matrix = new Matrix("[1,2;3,4;5,6]");
$matrixC = $matrix->getDeterminant();
}
public function testOneByOneDeterminate()
{
$matrix = new Matrix("[1]");
$this->assertEquals(1,$matrix->getDeterminant());
}
/**
* @expectedException \Exception
* @expectedExceptionCode \jlawrence\eos\Matrix::E_NOT_EQUAL
*/
public function testWrongMatrixMultiplication()
{
$matrixA = new Matrix("[1,2;3,4]");
$matrixB = new Matrix("[1,2,3;4,5,6;7,8,9]");
$matrixC = $matrixA->mpMatrix($matrixB);
}
}
|