package com.jwetherell.algorithms.data_structures.test;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.junit.Assert.assertArrayEquals;
import org.junit.Test;
import com.jwetherell.algorithms.data_structures.Matrix;
public class MatrixTests {
@Test
public void testMatrix() {
Matrix<Integer> matrix1 = new Matrix<Integer>(4, 3);
matrix1.set(0, 0, 14);
matrix1.set(0, 1, 9);
matrix1.set(0, 2, 3);
matrix1.set(1, 0, 2);
matrix1.set(1, 1, 11);
matrix1.set(1, 2, 15);
matrix1.set(2, 0, 0);
matrix1.set(2, 1, 12);
matrix1.set(2, 2, 17);
matrix1.set(3, 0, 5);
matrix1.set(3, 1, 2);
matrix1.set(3, 2, 3);
Matrix<Integer> matrix2 = new Matrix<Integer>(3, 2);
matrix2.set(0, 0, 12);
matrix2.set(0, 1, 25);
matrix2.set(1, 0, 9);
matrix2.set(1, 1, 10);
matrix2.set(2, 0, 8);
matrix2.set(2, 1, 5);
// Result of multiplication
Integer[][] array1 = new Integer[][]{{273,455},
{243,235},
{244,205},
{102,160}};
Matrix<Integer> result1 = new Matrix<Integer>(4,2,array1);
Matrix<Integer> matrix3 = matrix1.multiply(matrix2);
assertTrue("Matrix multiplication error. matrix3="+matrix3+" result1"+result1, matrix3.equals(result1));
int rows = 2;
int cols = 2;
int counter = 0;
Matrix<Integer> matrix4 = new Matrix<Integer>(rows, cols);
for (int r = 0; r < rows; r++)
for (int c = 0; c < cols; c++)
matrix4.set(r, c, counter++);
// Result of subtraction
Integer[][] array2 = new Integer[][]{{0,0},
{0,0}};
Matrix<Integer> result2 = new Matrix<Integer>(2,2,array2);
Matrix<Integer> matrix5 = matrix4.subtract(matrix4);
assertTrue("Matrix subtraction error. matrix5="+matrix5+" result2"+result2, matrix5.equals(result2));
// Result of addition
Integer[][] array3 = new Integer[][]{{0,2},
{4,6}};
Matrix<Integer> result3 = new Matrix<Integer>(2,2,array3);
Matrix<Integer> matrix6 = matrix4.add(matrix4);
assertTrue("Matrix addition error. matrix6="+matrix6+" result3"+result3, matrix6.equals(result3));
Matrix<Integer> matrix7 = new Matrix<Integer>(2, 2);
matrix7.set(0, 0, 1);
matrix7.set(0, 1, 2);
matrix7.set(1, 0, 3);
matrix7.set(1, 1, 4);
Matrix<Integer> matrix8 = new Matrix<Integer>(2, 2);
matrix8.set(0, 0, 1);
matrix8.set(0, 1, 2);
matrix8.set(1, 0, 3);
matrix8.set(1, 1, 4);
// Result of multiplication
Integer[][] array4 = new Integer[][]{{7,10},
{15,22}};
Matrix<Integer> result4 = new Matrix<Integer>(2,2,array4);
Matrix<Integer> matrix9 = matrix7.multiply(matrix8);
assertTrue("Matrix multiplication error. matrix9="+matrix9+" result4"+result4, matrix9.equals(result4));
}
@Test
public void testIdentityMethod1() {
Matrix<Integer> matrix = new Matrix<Integer>(2, 2);
matrix.set(0, 0, 0);
matrix.set(0, 1, 0);
matrix.set(1, 0, 0);
matrix.set(1, 1, 0);
Matrix<Integer> expectedResult = new Matrix<Integer>(2, 2);
expectedResult.set(0, 0, 1);
expectedResult.set(0, 1, 0);
expectedResult.set(1, 0, 0);
expectedResult.set(1, 1, 1);
try{
matrix = matrix.identity();
} catch(Exception ex){
fail();
}
assertArrayEquals(expectedResult.getRow(0), matrix.getRow(0));
assertArrayEquals(expectedResult.getRow(1), matrix.getRow(1));
}
}