diff --git a/src/test/java/com/mattrixwv/matrix/TestBigIntegerMatrix.java b/src/test/java/com/mattrixwv/matrix/TestBigIntegerMatrix.java new file mode 100644 index 0000000..82189b8 --- /dev/null +++ b/src/test/java/com/mattrixwv/matrix/TestBigIntegerMatrix.java @@ -0,0 +1,1313 @@ +//Matrix/src/test/java/com/mattrixwv/matrix/TestBigBigIntegerMatrix.java +//Mattrixwv +// Created: 02-10-22 +//Modified: 02-10-22 +package com.mattrixwv.matrix; + + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.math.BigInteger; + +import org.junit.Test; + + +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 testEquals(){ + //1x1 + BigIntegerMatrix matrix = new BigIntegerMatrix(grid1); + assertTrue("BigIntegerMatrix 1x1 failed equals BigIntegerMatrix.", matrix.equals(matrix)); + @SuppressWarnings("unlikely-arg-type") + boolean gridEquals = matrix.equals(grid1); + assertTrue("BigIntegerMatrix 1x1 failed equals BigInteger[][].", gridEquals); + + //2x2 + matrix = new BigIntegerMatrix(grid2); + assertTrue("BigIntegerMatrix 2x2 failed equals BigIntegerMatrix.", matrix.equals(matrix)); + @SuppressWarnings("unlikely-arg-type") + boolean gridEquals2 = matrix.equals(grid2); + assertTrue("BigIntegerMatrix 2x2 failed equals BigInteger[][].", gridEquals2); + + //3x3 + matrix = new BigIntegerMatrix(grid3); + assertTrue("BigIntegerMatrix 3x3 failed equals BigIntegerMatrix.", matrix.equals(matrix)); + @SuppressWarnings("unlikely-arg-type") + boolean gridEquals3 = matrix.equals(grid3); + assertTrue("BigIntegerMatrix 3x3 failed equals BigInteger[][].", gridEquals3); + + //4x4 + matrix = new BigIntegerMatrix(grid4); + assertTrue("BigIntegerMatrix 4x4 failed equals BigIntegerMatrix.", matrix.equals(matrix)); + @SuppressWarnings("unlikely-arg-type") + boolean gridEquals4 = matrix.equals(grid4); + assertTrue("BigIntegerMatrix 4x4 failed equals BigInteger[][].", gridEquals4); + + //10x10 + matrix = new BigIntegerMatrix(grid10); + assertTrue("BigIntegerMatrix = 10x10 failed equals BigIntegerMatrix.", matrix.equals(matrix)); + @SuppressWarnings("unlikely-arg-type") + boolean gridEquals10 = matrix.equals(grid10); + assertTrue("BigIntegerMatrix 10x10 failed equals BigInteger[][].", gridEquals10); + } + + @Test + public void testGets(){ + //1x1 + BigIntegerMatrix matrix = new BigIntegerMatrix(grid1); + assertEquals("BigIntegerMatrix 1x1 failed get.", BigInteger.ONE, matrix.get(0, 0)); + //GetRow + BigIntegerMatrix correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE}}); + assertEquals("BigIntegerMatrix 1x1 failed getRow.", correctMatrix, matrix.getRow(0)); + //GetColumn + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE}}); + assertEquals("BigIntegerMatrix 1x1 failed getCol.", correctMatrix, matrix.getCol(0)); + + //2x2 + matrix = new BigIntegerMatrix(grid2); + assertEquals("BigIntegerMatrix 2x2 failed get.", BigInteger.ONE, matrix.get(0, 0)); + //GetRow + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE, BigInteger.TWO}}); + assertEquals("BigIntegerMatrix 2x2 failed getRow.", correctMatrix, matrix.getRow(0)); + //GetColumn + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{ + {BigInteger.ONE}, + {BigInteger.ONE} + }); + assertEquals("BigIntegerMatrix 2x2 failed getCol.", correctMatrix, matrix.getCol(0)); + + //3x3 + matrix = new BigIntegerMatrix(grid3); + assertEquals("BigIntegerMatrix 3x3 failed get.", BigInteger.ONE, matrix.get(0, 0)); + //GetRow + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3)}}); + assertEquals("BigIntegerMatrix 3x3 failed getRow.", correctMatrix, matrix.getRow(0)); + //GetColumn + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{ + {BigInteger.ONE}, + {BigInteger.ONE}, + {BigInteger.ONE} + }); + assertEquals("BigIntegerMatrix 3x3 failed getCol.", correctMatrix, matrix.getCol(0)); + + //4x4 + matrix = new BigIntegerMatrix(grid4); + assertEquals("BigIntegerMatrix 4x4 failed get.", BigInteger.ONE, matrix.get(0, 0)); + //GetRow + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4)}}); + assertEquals("BigIntegerMatrix 4x4 failed getRow.", correctMatrix, matrix.getRow(0)); + //GetColumn + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{ + {BigInteger.ONE}, + {BigInteger.ONE}, + {BigInteger.ONE}, + {BigInteger.ONE} + }); + assertEquals("BigIntegerMatrix 4x4 failed getCol.", correctMatrix, matrix.getCol(0)); + + //10x10 + matrix = new BigIntegerMatrix(grid10); + assertEquals("BigIntegerMatrix 10x10 failed get.", BigInteger.ONE, matrix.get(0, 0)); + //GetRow + 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("BigIntegerMatrix 10x10 failed getRow.", correctMatrix, matrix.getRow(0)); + //GetColumn + 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("BigIntegerMatrix 10x10 failed getColumn.", correctMatrix, matrix.getCol(0)); + } + + @Test + public void testSets(){ + //1x1 + //Set + BigIntegerMatrix matrix = new BigIntegerMatrix(grid1); + matrix.set(0, 0, BigInteger.TWO); + BigIntegerMatrix correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.TWO}}); + assertEquals("BigIntegerMatrix 1x1 failed set.", correctMatrix, matrix); + //SetRow + matrix.setRow(0, new BigInteger[]{BigInteger.ZERO}); + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ZERO}}); + assertEquals("BigIntegerMatrix 1x1 failed setRow.", correctMatrix, matrix); + //SetColumn + matrix.setCol(0, new BigInteger[]{BigInteger.ONE}); + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE}}); + assertEquals("BigIntegerMatrix 1x1 failed setCol.", correctMatrix, matrix); + + //2x2 + //Set + 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("BigIntegerMatrix 2x2 failed set.", correctMatrix, matrix); + //SetRow + matrix.setRow(1, new BigInteger[]{BigInteger.TWO, BigInteger.ONE}); + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{ + {BigInteger.valueOf(3), BigInteger.TWO}, + {BigInteger.TWO, BigInteger.ONE} + }); + assertEquals("BigIntegerMatrix 2x2 failed set row.", correctMatrix, matrix); + //SetColumn + 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("BigIntegerMatrix 2x2 failed set row.", correctMatrix, matrix); + + //3x3 + //Set + 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("BigIntegerMatrix 3x3 failed set.", correctMatrix, matrix); + //SetRow + 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("BigIntegerMatrix 3x3 failed setRow.", correctMatrix, matrix); + //SetColumn + matrix.setCol(0, new BigInteger[]{BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO}); + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{ + {BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO}, + {BigInteger.ZERO, BigInteger.TWO, BigInteger.valueOf(3)}, + {BigInteger.ZERO, BigInteger.TWO, BigInteger.valueOf(3)} + }); + assertEquals("BigIntegerMatrix 3x3 failed setColumn.", correctMatrix, matrix); + + //4x4 + //Set + 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("BigIntegerMatrix 4x4 failed set.", correctMatrix, matrix); + //SetRow + 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("BigIntegerMatrix 4x4 failed setRow.", correctMatrix, matrix); + //SetColumn + matrix.setCol(0, new BigInteger[]{BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO}); + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{ + {BigInteger.ZERO, BigInteger.valueOf(3), BigInteger.TWO, BigInteger.ONE}, + {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("BigIntegerMatrix 4x4 failed setCol.", correctMatrix, matrix); + + //10x10 + //Set + 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("BigIntegerMatrix 10x10 failed setRow.", correctMatrix, matrix); + //SetRow + 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("BigIntegerMatrix 10x10 failed setRow.", correctMatrix, matrix); + //SetColumn + 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.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.TWO, BigInteger.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("BigIntegerMatrix 10x10 failed setColumn.", correctMatrix, matrix); + } + + @Test + public void testAdds(){ + //1x1 + //AddRow + BigIntegerMatrix matrix = new BigIntegerMatrix(grid1); + matrix.addRow(new BigInteger[]{BigInteger.ONE}); + BigIntegerMatrix correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE}, {BigInteger.ONE}}); + assertEquals("BigIntegerMatrix 1x1 failed addRow.", correctMatrix, matrix); + //AddColumn + matrix = new BigIntegerMatrix(grid1); + matrix.addCol(new BigInteger[]{BigInteger.ONE}); + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE, BigInteger.ONE}}); + assertEquals("BigIntegerMatrix 1x1 failed addCol.", correctMatrix, matrix); + + //2x2 + //AddRow + 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("BigIntegerMatrix 2x2 failed addRow.", correctMatrix, matrix); + //AddColumn + 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("BigIntegerMatrix 2x2 failed addCol.", correctMatrix, matrix); + + //3x3 + //AddRow + 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("BigIntegerMatrix 3x3 failed addRow.", correctMatrix, matrix); + //AddColumn + 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("BigIntegerMatrix 3x3 failed addCol.", correctMatrix, matrix); + + //4x4 + //AddRow + 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("BigIntegerMatrix 4x4 failed addRow.", correctMatrix, matrix); + //AddColumn + matrix.addCol(new BigInteger[]{BigInteger.valueOf(5), 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)}, + {BigInteger.ONE, BigInteger.TWO, BigInteger.valueOf(3), BigInteger.valueOf(4), BigInteger.valueOf(5)} + }); + assertEquals("BigIntegerMatrix 4x4 failed addCol.", correctMatrix, matrix); + + //10x10 + //AddRow + 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("BigIntegerMatrix 10x10 failed addRow.", correctMatrix, matrix); + //AddColumn + 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("BigIntegerMatrix 10x10 failed addColumn.", correctMatrix, matrix); + } + + @Test + public void testAppends(){ + //1x1 + //appendRight + BigIntegerMatrix matrix = new BigIntegerMatrix(grid1); + BigIntegerMatrix secondMatrix = new BigIntegerMatrix(grid1); + BigIntegerMatrix correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE, BigInteger.ONE}}); + assertEquals("BigIntegerMatrix 1x1 failed appendRight.", correctMatrix, matrix.appendRight(secondMatrix)); + //appendBottom + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{ + {BigInteger.ONE}, + {BigInteger.ONE} + }); + assertEquals("BigIntegerMatrix 1x1 failed appendBottom.", correctMatrix, matrix.appendBottom(secondMatrix)); + + //2x2 + //appendRight + 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("BigIntegerMatrix 2x2 failed appendRight.", correctMatrix, matrix.appendRight(secondMatrix)); + //appendBottom + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{ + {BigInteger.ONE, BigInteger.TWO}, + {BigInteger.ONE, BigInteger.TWO}, + {BigInteger.ONE, BigInteger.TWO}, + {BigInteger.ONE, BigInteger.TWO} + }); + assertEquals("BigIntegerMatrix 2x2 failed appendBottom.", correctMatrix, matrix.appendBottom(secondMatrix)); + + //3x3 + //appendRight + 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("BigIntegerMatrix 3x3 failed appendRight.", correctMatrix, matrix.appendRight(secondMatrix)); + //appendBottom + 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("BigIntegerMatrix 3x3 failed appendBottom.", correctMatrix, matrix.appendBottom(secondMatrix)); + + //4x4 + //appendRight + 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("BigIntegerMatrix 4x4 failed appendRight.", correctMatrix, matrix.appendRight(secondMatrix)); + //appendBottom + 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("BigIntegerMatrix 4x4 failed appendBottom.", correctMatrix, matrix.appendBottom(secondMatrix)); + + //10x10 + //appendRight + 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("BigIntegerMatrix 10x10 failed appendRight.", correctMatrix, matrix.appendRight(secondMatrix)); + //appendBottom + 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("BigIntegerMatrix 10x10 failed appendBottom.", correctMatrix, matrix.appendBottom(secondMatrix)); + } + + @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("BigIntegerMatrix 1x1 failed add BigIntegerMatrix.", correctMatrix, matrix.add(transformMatrix)); + assertEquals("BigIntegerMatrix 1x1 failed add scalar.", correctMatrix, matrix.add(BigInteger.ONE)); + + //2x2 + matrix = new BigIntegerMatrix(grid2); + transformMatrix = new BigIntegerMatrix(transformGrid2_1); + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{ + {BigInteger.TWO, BigInteger.TWO}, + {BigInteger.TWO, BigInteger.TWO} + }); + assertEquals("BigIntegerMatrix 2x2 failed add BigIntegerMatrix.", correctMatrix, matrix.add(transformMatrix)); + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{ + {BigInteger.TWO, BigInteger.valueOf(3)}, + {BigInteger.TWO, BigInteger.valueOf(3)} + }); + assertEquals("BigIntegerMatrix 2x2 failed add scalar.", 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("BigIntegerMatrix 3x3 failed add BigIntegerMatrix.", 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("BigIntegerMatrix 3x3 failed add scalar.", 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("BigIntegerMatrix 4x4 failed add BigIntegerMatrix.", 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("BigIntegerMatrix 4x4 failed add scalar.", 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("BigIntegerMatrix 5x5 failed add BigIntegerMatrix.", 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("BigIntegerMatrix 10x10 failed add BigIntegerMatrix.", 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("BigIntegerMatrix 1x1 failed subtract BigIntegerMatrix.", correctMatrix, matrix.subtract(transformMatrix)); + assertEquals("BigIntegerMatrix 1x1 failed subtract scalar.", correctMatrix, matrix.subtract(BigInteger.ONE)); + + //2x2 + matrix = new BigIntegerMatrix(grid2); + transformMatrix = new BigIntegerMatrix(grid2); + correctMatrix = new BigIntegerMatrix(2, 2, BigInteger.ZERO); + assertEquals("BigIntegerMatrix 2x2 failed subtract BigIntegerMatrix.", correctMatrix, matrix.subtract(transformMatrix)); + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{ + {BigInteger.ZERO, BigInteger.ONE}, + {BigInteger.ZERO, BigInteger.ONE} + }); + assertEquals("BigIntegerMatrix 2x2 failed subtract scalar.", correctMatrix, matrix.subtract(BigInteger.ONE)); + + //3x3 + matrix = new BigIntegerMatrix(grid3); + transformMatrix = new BigIntegerMatrix(grid3); + correctMatrix = new BigIntegerMatrix(3, 3, BigInteger.ZERO); + assertEquals("BigIntegerMatrix 3x3 failed subtract BigIntegerMatrix.", 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("BigIntegerMatrix 3x3 failed subtract scalar.", correctMatrix, matrix.subtract(BigInteger.ONE)); + + //4x4 + matrix = new BigIntegerMatrix(grid4); + transformMatrix = new BigIntegerMatrix(grid4); + correctMatrix = new BigIntegerMatrix(4, 4, BigInteger.ZERO); + assertEquals("BigIntegerMatrix 4x4 failed subtract BigIntegerMatrix.", 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("BigIntegerMatrix 4x4 failed subtract scalar.", correctMatrix, matrix.subtract(BigInteger.ONE)); + + //10x10 + matrix = new BigIntegerMatrix(grid10); + transformMatrix = new BigIntegerMatrix(grid10); + correctMatrix = new BigIntegerMatrix(10, 10, BigInteger.ZERO); + assertEquals("BigIntegerMatrix 10x10 failed subtract BigIntegerMatrix.", 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("BigIntegerMatrix 10x10 failed subtract scalar.", 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("BigIntegerMatrix 1x1 failed multiplication BigIntegerMatrix.", correctMatrix, matrix.multiply(transformMatrix)); + assertEquals("BigIntegerMatrix 1x1 failed multiplication scalar.", correctMatrix, matrix.multiply(BigInteger.TWO)); + + //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("BigIntegerMatrix 2x2 failed multiplication BigIntegerMatrix.", 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("BigIntegerMatrix 2x2 failed multiplication vector.", correctMatrix, matrix.multiply(vector)); + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{ + {BigInteger.TWO, BigInteger.valueOf(4)}, + {BigInteger.TWO, BigInteger.valueOf(4)} + }); + assertEquals("BigIntegerMatrix 2x2 failed multiplication scalar.", 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("BigIntegerMatrix 3x3 failed multiplication BigIntegerMatrix.", 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("BigIntegerMatrix 3x3 failed multiplication vector.", 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("BigIntegerMatrix 3x3 failed multiplication scalar.", 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("BigIntegerMatrix 4x4 failed multiplication BigIntegerMatrix.", 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("BigIntegerMatrix 4x4 failed multiplication vector.", 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("BigIntegerMatrix 4x4 failed multiplication scalar.", 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("BigIntegerMatrix 10x10 failed multiplication BigIntegerMatrix.", 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("BigIntegerMatrix 10x10 failed multiplication vector.", 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("BigIntegerMatrix 10x10 failed multiplication scalar.", correctMatrix, matrix.multiply(BigInteger.TWO)); + } + + @Test + public void testDotProduct(){ + //1x1 + BigIntegerMatrix matrix = new BigIntegerMatrix(grid1); + BigIntegerMatrix transformMatrix = new BigIntegerMatrix(transformGrid1_2); + assertEquals("BigIntegerMatrix 1x1 failed dot product BigIntegerMatrix.", BigInteger.TWO, matrix.dotProduct(transformMatrix)); + + //2x2 + matrix = new BigIntegerMatrix(grid2); + transformMatrix = new BigIntegerMatrix(transformGrid2_2); + assertEquals("BigIntegerMatrix 2x2 failed dot product BigIntegerMatrix.", BigInteger.valueOf(30), matrix.dotProduct(transformMatrix)); + + //3x3 + matrix = new BigIntegerMatrix(grid3); + transformMatrix = new BigIntegerMatrix(transformGrid3_2); + assertEquals("BigIntegerMatrix 3x3 failed dot product BigIntegerMatrix.", BigInteger.valueOf(162), matrix.dotProduct(transformMatrix)); + + //4x4 + matrix = new BigIntegerMatrix(grid4); + transformMatrix = new BigIntegerMatrix(transformGrid4_2); + assertEquals("BigIntegerMatrix 4x4 failed dot product BigIntegerMatrix.", BigInteger.valueOf(560), matrix.dotProduct(transformMatrix)); + + //10x10 + matrix = new BigIntegerMatrix(grid10); + transformMatrix = new BigIntegerMatrix(transformGrid10_2); + assertEquals("BigIntegerMatrix 10x10 failed dot product BigIntegerMatrix.", 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("BigIntegerMatrix 1x1 failed hadamard product.", correctMatrix, matrix.hadamardProduct(transformMatrix)); + + //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("BigIntegerMatrix 2x2 failed hadamard product.", 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("BigIntegerMatrix 3x3 failed hadamard product.", 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("BigIntegerMatrix 4x4 failed hadamard product.", 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("BigIntegerMatrix 10x10 failed hadamard product.", correctMatrix, matrix.hadamardProduct(transformMatrix)); + } + + @Test + public void testTranspose(){ + //1x1 + BigIntegerMatrix matrix = new BigIntegerMatrix(grid1); + BigIntegerMatrix correctMatrix = new BigIntegerMatrix(new BigInteger[][]{{BigInteger.ONE}}); + assertEquals("BigIntegerMatrix 1x1 failed transpose.", correctMatrix, matrix.transpose()); + + //2x2 + matrix = new BigIntegerMatrix(grid2); + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{ + {BigInteger.ONE, BigInteger.ONE}, + {BigInteger.TWO, BigInteger.TWO} + }); + assertEquals("BigIntegerMatrix 2x2 failed transpose.", 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("BigIntegerMatrix 3x3 failed transpose.", 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("BigIntegerMatrix 4x4 failed transpose.", 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("BigIntegerMatrix 10x10 failed transpose.", correctMatrix, matrix.transpose()); + } + + @Test + public void testDeterminant(){ + //1x1 + BigIntegerMatrix matrix = new BigIntegerMatrix(grid1); + assertEquals("BigIntegerMatrix 1x1 failed determinant.", BigInteger.ONE, matrix.determinant()); + + //2x2 + matrix = new BigIntegerMatrix(grid2); + assertEquals("BigIntegerMatrix 2x2 failed determinant1.", BigInteger.ZERO, matrix.determinant()); + matrix = new BigIntegerMatrix(new BigInteger[][]{ + {BigInteger.ONE, BigInteger.valueOf(4)}, + {BigInteger.valueOf(4), BigInteger.ONE} + }); + assertEquals("BigIntegerMatrix 2x2 failed determinant2.", BigInteger.valueOf(-15), matrix.determinant()); + + //3x3 + matrix = new BigIntegerMatrix(grid3); + assertEquals("BigIntegerMatrix 3x3 failed determinant1.", 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("BigIntegerMatrix 3x3 failed determinant2.", BigInteger.valueOf(-21), matrix.determinant()); + + //4x4 + matrix = new BigIntegerMatrix(grid4); + assertEquals("BigIntegerMatrix 4x4 failed determiant1.", 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("BigIntegerMatrix 4x4 failed determinant2.", BigInteger.valueOf(160), matrix.determinant()); + + //10x10 + matrix = new BigIntegerMatrix(grid10); + assertEquals("BigIntegerMatrix 10x10 failed determinant1.", 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("BigIntegerMatrix 10x10 failed determinant2.", BigInteger.valueOf(-10000000), matrix.determinant()); + } + + @Test + public void testCofactor(){ + //1x1 + BigIntegerMatrix matrix = new BigIntegerMatrix(grid1); + BigIntegerMatrix correctMatrix = new BigIntegerMatrix(grid1); + assertEquals("BigIntegerMatrix 1x1 failed cofactor.", correctMatrix, matrix.cofactor()); + + //2x2 + matrix = new BigIntegerMatrix(grid2); + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{ + {BigInteger.TWO, BigInteger.ONE.negate()}, + {BigInteger.TWO.negate(), BigInteger.ONE} + }); + assertEquals("BigIntegerMatrix 2x2 failed cofactor.", correctMatrix, matrix.cofactor()); + + //3x3 + matrix = new BigIntegerMatrix(grid3); + correctMatrix = new BigIntegerMatrix(3, 3, BigInteger.ZERO); + assertEquals("BigIntegerMatrix 3x3 failed cofactor1.", 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("BigIntegerMatrix 3x3 failed cofactor2.", correctMatrix, matrix.cofactor()); + + //4x4 + matrix = new BigIntegerMatrix(grid4); + correctMatrix = new BigIntegerMatrix(4, 4, BigInteger.ZERO); + assertEquals("BigIntegerMatrix 4x4 failed cofactor1.", 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("BigIntegerMatrix 4x4 failed cofactor2.", 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("BigIntegerMatrix 1x1 failed power.", correctMatrix, matrix.pow(3)); + + //2x2 + matrix = new BigIntegerMatrix(grid2); + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{ + {BigInteger.valueOf(9), BigInteger.valueOf(18)}, + {BigInteger.valueOf(9), BigInteger.valueOf(18)} + }); + assertEquals("BigIntegerMatrix 2x2 failed power.", 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("BigIntegerMatrix 3x3 failed power.", 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("BigIntegerMatrix 4x4 failed power 0.", 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("BigIntegerMatrix 4x4 failed power 1.", 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("BigIntegerMatrix 4x4 failed power 3.", 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("BigIntegerMatrix 10x10 failed power.", correctMatrix, matrix.pow(3)); + } + + @Test + public void testAdjoint(){ + //1x1 + BigIntegerMatrix matrix = new BigIntegerMatrix(grid1); + BigIntegerMatrix correctMatrix = new BigIntegerMatrix(grid1); + assertEquals("BigIntegerMatrix 1x1 failed adjoint.", correctMatrix, matrix.adjoint()); + + //2x2 + matrix = new BigIntegerMatrix(grid2); + correctMatrix = new BigIntegerMatrix(new BigInteger[][]{ + {BigInteger.TWO, BigInteger.TWO.negate()}, + {BigInteger.ONE.negate(), BigInteger.ONE} + }); + assertEquals("BigIntegerMatrix 2x2 failed adjoint.", correctMatrix, matrix.adjoint()); + + //3x3 + matrix = new BigIntegerMatrix(grid3); + correctMatrix = new BigIntegerMatrix(3, 3, BigInteger.ZERO); + assertEquals("BigIntegerMatrix 3x3 failed adjoint.", 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("BigIntegerMatrix 4x4 failed adjoint.", 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("BigIntegerMatrix 1x1 failed inverse.", correctMatrix, matrix.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("BigIntegerMatrix 2x2 failed inverse.", 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("BigIntegerMatrix 3x3 failed inverse.", 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("BigIntegerMatrix 4x4 failed inverse.", correctMatrix, matrix.inverse()); + + //10x10 + //?Skipped 10x10 because it would take a long time to compute + } +}