mirror of
https://bitbucket.org/Mattrixwv/matrix.git
synced 2025-12-06 15:03:58 -05:00
1862 lines
113 KiB
Java
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());
|
|
}
|
|
}
|