//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()); } }