public void MatrixMultiplyMatrixMatrixInvalidDimensions(IMatrixArithmetic arithmetic)
        {
            Matrix.Arithmetic = arithmetic;
            Matrix testMatrix1 = Setup.GetTestMatrix1();
            Matrix testMatrix2 = Setup.GetTestMatrix2();

            Assert.Throws <InvalidMatrixDimensionsException>(() => Matrix.Multiply(testMatrix1, testMatrix2));
            Matrix m1 = new Matrix(testMatrix1);

            Assert.Throws <InvalidMatrixDimensionsException>(() => testMatrix1 * testMatrix2);
            Assert.Throws <InvalidMatrixDimensionsException>(() => testMatrix1.Multiply(testMatrix2));
        }
        public void MatrixAddMatrixMatrixInvalidDimensions(IMatrixArithmetic arithmetic)
        {
            Matrix.Arithmetic = arithmetic;
            Matrix testMatrix1 = Setup.GetTestMatrix1();
            Matrix testMatrix2 = Setup.GetTestMatrix2();
            Matrix testMatrix3 = Setup.GetTestMatrix3();

            Assert.Throws <InvalidMatrixDimensionsException>(() => Matrix.Add(testMatrix1, testMatrix3));
            Matrix m1 = new Matrix(testMatrix1);

            Assert.Throws <InvalidMatrixDimensionsException>(() => m1.Add(testMatrix3));
            Assert.Throws <InvalidMatrixDimensionsException>(() => testMatrix1 + testMatrix3);
        }
        public void MatrixMultiplyTransposeByMatrixMatrix()
        {
            Matrix m1       = Matrix.Transpose(Setup.GetTestMatrix1());
            Matrix m2       = Setup.GetTestMatrix2();
            Matrix expected = m1 * m2;

            Matrix test1 = Matrix.MultiplyTransposeBy(Setup.GetTestMatrix1(), m2);
            Matrix test2 = Setup.GetTestMatrix1();

            test2.MultiplyTransposeBy(Setup.GetTestMatrix2());

            Assert.True(test1 == expected);
            Assert.True(test2 == expected);
        }
        public void MatrixSubtractMatrixMatrix(IMatrixArithmetic arithmetic)
        {
            Matrix.Arithmetic = arithmetic;
            Matrix testMatrix1 = Setup.GetTestMatrix1();
            Matrix testMatrix2 = Setup.GetTestMatrix2();

            Matrix m1       = Matrix.Subtract(testMatrix2, testMatrix1);
            Matrix m2       = new Matrix(testMatrix2); m2.Subtract(testMatrix1);
            Matrix m3       = testMatrix2 - testMatrix1;
            Matrix expected = new Matrix(new double[, ] {
                { 6.0, 6.0, 6.0 }, { 6.0, 6.0, 6.0 }
            });

            Assert.Equal(expected, m1);
            Assert.Equal(expected, m2);
            Assert.Equal(expected, m3);
        }
        public void MatrixAddMatrixMatrix(IMatrixArithmetic arithmetic)
        {
            Matrix.Arithmetic = arithmetic;
            Matrix testMatrix1 = Setup.GetTestMatrix1();
            Matrix testMatrix2 = Setup.GetTestMatrix2();

            Matrix m1 = Matrix.Add(testMatrix1, testMatrix2);
            Matrix m2 = new Matrix(testMatrix1);

            m2.Add(testMatrix2);
            Matrix m3       = testMatrix1 + testMatrix2;
            Matrix expected = new Matrix(new double[, ] {
                { 8.0, 10.0, 12.0 }, { 14.0, 16.0, 18.0 }
            });

            Assert.Equal(expected, m1);
            Assert.Equal(expected, m2);
            Assert.Equal(expected, m3);
        }