Files
Matrix/src/test/java/com/mattrixwv/matrix/TestBigIntegerMatrix.java
2022-07-09 02:00:12 -04:00

1862 lines
113 KiB
Java

//Matrix/src/test/java/com/mattrixwv/matrix/TestBigBigIntegerMatrix.java
//Mattrixwv
// Created: 02-10-22
//Modified: 07-09-22
package com.mattrixwv.matrix;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.math.BigInteger;
import java.util.Arrays;
import org.junit.jupiter.api.Test;
import com.mattrixwv.matrix.exceptions.InvalidCoordinatesException;
import com.mattrixwv.matrix.exceptions.InvalidGeometryException;
import com.mattrixwv.matrix.exceptions.InvalidRowSizeException;
import com.mattrixwv.matrix.exceptions.InvalidScalarException;
import com.mattrixwv.matrix.exceptions.NullMatrixException;
public class TestBigIntegerMatrix{
//Grid 1x1
private static final BigInteger[][] grid1 = {
{BigInteger.ONE}
};
private static final BigInteger[][] transformGrid1_1 = {
{BigInteger.ONE}
};
private static final BigInteger[][] transformGrid1_2 = {
{BigInteger.TWO}
};
//Grid 2x2
private static final BigInteger[][] grid2 = {
{BigInteger.ONE, BigInteger.TWO},
{BigInteger.ONE, BigInteger.TWO}
};
private static final BigInteger[][] transformGrid2_1 = {
{BigInteger.ONE, BigInteger.ZERO},
{BigInteger.ONE, BigInteger.ZERO}
};
private static final BigInteger[][] transformGrid2_2 = {
{BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.TWO, BigInteger.valueOf(3)}
};
//Grid 3x3
private static final BigInteger[][] grid3 = {
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)}
};
private static final BigInteger[][] transformGrid3_1 = {
{BigInteger.TWO, BigInteger.ONE, BigInteger.ZERO},
{BigInteger.TWO, BigInteger.ONE, BigInteger.ZERO},
{BigInteger.TWO, BigInteger.ONE, BigInteger.ZERO}
};
private static final BigInteger[][] transformGrid3_2 = {
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)}
};
//Grid 4x4
private static final BigInteger[][] grid4 = {
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)}
};
private static final BigInteger[][] transformGrid4_1 = {
{BigInteger.valueOf(3), BigInteger.TWO, BigInteger.ONE, BigInteger.ZERO},
{BigInteger.valueOf(3), BigInteger.TWO, BigInteger.ONE, BigInteger.ZERO},
{BigInteger.valueOf(3), BigInteger.TWO, BigInteger.ONE, BigInteger.ZERO},
{BigInteger.valueOf(3), BigInteger.TWO, BigInteger.ONE, BigInteger.ZERO}
};
private static final BigInteger[][] transformGrid4_2 = {
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5)}
};
//Grid 10x10
private static final BigInteger[][] grid10 = {
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)}
};
private static final BigInteger[][] transformGrid10_1 = {
{BigInteger.valueOf(9), BigInteger.valueOf(8), BigInteger.valueOf(7), BigInteger.valueOf(6), BigInteger.valueOf(5), BigInteger.valueOf(4), BigInteger.valueOf(3), BigInteger.TWO, BigInteger.ONE, BigInteger.ZERO},
{BigInteger.valueOf(9), BigInteger.valueOf(8), BigInteger.valueOf(7), BigInteger.valueOf(6), BigInteger.valueOf(5), BigInteger.valueOf(4), BigInteger.valueOf(3), BigInteger.TWO, BigInteger.ONE, BigInteger.ZERO},
{BigInteger.valueOf(9), BigInteger.valueOf(8), BigInteger.valueOf(7), BigInteger.valueOf(6), BigInteger.valueOf(5), BigInteger.valueOf(4), BigInteger.valueOf(3), BigInteger.TWO, BigInteger.ONE, BigInteger.ZERO},
{BigInteger.valueOf(9), BigInteger.valueOf(8), BigInteger.valueOf(7), BigInteger.valueOf(6), BigInteger.valueOf(5), BigInteger.valueOf(4), BigInteger.valueOf(3), BigInteger.TWO, BigInteger.ONE, BigInteger.ZERO},
{BigInteger.valueOf(9), BigInteger.valueOf(8), BigInteger.valueOf(7), BigInteger.valueOf(6), BigInteger.valueOf(5), BigInteger.valueOf(4), BigInteger.valueOf(3), BigInteger.TWO, BigInteger.ONE, BigInteger.ZERO},
{BigInteger.valueOf(9), BigInteger.valueOf(8), BigInteger.valueOf(7), BigInteger.valueOf(6), BigInteger.valueOf(5), BigInteger.valueOf(4), BigInteger.valueOf(3), BigInteger.TWO, BigInteger.ONE, BigInteger.ZERO},
{BigInteger.valueOf(9), BigInteger.valueOf(8), BigInteger.valueOf(7), BigInteger.valueOf(6), BigInteger.valueOf(5), BigInteger.valueOf(4), BigInteger.valueOf(3), BigInteger.TWO, BigInteger.ONE, BigInteger.ZERO},
{BigInteger.valueOf(9), BigInteger.valueOf(8), BigInteger.valueOf(7), BigInteger.valueOf(6), BigInteger.valueOf(5), BigInteger.valueOf(4), BigInteger.valueOf(3), BigInteger.TWO, BigInteger.ONE, BigInteger.ZERO},
{BigInteger.valueOf(9), BigInteger.valueOf(8), BigInteger.valueOf(7), BigInteger.valueOf(6), BigInteger.valueOf(5), BigInteger.valueOf(4), BigInteger.valueOf(3), BigInteger.TWO, BigInteger.ONE, BigInteger.ZERO},
{BigInteger.valueOf(9), BigInteger.valueOf(8), BigInteger.valueOf(7), BigInteger.valueOf(6), BigInteger.valueOf(5), BigInteger.valueOf(4), BigInteger.valueOf(3), BigInteger.TWO, BigInteger.ONE, BigInteger.ZERO}
};
private static final BigInteger[][] transformGrid10_2 = {
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)}
};
@Test
public void testConstructor(){
//Default constructor
BigIntegerMatrix matrix = new BigIntegerMatrix();
assertEquals(0, matrix.getNumRows());
assertEquals(0, matrix.getNumCols());
//Filler constructor
//0 rows
assertThrows(InvalidGeometryException.class, () -> {
new BigIntegerMatrix(0, 0, BigInteger.ZERO);
});
//0 cols
assertThrows(InvalidGeometryException.class, () -> {
new BigIntegerMatrix(1, 0, BigInteger.ZERO);
});
//Good values
matrix = new BigIntegerMatrix(2, 2, BigInteger.ZERO);
assertEquals(2, matrix.getNumRows());
assertEquals(2, matrix.getNumCols());
assertEquals(BigInteger.ZERO, matrix.get(0, 0));
assertEquals(BigInteger.ZERO, matrix.get(0, 1));
assertEquals(BigInteger.ZERO, matrix.get(1, 0));
assertEquals(BigInteger.ZERO, matrix.get(1, 1));
//Matrix constructor
matrix.set(0, 0, BigInteger.ONE);
matrix.set(0, 1, BigInteger.TWO);
matrix.set(1, 0, BigInteger.ONE);
matrix.set(1, 1, BigInteger.TWO);
BigIntegerMatrix matrix2 = new BigIntegerMatrix(matrix);
assertEquals(2, matrix2.getNumRows());
assertEquals(2, matrix2.getNumCols());
assertEquals(BigInteger.ONE, matrix2.get(0, 0));
assertEquals(BigInteger.TWO, matrix2.get(0, 1));
assertEquals(BigInteger.ONE, matrix2.get(1, 0));
assertEquals(BigInteger.TWO, matrix2.get(1, 1));
//Array constructor
//0 length
BigInteger[][] grid = new BigInteger[0][0];
matrix = new BigIntegerMatrix(grid);
assertEquals(0, matrix.getNumRows());
assertEquals(0, matrix.getNumCols());
//0 cols
grid = new BigInteger[1][0];
matrix = new BigIntegerMatrix(grid);
assertEquals(1, matrix.getNumRows());
assertEquals(0, matrix.getNumCols());
//Uneven rows
assertThrows(InvalidRowSizeException.class, () -> {
BigInteger[][] grid1 = new BigInteger[2][];
grid1[0] = new BigInteger[1];
grid1[0][0] = BigInteger.ZERO;
grid1[1] = new BigInteger[2];
grid1[1][0] = BigInteger.ONE;
grid1[1][1] = BigInteger.TWO;
new BigIntegerMatrix(grid1);
});
//2x2
grid = grid2;
matrix = new BigIntegerMatrix(grid);
assertEquals(2, matrix.getNumRows());
assertEquals(2, matrix.getNumCols());
assertEquals(BigInteger.ONE, matrix.get(0, 0));
assertEquals(BigInteger.TWO, matrix.get(0, 1));
assertEquals(BigInteger.ONE, matrix.get(1, 0));
assertEquals(BigInteger.TWO, matrix.get(1, 1));
}
@Test
public void testEquals(){
//Invalid equals
BigIntegerMatrix matrix = new BigIntegerMatrix(grid1);
assertNotEquals(null, matrix);
assertNotEquals(new int[0], matrix);
//1x1
boolean gridEquals = matrix.equals(matrix);
assertTrue(gridEquals);
@SuppressWarnings("unlikely-arg-type")
boolean gridEquals1 = matrix.equals(grid1);
assertTrue(gridEquals1);
//2x2
matrix = new BigIntegerMatrix(grid2);
boolean gridEquals2 = matrix.equals(matrix);
assertTrue(gridEquals2);
@SuppressWarnings("unlikely-arg-type")
boolean gridEquals21 = matrix.equals(grid2);
assertTrue(gridEquals21);
//false
@SuppressWarnings("unlikely-arg-type")
boolean gridEquals22 = matrix.equals(transformGrid2_1);
assertFalse(gridEquals22);
gridEquals2 = matrix.equals(new BigIntegerMatrix(grid3));
assertFalse(gridEquals2);
gridEquals2 = matrix.equals(new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO},
{BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO}
}));
assertFalse(gridEquals2);
//3x3
matrix = new BigIntegerMatrix(grid3);
boolean gridEquals3 = matrix.equals(matrix);
assertTrue(gridEquals3);
@SuppressWarnings("unlikely-arg-type")
boolean gridEquals31 = matrix.equals(grid3);
assertTrue(gridEquals31);
//4x4
matrix = new BigIntegerMatrix(grid4);
boolean gridEquals4 = matrix.equals(matrix);
assertTrue(gridEquals4);
@SuppressWarnings("unlikely-arg-type")
boolean gridEquals41 = matrix.equals(grid4);
assertTrue(gridEquals41);
//10x10
matrix = new BigIntegerMatrix(grid10);
boolean gridEquals10 = matrix.equals(matrix);
assertTrue(gridEquals10);
@SuppressWarnings("unlikely-arg-type")
boolean gridEquals101 = matrix.equals(grid10);
assertTrue(gridEquals101);
}
@Test
public void testGet(){
//1x1
BigIntegerMatrix matrix = new BigIntegerMatrix(grid1);
assertEquals(BigInteger.ONE, matrix.get(0, 0));
//Invalid gets
final BigIntegerMatrix testMatrix = new BigIntegerMatrix(matrix);
assertThrows(InvalidCoordinatesException.class, () -> {
testMatrix.get(3, 3);
});
assertThrows(InvalidCoordinatesException.class, () -> {
testMatrix.get(-1, -1);
});
assertThrows(InvalidCoordinatesException.class, () -> {
testMatrix.get(0, 3);
});
assertThrows(InvalidCoordinatesException.class, () -> {
testMatrix.get(0, -1);
});
//2x2
matrix = new BigIntegerMatrix(grid2);
assertEquals(BigInteger.ONE, matrix.get(0, 0));
//3x3
matrix = new BigIntegerMatrix(grid3);
assertEquals(BigInteger.ONE, matrix.get(0, 0));
//4x4
matrix = new BigIntegerMatrix(grid4);
assertEquals(BigInteger.ONE, matrix.get(0, 0));
//10x10
matrix = new BigIntegerMatrix(grid10);
assertEquals(BigInteger.ONE, matrix.get(0, 0));
}
@Test
public void testGetRow(){
//1x1
BigIntegerMatrix matrix = new BigIntegerMatrix(grid1);
BigIntegerMatrix correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE}});
assertEquals(correctMatrix, matrix.getRow(0));
//Invalid gets
final BigIntegerMatrix testMatrix = new BigIntegerMatrix(matrix);
assertThrows(InvalidCoordinatesException.class, () -> {
testMatrix.getRow(-1);
});
assertThrows(InvalidCoordinatesException.class, () -> {
testMatrix.getRow(3);
});
//2x2
matrix = new BigIntegerMatrix(grid2);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE, BigInteger.TWO}});
assertEquals(correctMatrix, matrix.getRow(0));
//3x3
matrix = new BigIntegerMatrix(grid3);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)}});
assertEquals(correctMatrix, matrix.getRow(0));
//4x4
matrix = new BigIntegerMatrix(grid4);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)}});
assertEquals(correctMatrix, matrix.getRow(0));
//10x10
matrix = new BigIntegerMatrix(grid10);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)}});
assertEquals(correctMatrix, matrix.getRow(0));
//getNumRows
assertEquals(10, matrix.getNumRows());
}
@Test
public void testGetCol(){
//1x1
BigIntegerMatrix matrix = new BigIntegerMatrix(grid1);
BigIntegerMatrix correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE}});
assertEquals(correctMatrix, matrix.getCol(0));
//Invalid gets
final BigIntegerMatrix testMatrix = new BigIntegerMatrix();
assertThrows(InvalidCoordinatesException.class, () -> {
testMatrix.getCol(-1);
});
assertThrows(InvalidCoordinatesException.class, () -> {
testMatrix.getCol(3);
});
final BigIntegerMatrix testMatrix2 = new BigIntegerMatrix(grid1);
assertThrows(InvalidCoordinatesException.class, () -> {
testMatrix2.getCol(3);
});
//2x2
matrix = new BigIntegerMatrix(grid2);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE},
{BigInteger.ONE}
});
assertEquals(correctMatrix, matrix.getCol(0));
//3x3
matrix = new BigIntegerMatrix(grid3);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE},
{BigInteger.ONE},
{BigInteger.ONE}
});
assertEquals(correctMatrix, matrix.getCol(0));
//4x4
matrix = new BigIntegerMatrix(grid4);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE},
{BigInteger.ONE},
{BigInteger.ONE},
{BigInteger.ONE}
});
assertEquals(correctMatrix, matrix.getCol(0));
//10x10
matrix = new BigIntegerMatrix(grid10);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE},
{BigInteger.ONE},
{BigInteger.ONE},
{BigInteger.ONE},
{BigInteger.ONE},
{BigInteger.ONE},
{BigInteger.ONE},
{BigInteger.ONE},
{BigInteger.ONE},
{BigInteger.ONE}
});
assertEquals(correctMatrix, matrix.getCol(0));
//getNumCols
assertEquals(0, testMatrix.getNumCols());
assertEquals(10, matrix.getNumCols());
}
@Test
public void testSet(){
//1x1
BigIntegerMatrix matrix = new BigIntegerMatrix(grid1);
matrix.set(0, 0, BigInteger.TWO);
BigIntegerMatrix correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.TWO}});
assertEquals(correctMatrix, matrix);
//Invalid sets
final BigIntegerMatrix testMatrix = new BigIntegerMatrix(grid1);
assertThrows(InvalidCoordinatesException.class, () -> {
testMatrix.set(-1, -1, null);
});
assertThrows(InvalidCoordinatesException.class, () -> {
testMatrix.set(2, 2, null);
});
assertThrows(InvalidCoordinatesException.class, () -> {
testMatrix.set(0, -1, null);
});
assertThrows(InvalidCoordinatesException.class, () -> {
testMatrix.set(0, 2, null);
});
//2x2
matrix = new BigIntegerMatrix(grid2);
matrix.set(0, 0, BigInteger.valueOf(3));
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(3), BigInteger.TWO},
{BigInteger.ONE, BigInteger.TWO}
});
assertEquals(correctMatrix, matrix);
//3x3
matrix = new BigIntegerMatrix(grid3);
matrix.set(0, 0, BigInteger.valueOf(3));
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(3), BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)},
});
assertEquals(correctMatrix, matrix);
//4x4
matrix = new BigIntegerMatrix(grid4);
matrix.set(0, 0, BigInteger.valueOf(3));
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(3), BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)}
});
assertEquals(correctMatrix, matrix);
//10x10
matrix = new BigIntegerMatrix(grid10);
matrix.set(0, 0, BigInteger.valueOf(3));
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(3), BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)}
});
assertEquals(correctMatrix, matrix);
}
@Test
public void testSetRow(){
//1x1
BigIntegerMatrix matrix = new BigIntegerMatrix(grid1);
matrix.setRow(0, new BigInteger[]{BigInteger.ZERO});
BigIntegerMatrix correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ZERO}});
assertEquals(correctMatrix, matrix);
//Invalid setRows
final BigIntegerMatrix testMatrix = new BigIntegerMatrix(grid1);
final BigInteger[] testGrid = {BigInteger.ZERO, BigInteger.ZERO};
final BigIntegerMatrix testMatrix2 = new BigIntegerMatrix(grid2);
assertThrows(InvalidCoordinatesException.class, () -> {
testMatrix.setRow(-1, testGrid);
});
assertThrows(InvalidCoordinatesException.class, () -> {
testMatrix.setRow(2, testGrid);
});
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.setRow(0, testGrid);
});
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.setRow(0, (BigInteger[])null);
});
assertThrows(NullMatrixException.class, () -> {
testMatrix.setRow(0, (BigIntegerMatrix)null);
});
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.setRow(0, testMatrix2);
});
//2x2
matrix = new BigIntegerMatrix(grid2);
matrix.setRow(1, new BigInteger[]{BigInteger.TWO, BigInteger.ONE});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO},
{BigInteger.TWO, BigInteger.ONE}
});
assertEquals(correctMatrix, matrix);
//Matrix
BigIntegerMatrix matrix2 = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ZERO, BigInteger.ZERO}});
matrix.setRow(1, matrix2);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO },
{BigInteger.ZERO, BigInteger.ZERO}
});
assertEquals(correctMatrix, matrix);
//3x3
matrix = new BigIntegerMatrix(grid3);
matrix.setRow(0, new BigInteger[]{BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)}
});
assertEquals(correctMatrix, matrix);
//4x4
matrix = new BigIntegerMatrix(grid4);
matrix.setRow(0, new BigInteger[]{BigInteger.valueOf(4), BigInteger.valueOf(3), BigInteger.TWO, BigInteger.ONE});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(4), BigInteger.valueOf(3), BigInteger.TWO, BigInteger.ONE},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)}
});
assertEquals(correctMatrix, matrix);
//10x10
matrix = new BigIntegerMatrix(grid10);
matrix.setRow(0, new BigInteger[]{BigInteger.valueOf(10), BigInteger.valueOf(9), BigInteger.valueOf(8), BigInteger.valueOf(7), BigInteger.valueOf(6), BigInteger.valueOf(5), BigInteger.valueOf(4), BigInteger.valueOf(3), BigInteger.TWO, BigInteger.ONE});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(10), BigInteger.valueOf(9), BigInteger.valueOf(8), BigInteger.valueOf(7), BigInteger.valueOf(6), BigInteger.valueOf(5), BigInteger.valueOf(4), BigInteger.valueOf(3), BigInteger.TWO, BigInteger.ONE},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)}
});
assertEquals(correctMatrix, matrix);
}
@Test
public void testSetCol(){
//1x1
BigIntegerMatrix matrix = new BigIntegerMatrix(grid1);
matrix.setCol(0, new BigInteger[]{BigInteger.ONE});
BigIntegerMatrix correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE}});
assertEquals(correctMatrix, matrix);
//Invalid setCols
final BigIntegerMatrix testMatrix = new BigIntegerMatrix(grid1);
final BigIntegerMatrix testMatrix2 = new BigIntegerMatrix();
final BigInteger[] testGrid = {BigInteger.ZERO, BigInteger.ZERO};
assertThrows(InvalidCoordinatesException.class, () -> {
testMatrix.setCol(-1, testGrid);
});
assertThrows(InvalidCoordinatesException.class, () -> {
testMatrix.setCol(2, testGrid);
});
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.setCol(0, (BigInteger[])null);
});
assertThrows(InvalidCoordinatesException.class, () -> {
testMatrix.setCol(0, testGrid);
});
assertThrows(NullMatrixException.class, () -> {
testMatrix.setCol(0, (BigIntegerMatrix)null);
});
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.setCol(0, testMatrix2);
});
//2x2
matrix = new BigIntegerMatrix(grid2);
matrix.setCol(0, new BigInteger[]{BigInteger.valueOf(3), BigInteger.valueOf(3)});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(3), BigInteger.TWO},
{BigInteger.valueOf(3), BigInteger.TWO}
});
assertEquals(correctMatrix, matrix);
//Matrix
BigIntegerMatrix vector = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ZERO}, {BigInteger.ZERO}});
matrix.setCol(1, vector);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(3), BigInteger.ZERO},
{BigInteger.valueOf(3), BigInteger.ZERO}
});
assertEquals(correctMatrix, matrix);
//3x3
matrix = new BigIntegerMatrix(grid3);
matrix.setCol(0, new BigInteger[]{BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ZERO, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ZERO, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ZERO, BigInteger.TWO, BigInteger.valueOf(3)}
});
assertEquals(correctMatrix, matrix);
//4x4
matrix = new BigIntegerMatrix(grid4);
matrix.setCol(0, new BigInteger[]{BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ZERO, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ZERO, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ZERO, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ZERO, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)}
});
assertEquals(correctMatrix, matrix);
//10x10
matrix = new BigIntegerMatrix(grid10);
matrix.setCol(0, new BigInteger[]{BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ZERO, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ZERO, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ZERO, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ZERO, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ZERO, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ZERO, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ZERO, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ZERO, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ZERO, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ZERO, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)}
});
assertEquals(correctMatrix, matrix);
}
@Test
public void testAddRow(){
//0x0
BigIntegerMatrix matrix = new BigIntegerMatrix();
matrix.addRow(new BigInteger[]{BigInteger.ZERO});
BigIntegerMatrix correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ZERO}});
assertEquals(correctMatrix, matrix);
//1x1
matrix = new BigIntegerMatrix(grid1);
matrix.addRow(new BigInteger[]{BigInteger.ONE});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE}, {BigInteger.ONE}});
assertEquals(correctMatrix, matrix);
//Invalid adds
final BigIntegerMatrix testMatrix = new BigIntegerMatrix(grid1);
final BigIntegerMatrix testMatrix2 = new BigIntegerMatrix(grid2);
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.addRow(new BigInteger[]{BigInteger.ZERO, BigInteger.ZERO});
});
assertThrows(NullMatrixException.class, () -> {
testMatrix.addRow((BigInteger[])null);
});
assertThrows(NullMatrixException.class, () -> {
testMatrix.addRow((BigIntegerMatrix)null);
});
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.addRow(testMatrix2);
});
//2x2
matrix = new BigIntegerMatrix(grid2);
matrix.addRow(new BigInteger[]{BigInteger.ONE, BigInteger.TWO});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO},
{BigInteger.ONE, BigInteger.TWO},
{BigInteger.ONE, BigInteger.TWO}
});
assertEquals(correctMatrix, matrix);
//Matrix
matrix = new BigIntegerMatrix(grid2);
matrix.addRow(new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ZERO, BigInteger.ZERO}}));
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO},
{BigInteger.ONE, BigInteger.TWO},
{BigInteger.ZERO, BigInteger.ZERO}
});
assertEquals(correctMatrix, matrix);
//3x3
matrix = new BigIntegerMatrix(grid3);
matrix.addRow(new BigInteger[]{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)}
});
assertEquals(correctMatrix, matrix);
//4x4
matrix = new BigIntegerMatrix(grid4);
matrix.addRow(new BigInteger[]{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)}
});
assertEquals(correctMatrix, matrix);
//10x10
matrix = new BigIntegerMatrix(grid10);
matrix.addRow(new BigInteger[]{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)}
});
assertEquals(correctMatrix, matrix);
}
@Test
public void testAddCol(){
//0x0
BigIntegerMatrix matrix = new BigIntegerMatrix();
matrix.addCol(new BigInteger[]{BigInteger.ZERO});
BigIntegerMatrix correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ZERO}});
assertEquals(correctMatrix, matrix);
//1x1
matrix = new BigIntegerMatrix(grid1);
matrix.addCol(new BigInteger[]{BigInteger.ONE});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE, BigInteger.ONE}});
assertEquals(correctMatrix, matrix);
//Invalid adds
final BigIntegerMatrix testMatrix = new BigIntegerMatrix(grid1);
final BigIntegerMatrix testMatrix2 = new BigIntegerMatrix(grid2);
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.addCol(new BigInteger[]{BigInteger.ZERO, BigInteger.ZERO});
});
assertThrows(NullMatrixException.class, () -> {
testMatrix.addCol((BigInteger[])null);
});
assertThrows(NullMatrixException.class, () -> {
testMatrix.addCol((BigIntegerMatrix)null);
});
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.addCol(testMatrix2);
});
//2x2
matrix = new BigIntegerMatrix(grid2);
matrix.addCol(new BigInteger[]{BigInteger.valueOf(3), BigInteger.valueOf(3)});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)}
});
assertEquals(correctMatrix, matrix);
//Matrix
matrix = new BigIntegerMatrix(grid2);
matrix.addCol(new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ZERO}, {BigInteger.ZERO}}));
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.ZERO},
{BigInteger.ONE, BigInteger.TWO, BigInteger.ZERO}
});
assertEquals(correctMatrix, matrix);
//3x3
matrix = new BigIntegerMatrix(grid3);
matrix.addCol(new BigInteger[]{BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(4)});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)}
});
assertEquals(correctMatrix, matrix);
//4x4
matrix = new BigIntegerMatrix(grid4);
matrix.addCol(new BigInteger[]{BigInteger.valueOf(5), BigInteger.valueOf(5), BigInteger.valueOf(5), BigInteger.valueOf(5)});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5)}
});
assertEquals(correctMatrix, matrix);
//10x10
matrix = new BigIntegerMatrix(grid10);
matrix.addCol(new BigInteger[]{BigInteger.valueOf(11), BigInteger.valueOf(11), BigInteger.valueOf(11), BigInteger.valueOf(11), BigInteger.valueOf(11), BigInteger.valueOf(11), BigInteger.valueOf(11), BigInteger.valueOf(11), BigInteger.valueOf(11), BigInteger.valueOf(11)});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)}
});
assertEquals(correctMatrix, matrix);
}
@Test
public void testAppendRight(){
//1x1
BigIntegerMatrix matrix = new BigIntegerMatrix(grid1);
BigIntegerMatrix secondMatrix = new BigIntegerMatrix(grid1);
BigIntegerMatrix correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE, BigInteger.ONE}});
assertEquals(correctMatrix, matrix.appendRight(secondMatrix));
//Invalid appends
final BigIntegerMatrix testMatrix = new BigIntegerMatrix(grid1);
final BigIntegerMatrix testMatrix2 = new BigIntegerMatrix(grid2);
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.appendRight(testMatrix2);
});
assertThrows(NullMatrixException.class, () -> {
testMatrix.appendRight(null);
});
//2x2
matrix = new BigIntegerMatrix(grid2);
secondMatrix = new BigIntegerMatrix(grid2);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.ONE, BigInteger.TWO},
{BigInteger.ONE, BigInteger.TWO, BigInteger.ONE, BigInteger.TWO}
});
assertEquals(correctMatrix, matrix.appendRight(secondMatrix));
//3x3
matrix = new BigIntegerMatrix(grid3);
secondMatrix = new BigIntegerMatrix(grid3);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)}
});
assertEquals(correctMatrix, matrix.appendRight(secondMatrix));
//4x4
matrix = new BigIntegerMatrix(grid4);
secondMatrix = new BigIntegerMatrix(grid4);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)}
});
assertEquals(correctMatrix, matrix.appendRight(secondMatrix));
//10x10
matrix = new BigIntegerMatrix(grid10);
secondMatrix = new BigIntegerMatrix(grid10);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)}
});
assertEquals(correctMatrix, matrix.appendRight(secondMatrix));
}
@Test
public void testAppendBottom(){
//1x1
BigIntegerMatrix matrix = new BigIntegerMatrix(grid1);
BigIntegerMatrix secondMatrix = new BigIntegerMatrix(grid1);
BigIntegerMatrix correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE},
{BigInteger.ONE}
});
assertEquals(correctMatrix, matrix.appendBottom(secondMatrix));
//Invalid appends
final BigIntegerMatrix testMatrix = new BigIntegerMatrix(grid1);
final BigIntegerMatrix testMatrix2 = new BigIntegerMatrix(grid2);
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.appendBottom(testMatrix2);
});
assertThrows(NullMatrixException.class, () -> {
testMatrix.appendBottom(null);
});
//2x2
matrix = new BigIntegerMatrix(grid2);
secondMatrix = new BigIntegerMatrix(grid2);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO},
{BigInteger.ONE, BigInteger.TWO},
{BigInteger.ONE, BigInteger.TWO},
{BigInteger.ONE, BigInteger.TWO}
});
assertEquals(correctMatrix, matrix.appendBottom(secondMatrix));
//3x3
matrix = new BigIntegerMatrix(grid3);
secondMatrix = new BigIntegerMatrix(grid3);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)}
});
assertEquals(correctMatrix, matrix.appendBottom(secondMatrix));
//4x4
matrix = new BigIntegerMatrix(grid4);
secondMatrix = new BigIntegerMatrix(grid4);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)}
});
assertEquals(correctMatrix, matrix.appendBottom(secondMatrix));
//10x10
matrix = new BigIntegerMatrix(grid10);
secondMatrix = new BigIntegerMatrix(grid10);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)}, {BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)}, {BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)}, {BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)}, {BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)}, {BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)}, {BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)}, {BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)}, {BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)}, {BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)}, {BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
});
assertEquals(correctMatrix, matrix.appendBottom(secondMatrix));
}
@Test
public void testIsSquare(){
BigIntegerMatrix matrix = new BigIntegerMatrix();
assertFalse(matrix.isSquare());
matrix = new BigIntegerMatrix(2, 2, BigInteger.ZERO);
assertTrue(matrix.isSquare());
matrix = new BigIntegerMatrix(2, 3, BigInteger.ZERO);
assertFalse(matrix.isSquare());
}
@Test
public void testAddition(){
//1x1
BigIntegerMatrix matrix = new BigIntegerMatrix(grid1);
BigIntegerMatrix transformMatrix = new BigIntegerMatrix(transformGrid1_1);
BigIntegerMatrix correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.TWO}});
assertEquals(correctMatrix, matrix.add(transformMatrix));
assertEquals(correctMatrix, matrix.add(BigInteger.ONE));
//Invalid adds
final BigIntegerMatrix testMatrix = new BigIntegerMatrix(grid1);
final BigIntegerMatrix testMatrix2 = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ZERO}, {BigInteger.ZERO}});
final BigIntegerMatrix testMatrix3 = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ZERO, BigInteger.ZERO}});
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.add(testMatrix2);
});
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.add(testMatrix3);
});
//2x2
matrix = new BigIntegerMatrix(grid2);
transformMatrix = new BigIntegerMatrix(transformGrid2_1);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.TWO, BigInteger.TWO},
{BigInteger.TWO, BigInteger.TWO}
});
assertEquals(correctMatrix, matrix.add(transformMatrix));
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.TWO, BigInteger.valueOf(3)}
});
assertEquals(correctMatrix, matrix.add(BigInteger.ONE));
//3x3
matrix = new BigIntegerMatrix(grid3);
transformMatrix = new BigIntegerMatrix(transformGrid3_1);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(3), BigInteger.valueOf(3), BigInteger.valueOf(3)},
{BigInteger.valueOf(3), BigInteger.valueOf(3), BigInteger.valueOf(3)},
{BigInteger.valueOf(3), BigInteger.valueOf(3), BigInteger.valueOf(3)}
});
assertEquals(correctMatrix, matrix.add(transformMatrix));
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)}
});
assertEquals(correctMatrix, matrix.add(BigInteger.ONE));
//4x4
matrix = new BigIntegerMatrix(grid4);
transformMatrix = new BigIntegerMatrix(transformGrid4_1);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(4)},
{BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(4)},
{BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(4)},
{BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(4)}
});
assertEquals(correctMatrix, matrix.add(transformMatrix));
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5)}
});
assertEquals(correctMatrix, matrix.add(BigInteger.ONE));
//10x10
matrix = new BigIntegerMatrix(grid10);
transformMatrix = new BigIntegerMatrix(transformGrid10_1);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10)},
{BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10)},
{BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10)},
{BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10)},
{BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10)},
{BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10)},
{BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10)},
{BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10)},
{BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10)},
{BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10)}
});
assertEquals(correctMatrix, matrix.add(transformMatrix));
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.valueOf(11)}
});
assertEquals(correctMatrix, matrix.add(BigInteger.ONE));
}
@Test
public void testSubtraction(){
//1x1
BigIntegerMatrix matrix = new BigIntegerMatrix(grid1);
BigIntegerMatrix transformMatrix = new BigIntegerMatrix(grid1);
BigIntegerMatrix correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ZERO}
});
assertEquals(correctMatrix, matrix.subtract(transformMatrix));
assertEquals(correctMatrix, matrix.subtract(BigInteger.ONE));
//Invalid subtracts
final BigIntegerMatrix testMatrix = new BigIntegerMatrix(grid1);
final BigIntegerMatrix testMatrix2 = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ZERO}, {BigInteger.ZERO}});
final BigIntegerMatrix testMatrix3 = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ZERO, BigInteger.ZERO}});
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.subtract(testMatrix2);
});
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.subtract(testMatrix3);
});
//2x2
matrix = new BigIntegerMatrix(grid2);
transformMatrix = new BigIntegerMatrix(grid2);
correctMatrix = new BigIntegerMatrix(2, 2, BigInteger.ZERO);
assertEquals(correctMatrix, matrix.subtract(transformMatrix));
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ZERO, BigInteger.ONE},
{BigInteger.ZERO, BigInteger.ONE}
});
assertEquals(correctMatrix, matrix.subtract(BigInteger.ONE));
//3x3
matrix = new BigIntegerMatrix(grid3);
transformMatrix = new BigIntegerMatrix(grid3);
correctMatrix = new BigIntegerMatrix(3, 3, BigInteger.ZERO);
assertEquals(correctMatrix, matrix.subtract(transformMatrix));
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO},
{BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO},
{BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO}
});
assertEquals(correctMatrix, matrix.subtract(BigInteger.ONE));
//4x4
matrix = new BigIntegerMatrix(grid4);
transformMatrix = new BigIntegerMatrix(grid4);
correctMatrix = new BigIntegerMatrix(4, 4, BigInteger.ZERO);
assertEquals(correctMatrix, matrix.subtract(transformMatrix));
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)}
});
assertEquals(correctMatrix, matrix.subtract(BigInteger.ONE));
//10x10
matrix = new BigIntegerMatrix(grid10);
transformMatrix = new BigIntegerMatrix(grid10);
correctMatrix = new BigIntegerMatrix(10, 10, BigInteger.ZERO);
assertEquals(correctMatrix, matrix.subtract(transformMatrix));
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9)},
{BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9)},
{BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9)},
{BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9)},
{BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9)},
{BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9)},
{BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9)},
{BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9)},
{BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9)},
{BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9)}
});
assertEquals(correctMatrix, matrix.subtract(BigInteger.ONE));
}
@Test
public void testMultiplication(){
//1x1
BigIntegerMatrix matrix = new BigIntegerMatrix(grid1);
BigIntegerMatrix transformMatrix = new BigIntegerMatrix(transformGrid1_2);
BigIntegerMatrix correctMatrix = new BigIntegerMatrix(transformGrid1_2);
assertEquals(correctMatrix, matrix.multiply(transformMatrix));
assertEquals(correctMatrix, matrix.multiply(BigInteger.TWO));
//Invalid multiplication
final BigIntegerMatrix testMatrix = new BigIntegerMatrix(grid1);
final BigIntegerMatrix testMatrix2 = new BigIntegerMatrix(grid2);
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.multiply(testMatrix2);
});
//2x2
matrix = new BigIntegerMatrix(grid2);
transformMatrix = new BigIntegerMatrix(transformGrid2_2);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(6), BigInteger.valueOf(9)},
{BigInteger.valueOf(6), BigInteger.valueOf(9)}
});
assertEquals(correctMatrix, matrix.multiply(transformMatrix));
BigIntegerMatrix vector = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.TWO},
{BigInteger.valueOf(3)}
});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(8)},
{BigInteger.valueOf(8)}
});
assertEquals(correctMatrix, matrix.multiply(vector));
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.TWO, BigInteger.valueOf(4)},
{BigInteger.TWO, BigInteger.valueOf(4)}
});
assertEquals(correctMatrix, matrix.multiply(BigInteger.TWO));
//3x3
matrix = new BigIntegerMatrix(grid3);
transformMatrix = new BigIntegerMatrix(transformGrid3_2);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(12), BigInteger.valueOf(18), BigInteger.valueOf(24)},
{BigInteger.valueOf(12), BigInteger.valueOf(18), BigInteger.valueOf(24)},
{BigInteger.valueOf(12), BigInteger.valueOf(18), BigInteger.valueOf(24)}
});
assertEquals(correctMatrix, matrix.multiply(transformMatrix));
vector = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.TWO},
{BigInteger.valueOf(3)},
{BigInteger.valueOf(4)}
});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(20)},
{BigInteger.valueOf(20)},
{BigInteger.valueOf(20)}
});
assertEquals(correctMatrix, matrix.multiply(vector));
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.TWO, BigInteger.valueOf(4), BigInteger.valueOf(6)},
{BigInteger.TWO, BigInteger.valueOf(4), BigInteger.valueOf(6)},
{BigInteger.TWO, BigInteger.valueOf(4), BigInteger.valueOf(6)}
});
assertEquals(correctMatrix, matrix.multiply(BigInteger.TWO));
//4x4
matrix = new BigIntegerMatrix(grid4);
transformMatrix = new BigIntegerMatrix(transformGrid4_2);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(20), BigInteger.valueOf(30), BigInteger.valueOf(40), BigInteger.valueOf(50)},
{BigInteger.valueOf(20), BigInteger.valueOf(30), BigInteger.valueOf(40), BigInteger.valueOf(50)},
{BigInteger.valueOf(20), BigInteger.valueOf(30), BigInteger.valueOf(40), BigInteger.valueOf(50)},
{BigInteger.valueOf(20), BigInteger.valueOf(30), BigInteger.valueOf(40), BigInteger.valueOf(50)},
});
assertEquals(correctMatrix, matrix.multiply(transformMatrix));
vector = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.TWO},
{BigInteger.valueOf(3)},
{BigInteger.valueOf(4)},
{BigInteger.valueOf(5)}
});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(40)},
{BigInteger.valueOf(40)},
{BigInteger.valueOf(40)},
{BigInteger.valueOf(40)}
});
assertEquals(correctMatrix, matrix.multiply(vector));
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.TWO, BigInteger.valueOf(4), BigInteger.valueOf(6), BigInteger.valueOf(8)},
{BigInteger.TWO, BigInteger.valueOf(4), BigInteger.valueOf(6), BigInteger.valueOf(8)},
{BigInteger.TWO, BigInteger.valueOf(4), BigInteger.valueOf(6), BigInteger.valueOf(8)},
{BigInteger.TWO, BigInteger.valueOf(4), BigInteger.valueOf(6), BigInteger.valueOf(8)}
});
assertEquals(correctMatrix, matrix.multiply(BigInteger.TWO));
//10x10
matrix = new BigIntegerMatrix(grid10);
transformMatrix = new BigIntegerMatrix(transformGrid10_2);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(110), BigInteger.valueOf(165), BigInteger.valueOf(220), BigInteger.valueOf(275), BigInteger.valueOf(330), BigInteger.valueOf(385), BigInteger.valueOf(440), BigInteger.valueOf(495), BigInteger.valueOf(550), BigInteger.valueOf(605)},
{BigInteger.valueOf(110), BigInteger.valueOf(165), BigInteger.valueOf(220), BigInteger.valueOf(275), BigInteger.valueOf(330), BigInteger.valueOf(385), BigInteger.valueOf(440), BigInteger.valueOf(495), BigInteger.valueOf(550), BigInteger.valueOf(605)},
{BigInteger.valueOf(110), BigInteger.valueOf(165), BigInteger.valueOf(220), BigInteger.valueOf(275), BigInteger.valueOf(330), BigInteger.valueOf(385), BigInteger.valueOf(440), BigInteger.valueOf(495), BigInteger.valueOf(550), BigInteger.valueOf(605)},
{BigInteger.valueOf(110), BigInteger.valueOf(165), BigInteger.valueOf(220), BigInteger.valueOf(275), BigInteger.valueOf(330), BigInteger.valueOf(385), BigInteger.valueOf(440), BigInteger.valueOf(495), BigInteger.valueOf(550), BigInteger.valueOf(605)},
{BigInteger.valueOf(110), BigInteger.valueOf(165), BigInteger.valueOf(220), BigInteger.valueOf(275), BigInteger.valueOf(330), BigInteger.valueOf(385), BigInteger.valueOf(440), BigInteger.valueOf(495), BigInteger.valueOf(550), BigInteger.valueOf(605)},
{BigInteger.valueOf(110), BigInteger.valueOf(165), BigInteger.valueOf(220), BigInteger.valueOf(275), BigInteger.valueOf(330), BigInteger.valueOf(385), BigInteger.valueOf(440), BigInteger.valueOf(495), BigInteger.valueOf(550), BigInteger.valueOf(605)},
{BigInteger.valueOf(110), BigInteger.valueOf(165), BigInteger.valueOf(220), BigInteger.valueOf(275), BigInteger.valueOf(330), BigInteger.valueOf(385), BigInteger.valueOf(440), BigInteger.valueOf(495), BigInteger.valueOf(550), BigInteger.valueOf(605)},
{BigInteger.valueOf(110), BigInteger.valueOf(165), BigInteger.valueOf(220), BigInteger.valueOf(275), BigInteger.valueOf(330), BigInteger.valueOf(385), BigInteger.valueOf(440), BigInteger.valueOf(495), BigInteger.valueOf(550), BigInteger.valueOf(605)},
{BigInteger.valueOf(110), BigInteger.valueOf(165), BigInteger.valueOf(220), BigInteger.valueOf(275), BigInteger.valueOf(330), BigInteger.valueOf(385), BigInteger.valueOf(440), BigInteger.valueOf(495), BigInteger.valueOf(550), BigInteger.valueOf(605)},
{BigInteger.valueOf(110), BigInteger.valueOf(165), BigInteger.valueOf(220), BigInteger.valueOf(275), BigInteger.valueOf(330), BigInteger.valueOf(385), BigInteger.valueOf(440), BigInteger.valueOf(495), BigInteger.valueOf(550), BigInteger.valueOf(605)}
});
assertEquals(correctMatrix, matrix.multiply(transformMatrix));
vector = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.TWO},
{BigInteger.valueOf(3)},
{BigInteger.valueOf(4)},
{BigInteger.valueOf(5)},
{BigInteger.valueOf(6)},
{BigInteger.valueOf(7)},
{BigInteger.valueOf(8)},
{BigInteger.valueOf(9)},
{BigInteger.valueOf(10)},
{BigInteger.valueOf(11)}
});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(440)},
{BigInteger.valueOf(440)},
{BigInteger.valueOf(440)},
{BigInteger.valueOf(440)},
{BigInteger.valueOf(440)},
{BigInteger.valueOf(440)},
{BigInteger.valueOf(440)},
{BigInteger.valueOf(440)},
{BigInteger.valueOf(440)},
{BigInteger.valueOf(440)}
});
assertEquals(correctMatrix, matrix.multiply(vector));
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.TWO, BigInteger.valueOf(4), BigInteger.valueOf(6), BigInteger.valueOf(8), BigInteger.valueOf(10), BigInteger.valueOf(12), BigInteger.valueOf(14), BigInteger.valueOf(16), BigInteger.valueOf(18), BigInteger.valueOf(20)},
{BigInteger.TWO, BigInteger.valueOf(4), BigInteger.valueOf(6), BigInteger.valueOf(8), BigInteger.valueOf(10), BigInteger.valueOf(12), BigInteger.valueOf(14), BigInteger.valueOf(16), BigInteger.valueOf(18), BigInteger.valueOf(20)},
{BigInteger.TWO, BigInteger.valueOf(4), BigInteger.valueOf(6), BigInteger.valueOf(8), BigInteger.valueOf(10), BigInteger.valueOf(12), BigInteger.valueOf(14), BigInteger.valueOf(16), BigInteger.valueOf(18), BigInteger.valueOf(20)},
{BigInteger.TWO, BigInteger.valueOf(4), BigInteger.valueOf(6), BigInteger.valueOf(8), BigInteger.valueOf(10), BigInteger.valueOf(12), BigInteger.valueOf(14), BigInteger.valueOf(16), BigInteger.valueOf(18), BigInteger.valueOf(20)},
{BigInteger.TWO, BigInteger.valueOf(4), BigInteger.valueOf(6), BigInteger.valueOf(8), BigInteger.valueOf(10), BigInteger.valueOf(12), BigInteger.valueOf(14), BigInteger.valueOf(16), BigInteger.valueOf(18), BigInteger.valueOf(20)},
{BigInteger.TWO, BigInteger.valueOf(4), BigInteger.valueOf(6), BigInteger.valueOf(8), BigInteger.valueOf(10), BigInteger.valueOf(12), BigInteger.valueOf(14), BigInteger.valueOf(16), BigInteger.valueOf(18), BigInteger.valueOf(20)},
{BigInteger.TWO, BigInteger.valueOf(4), BigInteger.valueOf(6), BigInteger.valueOf(8), BigInteger.valueOf(10), BigInteger.valueOf(12), BigInteger.valueOf(14), BigInteger.valueOf(16), BigInteger.valueOf(18), BigInteger.valueOf(20)},
{BigInteger.TWO, BigInteger.valueOf(4), BigInteger.valueOf(6), BigInteger.valueOf(8), BigInteger.valueOf(10), BigInteger.valueOf(12), BigInteger.valueOf(14), BigInteger.valueOf(16), BigInteger.valueOf(18), BigInteger.valueOf(20)},
{BigInteger.TWO, BigInteger.valueOf(4), BigInteger.valueOf(6), BigInteger.valueOf(8), BigInteger.valueOf(10), BigInteger.valueOf(12), BigInteger.valueOf(14), BigInteger.valueOf(16), BigInteger.valueOf(18), BigInteger.valueOf(20)},
{BigInteger.TWO, BigInteger.valueOf(4), BigInteger.valueOf(6), BigInteger.valueOf(8), BigInteger.valueOf(10), BigInteger.valueOf(12), BigInteger.valueOf(14), BigInteger.valueOf(16), BigInteger.valueOf(18), BigInteger.valueOf(20)}
});
assertEquals(correctMatrix, matrix.multiply(BigInteger.TWO));
}
@Test
public void testDotProduct(){
//1x1
BigIntegerMatrix matrix = new BigIntegerMatrix(grid1);
BigIntegerMatrix transformMatrix = new BigIntegerMatrix(transformGrid1_2);
assertEquals(BigInteger.TWO, matrix.dotProduct(transformMatrix));
//Invalid products
BigIntegerMatrix testMatrix = new BigIntegerMatrix(grid1);
BigIntegerMatrix testMatrix2 = new BigIntegerMatrix(grid2);
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.dotProduct(testMatrix2);
});
//2x2
matrix = new BigIntegerMatrix(grid2);
transformMatrix = new BigIntegerMatrix(transformGrid2_2);
assertEquals(BigInteger.valueOf(30), matrix.dotProduct(transformMatrix));
//3x3
matrix = new BigIntegerMatrix(grid3);
transformMatrix = new BigIntegerMatrix(transformGrid3_2);
assertEquals(BigInteger.valueOf(162), matrix.dotProduct(transformMatrix));
//4x4
matrix = new BigIntegerMatrix(grid4);
transformMatrix = new BigIntegerMatrix(transformGrid4_2);
assertEquals(BigInteger.valueOf(560), matrix.dotProduct(transformMatrix));
//10x10
matrix = new BigIntegerMatrix(grid10);
transformMatrix = new BigIntegerMatrix(transformGrid10_2);
assertEquals(BigInteger.valueOf(35750), matrix.dotProduct(transformMatrix));
}
@Test
public void testHadamardProduct(){
//1x1
BigIntegerMatrix matrix = new BigIntegerMatrix(grid1);
BigIntegerMatrix transformMatrix = new BigIntegerMatrix(transformGrid1_2);
BigIntegerMatrix correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.TWO}});
assertEquals(correctMatrix, matrix.hadamardProduct(transformMatrix));
//Invalid hadamard products
BigIntegerMatrix testMatrix = new BigIntegerMatrix(grid1);
BigIntegerMatrix testMatrix2 = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ZERO}, {BigInteger.ZERO}});
BigIntegerMatrix testMatrix3 = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ZERO, BigInteger.ZERO}});
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.hadamardProduct(testMatrix2);
});
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.hadamardProduct(testMatrix3);
});
//2x2
matrix = new BigIntegerMatrix(grid2);
transformMatrix = new BigIntegerMatrix(transformGrid2_2);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.TWO, BigInteger.valueOf(6)},
{BigInteger.TWO, BigInteger.valueOf(6)}
});
assertEquals(correctMatrix, matrix.hadamardProduct(transformMatrix));
//3x3
matrix = new BigIntegerMatrix(grid3);
transformMatrix = new BigIntegerMatrix(transformGrid3_2);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.TWO, BigInteger.valueOf(6), BigInteger.valueOf(12)},
{BigInteger.TWO, BigInteger.valueOf(6), BigInteger.valueOf(12)},
{BigInteger.TWO, BigInteger.valueOf(6), BigInteger.valueOf(12)}
});
assertEquals(correctMatrix, matrix.hadamardProduct(transformMatrix));
//4x4
matrix = new BigIntegerMatrix(grid4);
transformMatrix = new BigIntegerMatrix(transformGrid4_2);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.TWO, BigInteger.valueOf(6), BigInteger.valueOf(12), BigInteger.valueOf(20)},
{BigInteger.TWO, BigInteger.valueOf(6), BigInteger.valueOf(12), BigInteger.valueOf(20)},
{BigInteger.TWO, BigInteger.valueOf(6), BigInteger.valueOf(12), BigInteger.valueOf(20)},
{BigInteger.TWO, BigInteger.valueOf(6), BigInteger.valueOf(12), BigInteger.valueOf(20)}
});
assertEquals(correctMatrix, matrix.hadamardProduct(transformMatrix));
//10x10
matrix = new BigIntegerMatrix(grid10);
transformMatrix = new BigIntegerMatrix(transformGrid10_2);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.TWO, BigInteger.valueOf(6), BigInteger.valueOf(12), BigInteger.valueOf(20), BigInteger.valueOf(30), BigInteger.valueOf(42), BigInteger.valueOf(56), BigInteger.valueOf(72), BigInteger.valueOf(90), BigInteger.valueOf(110)},
{BigInteger.TWO, BigInteger.valueOf(6), BigInteger.valueOf(12), BigInteger.valueOf(20), BigInteger.valueOf(30), BigInteger.valueOf(42), BigInteger.valueOf(56), BigInteger.valueOf(72), BigInteger.valueOf(90), BigInteger.valueOf(110)},
{BigInteger.TWO, BigInteger.valueOf(6), BigInteger.valueOf(12), BigInteger.valueOf(20), BigInteger.valueOf(30), BigInteger.valueOf(42), BigInteger.valueOf(56), BigInteger.valueOf(72), BigInteger.valueOf(90), BigInteger.valueOf(110)},
{BigInteger.TWO, BigInteger.valueOf(6), BigInteger.valueOf(12), BigInteger.valueOf(20), BigInteger.valueOf(30), BigInteger.valueOf(42), BigInteger.valueOf(56), BigInteger.valueOf(72), BigInteger.valueOf(90), BigInteger.valueOf(110)},
{BigInteger.TWO, BigInteger.valueOf(6), BigInteger.valueOf(12), BigInteger.valueOf(20), BigInteger.valueOf(30), BigInteger.valueOf(42), BigInteger.valueOf(56), BigInteger.valueOf(72), BigInteger.valueOf(90), BigInteger.valueOf(110)},
{BigInteger.TWO, BigInteger.valueOf(6), BigInteger.valueOf(12), BigInteger.valueOf(20), BigInteger.valueOf(30), BigInteger.valueOf(42), BigInteger.valueOf(56), BigInteger.valueOf(72), BigInteger.valueOf(90), BigInteger.valueOf(110)},
{BigInteger.TWO, BigInteger.valueOf(6), BigInteger.valueOf(12), BigInteger.valueOf(20), BigInteger.valueOf(30), BigInteger.valueOf(42), BigInteger.valueOf(56), BigInteger.valueOf(72), BigInteger.valueOf(90), BigInteger.valueOf(110)},
{BigInteger.TWO, BigInteger.valueOf(6), BigInteger.valueOf(12), BigInteger.valueOf(20), BigInteger.valueOf(30), BigInteger.valueOf(42), BigInteger.valueOf(56), BigInteger.valueOf(72), BigInteger.valueOf(90), BigInteger.valueOf(110)},
{BigInteger.TWO, BigInteger.valueOf(6), BigInteger.valueOf(12), BigInteger.valueOf(20), BigInteger.valueOf(30), BigInteger.valueOf(42), BigInteger.valueOf(56), BigInteger.valueOf(72), BigInteger.valueOf(90), BigInteger.valueOf(110)},
{BigInteger.TWO, BigInteger.valueOf(6), BigInteger.valueOf(12), BigInteger.valueOf(20), BigInteger.valueOf(30), BigInteger.valueOf(42), BigInteger.valueOf(56), BigInteger.valueOf(72), BigInteger.valueOf(90), BigInteger.valueOf(110)}
});
assertEquals(correctMatrix, matrix.hadamardProduct(transformMatrix));
}
@Test
public void testTranspose(){
//1x1
BigIntegerMatrix matrix = new BigIntegerMatrix(grid1);
BigIntegerMatrix correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE}});
assertEquals(correctMatrix, matrix.transpose());
//2x2
matrix = new BigIntegerMatrix(grid2);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.ONE},
{BigInteger.TWO, BigInteger.TWO}
});
assertEquals(correctMatrix, matrix.transpose());
//3x3
matrix = new BigIntegerMatrix(grid3);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.ONE, BigInteger.ONE},
{BigInteger.TWO, BigInteger.TWO, BigInteger.TWO},
{BigInteger.valueOf(3), BigInteger.valueOf(3), BigInteger.valueOf(3)}
});
assertEquals(correctMatrix, matrix.transpose());
//4x4
matrix = new BigIntegerMatrix(grid4);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.ONE, BigInteger.ONE, BigInteger.ONE},
{BigInteger.TWO, BigInteger.TWO, BigInteger.TWO, BigInteger.TWO},
{BigInteger.valueOf(3), BigInteger.valueOf(3), BigInteger.valueOf(3), BigInteger.valueOf(3)},
{BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(4)}
});
assertEquals(correctMatrix, matrix.transpose());
//10x10
matrix = new BigIntegerMatrix(grid10);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.ONE, BigInteger.ONE, BigInteger.ONE, BigInteger.ONE, BigInteger.ONE, BigInteger.ONE, BigInteger.ONE, BigInteger.ONE, BigInteger.ONE},
{BigInteger.TWO, BigInteger.TWO, BigInteger.TWO, BigInteger.TWO, BigInteger.TWO, BigInteger.TWO, BigInteger.TWO, BigInteger.TWO, BigInteger.TWO, BigInteger.TWO},
{BigInteger.valueOf(3), BigInteger.valueOf(3), BigInteger.valueOf(3), BigInteger.valueOf(3), BigInteger.valueOf(3), BigInteger.valueOf(3), BigInteger.valueOf(3), BigInteger.valueOf(3), BigInteger.valueOf(3), BigInteger.valueOf(3)},
{BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(4)},
{BigInteger.valueOf(5), BigInteger.valueOf(5), BigInteger.valueOf(5), BigInteger.valueOf(5), BigInteger.valueOf(5), BigInteger.valueOf(5), BigInteger.valueOf(5), BigInteger.valueOf(5), BigInteger.valueOf(5), BigInteger.valueOf(5)},
{BigInteger.valueOf(6), BigInteger.valueOf(6), BigInteger.valueOf(6), BigInteger.valueOf(6), BigInteger.valueOf(6), BigInteger.valueOf(6), BigInteger.valueOf(6), BigInteger.valueOf(6), BigInteger.valueOf(6), BigInteger.valueOf(6)},
{BigInteger.valueOf(7), BigInteger.valueOf(7), BigInteger.valueOf(7), BigInteger.valueOf(7), BigInteger.valueOf(7), BigInteger.valueOf(7), BigInteger.valueOf(7), BigInteger.valueOf(7), BigInteger.valueOf(7), BigInteger.valueOf(7)},
{BigInteger.valueOf(8), BigInteger.valueOf(8), BigInteger.valueOf(8), BigInteger.valueOf(8), BigInteger.valueOf(8), BigInteger.valueOf(8), BigInteger.valueOf(8), BigInteger.valueOf(8), BigInteger.valueOf(8), BigInteger.valueOf(8)},
{BigInteger.valueOf(9), BigInteger.valueOf(9), BigInteger.valueOf(9), BigInteger.valueOf(9), BigInteger.valueOf(9), BigInteger.valueOf(9), BigInteger.valueOf(9), BigInteger.valueOf(9), BigInteger.valueOf(9), BigInteger.valueOf(9)},
{BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10), BigInteger.valueOf(10)},
});
assertEquals(correctMatrix, matrix.transpose());
}
@Test
public void testDeterminant(){
//1x1
BigIntegerMatrix matrix = new BigIntegerMatrix(grid1);
assertEquals(BigInteger.ONE, matrix.determinant());
//Invalid determinants
BigIntegerMatrix testMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ZERO, BigInteger.ZERO}});
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.determinant();
});
//2x2
matrix = new BigIntegerMatrix(grid2);
assertEquals(BigInteger.ZERO, matrix.determinant());
matrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.valueOf(4)},
{BigInteger.valueOf(4), BigInteger.ONE}
});
assertEquals(BigInteger.valueOf(-15), matrix.determinant());
//det
assertEquals(matrix.determinant(), matrix.det());
//3x3
matrix = new BigIntegerMatrix(grid3);
assertEquals(BigInteger.ZERO, matrix.determinant());
matrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.valueOf(4), BigInteger.TWO},
{BigInteger.TWO, BigInteger.valueOf(4), BigInteger.ONE},
{BigInteger.valueOf(4), BigInteger.ONE, BigInteger.TWO}
});
assertEquals(BigInteger.valueOf(-21), matrix.determinant());
//4x4
matrix = new BigIntegerMatrix(grid4);
assertEquals( BigInteger.ZERO, matrix.determinant());
matrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.ONE},
{BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.ONE, BigInteger.TWO},
{BigInteger.valueOf(4), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)}
});
assertEquals(BigInteger.valueOf(160), matrix.determinant());
//Column
matrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.ZERO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.ZERO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ZERO, BigInteger.ZERO, BigInteger.valueOf(3), BigInteger.valueOf(4)}
});
assertEquals(BigInteger.ZERO, matrix.determinant());
//Column2
matrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.ZERO, BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.ZERO, BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.ZERO, BigInteger.valueOf(4)},
{BigInteger.ZERO, BigInteger.TWO, BigInteger.ZERO, BigInteger.valueOf(4)}
});
assertEquals(BigInteger.ZERO, matrix.determinant());
//10x10
matrix = new BigIntegerMatrix(grid10);
assertEquals(BigInteger.ZERO, matrix.determinant());
matrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.ONE},
{BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.ONE, BigInteger.TWO},
{BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5)},
{BigInteger.valueOf(7), BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6)},
{BigInteger.valueOf(8), BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7)},
{BigInteger.valueOf(9), BigInteger.valueOf(10), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5), BigInteger.valueOf(6), BigInteger.valueOf(7), BigInteger.valueOf(8)},
{BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ONE}
});
assertEquals(BigInteger.valueOf(-10000000), matrix.determinant());
}
@Test
public void testCofactor(){
//1x1
BigIntegerMatrix matrix = new BigIntegerMatrix(grid1);
BigIntegerMatrix correctMatrix = new BigIntegerMatrix(grid1);
assertEquals(correctMatrix, matrix.cofactor());
//Invalid cofactor
BigIntegerMatrix testMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ZERO, BigInteger.ZERO}});
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.cofactor();
});
//2x2
matrix = new BigIntegerMatrix(grid2);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.TWO, BigInteger.ONE.negate()},
{BigInteger.TWO.negate(), BigInteger.ONE}
});
assertEquals(correctMatrix, matrix.cofactor());
//cof
assertEquals(matrix.cofactor(), matrix.cof());
//3x3
matrix = new BigIntegerMatrix(grid3);
correctMatrix = new BigIntegerMatrix(3, 3, BigInteger.ZERO);
assertEquals(correctMatrix, matrix.cofactor());
matrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.valueOf(4), BigInteger.TWO},
{BigInteger.TWO, BigInteger.valueOf(4), BigInteger.ONE},
{BigInteger.valueOf(4), BigInteger.ONE, BigInteger.TWO}
});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(7), BigInteger.ZERO, BigInteger.valueOf(-14)},
{BigInteger.valueOf(-6), BigInteger.valueOf(-6), BigInteger.valueOf(15)},
{BigInteger.valueOf(-4), BigInteger.valueOf(3), BigInteger.valueOf(-4)}
});
assertEquals(correctMatrix, matrix.cofactor());
//4x4
matrix = new BigIntegerMatrix(grid4);
correctMatrix = new BigIntegerMatrix(4, 4, BigInteger.ZERO);
assertEquals(correctMatrix, matrix.cofactor());
matrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.ONE},
{BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.ONE, BigInteger.TWO},
{BigInteger.valueOf(4), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)}
});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(-36), BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(44)},
{BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(44), BigInteger.valueOf(-36)},
{BigInteger.valueOf(4), BigInteger.valueOf(44), BigInteger.valueOf(-36), BigInteger.valueOf(4)},
{BigInteger.valueOf(44), BigInteger.valueOf(-36), BigInteger.valueOf(4), BigInteger.valueOf(4)}
});
assertEquals(correctMatrix, matrix.cofactor());
//10x10
//?Skipping 10x10 test because test took > 5s by itself
/*
matrix = new BigIntegerMatrix(grid10);
correctMatrix = new BigIntegerMatrix(10, BigInteger.valueOf(10), 0);
assertEquals("BigIntegerMatrix 10x10 failed cofactor1.", correctMatrix, matrix.cofactor());
*/
}
@Test
public void testPower(){
//1x1
BigIntegerMatrix matrix = new BigIntegerMatrix(grid1);
BigIntegerMatrix correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE}});
assertEquals(correctMatrix, matrix.pow(3));
//Invalid powers
final BigIntegerMatrix testMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ZERO}, {BigInteger.ZERO}});
final BigIntegerMatrix testMatrix2 = new BigIntegerMatrix(grid1);
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.pow(1);
});
assertThrows(InvalidScalarException.class, () -> {
testMatrix2.pow(-1);
});
//2x2
matrix = new BigIntegerMatrix(grid2);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(9), BigInteger.valueOf(18)},
{BigInteger.valueOf(9), BigInteger.valueOf(18)}
});
assertEquals(correctMatrix, matrix.pow(3));
//3x3
matrix = new BigIntegerMatrix(grid3);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(36), BigInteger.valueOf(72), BigInteger.valueOf(108)},
{BigInteger.valueOf(36), BigInteger.valueOf(72), BigInteger.valueOf(108)},
{BigInteger.valueOf(36), BigInteger.valueOf(72), BigInteger.valueOf(108)}
});
assertEquals(correctMatrix, matrix.pow(3));
//4x4
//0
matrix = new BigIntegerMatrix(grid4);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.ONE, BigInteger.ONE, BigInteger.ONE},
{BigInteger.ONE, BigInteger.ONE, BigInteger.ONE, BigInteger.ONE},
{BigInteger.ONE, BigInteger.ONE, BigInteger.ONE, BigInteger.ONE},
{BigInteger.ONE, BigInteger.ONE, BigInteger.ONE, BigInteger.ONE}
});
assertEquals(correctMatrix, matrix.pow(0));
//1
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)}
});
assertEquals(correctMatrix, matrix.pow(1));
//3
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(100), BigInteger.valueOf(200), BigInteger.valueOf(300), BigInteger.valueOf(400)},
{BigInteger.valueOf(100), BigInteger.valueOf(200), BigInteger.valueOf(300), BigInteger.valueOf(400)},
{BigInteger.valueOf(100), BigInteger.valueOf(200), BigInteger.valueOf(300), BigInteger.valueOf(400)},
{BigInteger.valueOf(100), BigInteger.valueOf(200), BigInteger.valueOf(300), BigInteger.valueOf(400)}
});
assertEquals(correctMatrix, matrix.pow(3));
//10x10
matrix = new BigIntegerMatrix(grid10);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(3025), BigInteger.valueOf(6050), BigInteger.valueOf(9075), BigInteger.valueOf(12100), BigInteger.valueOf(15125), BigInteger.valueOf(18150), BigInteger.valueOf(21175), BigInteger.valueOf(24200), BigInteger.valueOf(27225), BigInteger.valueOf(30250)},
{BigInteger.valueOf(3025), BigInteger.valueOf(6050), BigInteger.valueOf(9075), BigInteger.valueOf(12100), BigInteger.valueOf(15125), BigInteger.valueOf(18150), BigInteger.valueOf(21175), BigInteger.valueOf(24200), BigInteger.valueOf(27225), BigInteger.valueOf(30250)},
{BigInteger.valueOf(3025), BigInteger.valueOf(6050), BigInteger.valueOf(9075), BigInteger.valueOf(12100), BigInteger.valueOf(15125), BigInteger.valueOf(18150), BigInteger.valueOf(21175), BigInteger.valueOf(24200), BigInteger.valueOf(27225), BigInteger.valueOf(30250)},
{BigInteger.valueOf(3025), BigInteger.valueOf(6050), BigInteger.valueOf(9075), BigInteger.valueOf(12100), BigInteger.valueOf(15125), BigInteger.valueOf(18150), BigInteger.valueOf(21175), BigInteger.valueOf(24200), BigInteger.valueOf(27225), BigInteger.valueOf(30250)},
{BigInteger.valueOf(3025), BigInteger.valueOf(6050), BigInteger.valueOf(9075), BigInteger.valueOf(12100), BigInteger.valueOf(15125), BigInteger.valueOf(18150), BigInteger.valueOf(21175), BigInteger.valueOf(24200), BigInteger.valueOf(27225), BigInteger.valueOf(30250)},
{BigInteger.valueOf(3025), BigInteger.valueOf(6050), BigInteger.valueOf(9075), BigInteger.valueOf(12100), BigInteger.valueOf(15125), BigInteger.valueOf(18150), BigInteger.valueOf(21175), BigInteger.valueOf(24200), BigInteger.valueOf(27225), BigInteger.valueOf(30250)},
{BigInteger.valueOf(3025), BigInteger.valueOf(6050), BigInteger.valueOf(9075), BigInteger.valueOf(12100), BigInteger.valueOf(15125), BigInteger.valueOf(18150), BigInteger.valueOf(21175), BigInteger.valueOf(24200), BigInteger.valueOf(27225), BigInteger.valueOf(30250)},
{BigInteger.valueOf(3025), BigInteger.valueOf(6050), BigInteger.valueOf(9075), BigInteger.valueOf(12100), BigInteger.valueOf(15125), BigInteger.valueOf(18150), BigInteger.valueOf(21175), BigInteger.valueOf(24200), BigInteger.valueOf(27225), BigInteger.valueOf(30250)},
{BigInteger.valueOf(3025), BigInteger.valueOf(6050), BigInteger.valueOf(9075), BigInteger.valueOf(12100), BigInteger.valueOf(15125), BigInteger.valueOf(18150), BigInteger.valueOf(21175), BigInteger.valueOf(24200), BigInteger.valueOf(27225), BigInteger.valueOf(30250)},
{BigInteger.valueOf(3025), BigInteger.valueOf(6050), BigInteger.valueOf(9075), BigInteger.valueOf(12100), BigInteger.valueOf(15125), BigInteger.valueOf(18150), BigInteger.valueOf(21175), BigInteger.valueOf(24200), BigInteger.valueOf(27225), BigInteger.valueOf(30250)}
});
assertEquals(correctMatrix, matrix.pow(3));
}
@Test
public void testAdjoint(){
//1x1
BigIntegerMatrix matrix = new BigIntegerMatrix(grid1);
BigIntegerMatrix correctMatrix = new BigIntegerMatrix(grid1);
assertEquals(correctMatrix, matrix.adjoint());
//2x2
matrix = new BigIntegerMatrix(grid2);
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.TWO, BigInteger.TWO.negate()},
{BigInteger.ONE.negate(), BigInteger.ONE}
});
assertEquals(correctMatrix, matrix.adjoint());
//adj
assertEquals(matrix.adjoint(), matrix.adj());
//3x3
matrix = new BigIntegerMatrix(grid3);
correctMatrix = new BigIntegerMatrix(3, 3, BigInteger.ZERO);
assertEquals(correctMatrix, matrix.adjoint());
//4x4
matrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.ONE},
{BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.ONE, BigInteger.TWO},
{BigInteger.valueOf(4), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)}
});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.valueOf(-36), BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(44)},
{BigInteger.valueOf(4), BigInteger.valueOf(4), BigInteger.valueOf(44), BigInteger.valueOf(-36)},
{BigInteger.valueOf(4), BigInteger.valueOf(44), BigInteger.valueOf(-36), BigInteger.valueOf(4)},
{BigInteger.valueOf(44), BigInteger.valueOf(-36), BigInteger.valueOf(4), BigInteger.valueOf(4)}
});
assertEquals(correctMatrix, matrix.adjoint());
//10x10
//?Skipping 10x10 test because test took > 5s by itself
/*
matrix = new BigIntegerMatrix(grid10);
correctMatrix = new BigIntegerMatrix(10, BigInteger.valueOf(10), 0);
assertEquals("BigIntegerMatrix 10x10 failed adjoint.", correctMatrix, matrix.adjoint());
*/
}
@Test
public void testInverse(){
//1x1
BigIntegerMatrix matrix = new BigIntegerMatrix(grid1);
BigIntegerMatrix correctMatrix = new BigIntegerMatrix(grid1);
assertEquals(correctMatrix, matrix.inverse());
//Invalid inverse
BigIntegerMatrix testMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ZERO, BigInteger.ZERO}});
BigIntegerMatrix testMatrix2 = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ZERO, BigInteger.TWO, BigInteger.valueOf(3)},
{BigInteger.ZERO, BigInteger.TWO, BigInteger.valueOf(3)}
});
assertThrows(InvalidGeometryException.class, () -> {
testMatrix.inverse();
});
assertThrows(InvalidScalarException.class, () -> {
testMatrix2.inverse();
});
//2x2
matrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.valueOf(4)},
{BigInteger.valueOf(4), BigInteger.ONE}
});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ZERO.negate(), BigInteger.ZERO},
{BigInteger.ZERO, BigInteger.ZERO.negate()}
});
assertEquals(correctMatrix, matrix.inverse());
//3x3
matrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.valueOf(4), BigInteger.TWO},
{BigInteger.TWO, BigInteger.valueOf(4), BigInteger.ONE},
{BigInteger.valueOf(4), BigInteger.ONE, BigInteger.TWO}
});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ZERO.negate(), BigInteger.ZERO, BigInteger.ZERO},
{BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO.negate()},
{BigInteger.ZERO, BigInteger.ZERO.negate(), BigInteger.ZERO}
});
assertEquals(correctMatrix, matrix.inverse());
//4x4
matrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)},
{BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.ONE},
{BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.ONE, BigInteger.TWO},
{BigInteger.valueOf(4), BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)}
});
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ZERO.negate(), BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO},
{BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO.negate()},
{BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO.negate(), BigInteger.ZERO},
{BigInteger.ZERO, BigInteger.ZERO.negate(), BigInteger.ZERO, BigInteger.ZERO}
});
assertEquals(correctMatrix, matrix.inverse());
//10x10
//?Skipped 10x10 because it would take a long time to compute
}
@Test
public void testGenerateIdentity(){
//0x0
assertThrows(InvalidGeometryException.class, () -> {
BigIntegerMatrix.generateIdentity(0);
});
//1x1
BigIntegerMatrix correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE}});
assertEquals(correctMatrix, BigIntegerMatrix.generateIdentity(1));
//2x2
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.ZERO},
{BigInteger.ZERO, BigInteger.ONE }
});
assertEquals(correctMatrix, BigIntegerMatrix.generateIdentity(2));
//3x3
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.ZERO, BigInteger.ZERO},
{BigInteger.ZERO, BigInteger.ONE, BigInteger.ZERO},
{BigInteger.ZERO, BigInteger.ZERO, BigInteger.ONE }
});
assertEquals(correctMatrix, BigIntegerMatrix.generateIdentity(3));
//4x4
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO},
{BigInteger.ZERO, BigInteger.ONE, BigInteger.ZERO, BigInteger.ZERO},
{BigInteger.ZERO, BigInteger.ZERO, BigInteger.ONE, BigInteger.ZERO},
{BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ONE }
});
assertEquals(correctMatrix, BigIntegerMatrix.generateIdentity(4));
//10x10
correctMatrix = new BigIntegerMatrix(new BigInteger[][]{
{BigInteger.ONE, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO},
{BigInteger.ZERO, BigInteger.ONE, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO},
{BigInteger.ZERO, BigInteger.ZERO, BigInteger.ONE, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO},
{BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ONE, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO},
{BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ONE, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO},
{BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ONE, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO},
{BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ONE, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO},
{BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ONE, BigInteger.ZERO, BigInteger.ZERO},
{BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ONE, BigInteger.ZERO},
{BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ONE }
});
assertEquals(correctMatrix, BigIntegerMatrix.generateIdentity(10));
}
@Test
public void testHashCode(){
BigIntegerMatrix matrix = new BigIntegerMatrix();
assertEquals(Arrays.hashCode(new BigInteger[0][0]), matrix.hashCode());
}
@Test
public void testToString(){
BigIntegerMatrix matrix = new BigIntegerMatrix(grid3);
String matrixString = "[1,2,3]\n[1,2,3]\n[1,2,3]";
assertEquals(matrixString, matrix.toString());
}
}