/*
* $Id$
* This file is a part of the Arakhne Foundation Classes, http://www.arakhne.org/afc
*
* Copyright (c) 2000-2012 Stephane GALLAND.
* Copyright (c) 2005-10, Multiagent Team, Laboratoire Systemes et Transports,
* Universite de Technologie de Belfort-Montbeliard.
* Copyright (c) 2013-2016 The original authors, and other authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.arakhne.afc.math.matrix;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Rule;
import org.junit.Test;
import org.arakhne.afc.math.AbstractMathTestCase;
import org.arakhne.afc.math.geometry.coordinatesystem.CoordinateSystem2DTestRule;
@SuppressWarnings("all")
public class Matrix4dTest extends AbstractMathTestCase{
@Rule
public CoordinateSystem2DTestRule csTestRule = new CoordinateSystem2DTestRule();
@Test
public void setIdentity() {
Matrix4d matrix = this.randomMatrix4f();
matrix.setIdentity();
assertEpsilonEquals(new Matrix4d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1), matrix);
}
@Test
public void addDouble() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = m1.clone();
double s = getRandom().nextDouble();
m2.set(m2.m00+s, m2.m01+s, m2.m02+s, m2.m03+s, m2.m10+s, m2.m11+s, m2.m12+s, m2.m13+s, m2.m20+s, m2.m21+s, m2.m22+s, m2.m23+s, m2.m30+s, m2.m31+s, m2.m32+s, m2.m33+s);
m1.add(s);
assertEpsilonEquals(m2, m1);
}
@Test
public void addDoubleMatrix4D() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = m1.clone();
double s = getRandom().nextDouble();
m2.set(m2.m00+s, m2.m01+s, m2.m02+s, m2.m03+s, m2.m10+s, m2.m11+s, m2.m12+s, m2.m13+s, m2.m20+s, m2.m21+s, m2.m22+s, m2.m23+s, m2.m30+s, m2.m31+s, m2.m32+s, m2.m33+s);
m1.add(s,m1);
assertEpsilonEquals(m2, m1);
}
@Test
public void addMatrix4DMatrix4D() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = this.randomMatrix4f();
Matrix4d m3 = m2.clone();
m2.set(m2.m00+m1.m00, m2.m01+m1.m01, m2.m02+m1.m02, m2.m03+m1.m03, m2.m10+m1.m10, m2.m11+m1.m11, m2.m12+m1.m12, m2.m13+m1.m13, m2.m20+m1.m20, m2.m21+m1.m21, m2.m22+m1.m22, m2.m23+m1.m23, m2.m30+m1.m30, m2.m31+m1.m31, m2.m32+m1.m32, m2.m33+m1.m33);
m3.add(m1,m3);
assertEpsilonEquals(m2, m3);
}
@Test
public void addMatrix4D() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = this.randomMatrix4f();
Matrix4d m3 = m2.clone();
m2.set(m2.m00+m1.m00, m2.m01+m1.m01, m2.m02+m1.m02, m2.m03+m1.m03, m2.m10+m1.m10, m2.m11+m1.m11, m2.m12+m1.m12, m2.m13+m1.m13, m2.m20+m1.m20, m2.m21+m1.m21, m2.m22+m1.m22, m2.m23+m1.m23, m2.m30+m1.m30, m2.m31+m1.m31, m2.m32+m1.m32, m2.m33+m1.m33);
m3.add(m1);
assertEpsilonEquals(m2, m3);
}
@Test
public void subMatrix4DMatrix4D() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = this.randomMatrix4f();
Matrix4d m3 = m2.clone();
m2.set(m2.m00-m1.m00, m2.m01-m1.m01, m2.m02-m1.m02, m2.m03-m1.m03, m2.m10-m1.m10, m2.m11-m1.m11, m2.m12-m1.m12, m2.m13-m1.m13, m2.m20-m1.m20, m2.m21-m1.m21, m2.m22-m1.m22, m2.m23-m1.m23, m2.m30-m1.m30, m2.m31-m1.m31, m2.m32-m1.m32, m2.m33-m1.m33);
m3.sub(m3,m1);
assertEpsilonEquals(m2, m3);
}
@Test
public void subMatrix4D() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = this.randomMatrix4f();
Matrix4d m3 = m2.clone();
m2.set(m2.m00-m1.m00, m2.m01-m1.m01, m2.m02-m1.m02, m2.m03-m1.m03, m2.m10-m1.m10, m2.m11-m1.m11, m2.m12-m1.m12, m2.m13-m1.m13, m2.m20-m1.m20, m2.m21-m1.m21, m2.m22-m1.m22, m2.m23-m1.m23, m2.m30-m1.m30, m2.m31-m1.m31, m2.m32-m1.m32, m2.m33-m1.m33);
m3.sub(m1);
assertEpsilonEquals(m2, m3);
}
@Test
public void transpose() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d transpose = new Matrix4d();
double [] v = new double[4];
m1.getRow(0, v);
transpose.setColumn(0, v);
m1.getRow(1, v);
transpose.setColumn(1, v);
m1.getRow(2, v);
transpose.setColumn(2, v);
m1.getRow(3, v);
transpose.setColumn(3, v);
m1.transpose();
assertEpsilonEquals(transpose, m1);
}
@Test
public void transposeMatrix4D() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d transpose = new Matrix4d();
double [] v = new double[4];
m1.getRow(0, v);
transpose.setColumn(0, v);
m1.getRow(1, v);
transpose.setColumn(1, v);
m1.getRow(2, v);
transpose.setColumn(2, v);
m1.getRow(3, v);
transpose.setColumn(3, v);
m1.transpose(m1);
assertEpsilonEquals(transpose, m1);
}
@Test
public void determinant() {
double a = getRandom().nextDouble()*50;
double b = getRandom().nextDouble()*50;
double c = getRandom().nextDouble()*50;
double d = getRandom().nextDouble()*50;
double e = getRandom().nextDouble()*50;
double f = getRandom().nextDouble()*50;
double g = getRandom().nextDouble()*50;
double h = getRandom().nextDouble()*50;
double i = getRandom().nextDouble()*50;
double j = getRandom().nextDouble()*50;
double k = getRandom().nextDouble()*50;
double l = getRandom().nextDouble()*50;
double m = getRandom().nextDouble()*50;
double n = getRandom().nextDouble()*50;
double o = getRandom().nextDouble()*50;
double p = getRandom().nextDouble()*50;
Matrix4d m1 = new Matrix4d(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p);
double determinant = a *(l* (g* n-f* o)+k *(f* p-h* n)+j *(h* o-g* p))+i *(b *(g *p-h *o)+c *(h* n-f* p)+d *(f* o-g *n))+b *(l *(e *o-g* m)+k* (h* m-e* p))+j *(c* e *p-c *h *m+d *(g* m-e *o))+l *(c *f* m-c* e* n)+d* k* (e *n-f* m);
assertEpsilonEquals(determinant,m1.determinant());
}
@Test
public void mulDouble() {
double a = getRandom().nextDouble()*50;
double b = getRandom().nextDouble()*50;
double c = getRandom().nextDouble()*50;
double d = getRandom().nextDouble()*50;
double e = getRandom().nextDouble()*50;
double f = getRandom().nextDouble()*50;
double g = getRandom().nextDouble()*50;
double h = getRandom().nextDouble()*50;
double i = getRandom().nextDouble()*50;
double j = getRandom().nextDouble()*50;
double k = getRandom().nextDouble()*50;
double l = getRandom().nextDouble()*50;
double m = getRandom().nextDouble()*50;
double n = getRandom().nextDouble()*50;
double o = getRandom().nextDouble()*50;
double p = getRandom().nextDouble()*50;
Matrix4d m1 = new Matrix4d(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p);
double s = getRandom().nextDouble();
Matrix4d m2 = new Matrix4d(a*s,b*s,c*s,d*s,e*s,f*s,g*s,h*s,i*s,j*s,k*s,l*s,m*s,n*s,o*s,p*s);
m1.mul(s);
assertEpsilonEquals(m1, m2);
}
@Test
public void mulDoubleMatrix4D() {
double a = getRandom().nextDouble()*50;
double b = getRandom().nextDouble()*50;
double c = getRandom().nextDouble()*50;
double d = getRandom().nextDouble()*50;
double e = getRandom().nextDouble()*50;
double f = getRandom().nextDouble()*50;
double g = getRandom().nextDouble()*50;
double h = getRandom().nextDouble()*50;
double i = getRandom().nextDouble()*50;
double j = getRandom().nextDouble()*50;
double k = getRandom().nextDouble()*50;
double l = getRandom().nextDouble()*50;
double m = getRandom().nextDouble()*50;
double n = getRandom().nextDouble()*50;
double o = getRandom().nextDouble()*50;
double p = getRandom().nextDouble()*50;
Matrix4d m1 = new Matrix4d(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p);
double s = getRandom().nextDouble();
Matrix4d m2 = new Matrix4d(a*s,b*s,c*s,d*s,e*s,f*s,g*s,h*s,i*s,j*s,k*s,l*s,m*s,n*s,o*s,p*s);
m1.mul(s,m1);
assertEpsilonEquals(m1, m2);
}
@Test
public void mulMatrix4D() {
double a = getRandom().nextDouble()*50;
double b = getRandom().nextDouble()*50;
double c = getRandom().nextDouble()*50;
double d = getRandom().nextDouble()*50;
double e = getRandom().nextDouble()*50;
double f = getRandom().nextDouble()*50;
double g = getRandom().nextDouble()*50;
double h = getRandom().nextDouble()*50;
double i = getRandom().nextDouble()*50;
double j = getRandom().nextDouble()*50;
double k = getRandom().nextDouble()*50;
double l = getRandom().nextDouble()*50;
double m = getRandom().nextDouble()*50;
double n = getRandom().nextDouble()*50;
double o = getRandom().nextDouble()*50;
double p = getRandom().nextDouble()*50;
Matrix4d matrix1 = new Matrix4d(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p);
double a1 = getRandom().nextDouble()*50;
double b1 = getRandom().nextDouble()*50;
double c1 = getRandom().nextDouble()*50;
double d1 = getRandom().nextDouble()*50;
double e1 = getRandom().nextDouble()*50;
double f1 = getRandom().nextDouble()*50;
double g1 = getRandom().nextDouble()*50;
double h1 = getRandom().nextDouble()*50;
double i1 = getRandom().nextDouble()*50;
double j1 = getRandom().nextDouble()*50;
double k1 = getRandom().nextDouble()*50;
double l1 = getRandom().nextDouble()*50;
double m1 = getRandom().nextDouble()*50;
double n1 = getRandom().nextDouble()*50;
double o1 = getRandom().nextDouble()*50;
double p1 = getRandom().nextDouble()*50;
Matrix4d matrix2 = new Matrix4d(a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,o1,p1);
Matrix4d prod = new Matrix4d(
a*a1+b*e1+c*i1+d*m1,
a*b1+b*f1+c*j1+d*n1,
a*c1+b*g1+c*k1+d*o1,
a*d1+b*h1+c*l1+d*p1,
e*a1+f*e1+g*i1+h*m1,
e*b1+f*f1+g*j1+h*n1,
e*c1+f*g1+g*k1+h*o1,
e*d1+f*h1+g*l1+h*p1,
i*a1+j*e1+k*i1+l*m1,
i*b1+j*f1+k*j1+l*n1,
i*c1+j*g1+k*k1+l*o1,
i*d1+j*h1+k*l1+l*p1,
m*a1+n*e1+o*i1+p*m1,
m*b1+n*f1+o*j1+p*n1,
m*c1+n*g1+o*k1+p*o1,
m*d1+n*h1+o*l1+p*p1);
matrix1.mul(matrix2);
assertEpsilonEquals(matrix1, prod);
}
@Test
public void mulMatrix4DMatrix4D() {
double a = getRandom().nextDouble()*50;
double b = getRandom().nextDouble()*50;
double c = getRandom().nextDouble()*50;
double d = getRandom().nextDouble()*50;
double e = getRandom().nextDouble()*50;
double f = getRandom().nextDouble()*50;
double g = getRandom().nextDouble()*50;
double h = getRandom().nextDouble()*50;
double i = getRandom().nextDouble()*50;
double j = getRandom().nextDouble()*50;
double k = getRandom().nextDouble()*50;
double l = getRandom().nextDouble()*50;
double m = getRandom().nextDouble()*50;
double n = getRandom().nextDouble()*50;
double o = getRandom().nextDouble()*50;
double p = getRandom().nextDouble()*50;
Matrix4d matrix1 = new Matrix4d(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p);
double a1 = getRandom().nextDouble()*50;
double b1 = getRandom().nextDouble()*50;
double c1 = getRandom().nextDouble()*50;
double d1 = getRandom().nextDouble()*50;
double e1 = getRandom().nextDouble()*50;
double f1 = getRandom().nextDouble()*50;
double g1 = getRandom().nextDouble()*50;
double h1 = getRandom().nextDouble()*50;
double i1 = getRandom().nextDouble()*50;
double j1 = getRandom().nextDouble()*50;
double k1 = getRandom().nextDouble()*50;
double l1 = getRandom().nextDouble()*50;
double m1 = getRandom().nextDouble()*50;
double n1 = getRandom().nextDouble()*50;
double o1 = getRandom().nextDouble()*50;
double p1 = getRandom().nextDouble()*50;
Matrix4d matrix2 = new Matrix4d(a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,o1,p1);
Matrix4d prod = new Matrix4d(
a*a1+b*e1+c*i1+d*m1,
a*b1+b*f1+c*j1+d*n1,
a*c1+b*g1+c*k1+d*o1,
a*d1+b*h1+c*l1+d*p1,
e*a1+f*e1+g*i1+h*m1,
e*b1+f*f1+g*j1+h*n1,
e*c1+f*g1+g*k1+h*o1,
e*d1+f*h1+g*l1+h*p1,
i*a1+j*e1+k*i1+l*m1,
i*b1+j*f1+k*j1+l*n1,
i*c1+j*g1+k*k1+l*o1,
i*d1+j*h1+k*l1+l*p1,
m*a1+n*e1+o*i1+p*m1,
m*b1+n*f1+o*j1+p*n1,
m*c1+n*g1+o*k1+p*o1,
m*d1+n*h1+o*l1+p*p1);
matrix1.mul(matrix1,matrix2);
assertEpsilonEquals(matrix1, prod);
}
@Test
public void equals() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = new Matrix4d(m1);
assertEpsilonEquals(m1, m2);
}
@Test
public void setZero() {
Matrix4d m1 = this.randomMatrix4f();
m1.setZero();
assertEpsilonEquals(new Matrix4d(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), m1);
}
@Test
public void setDiagonalDoubleDoubleDoubleDouble() {
Matrix4d m1 = this.randomMatrix4f();
double a = getRandom().nextDouble();
double b = getRandom().nextDouble();
double c = getRandom().nextDouble();
double d = getRandom().nextDouble();
m1.setDiagonal(a,b,c,d);
assertEpsilonEquals(new Matrix4d(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,d), m1);
}
@Test
public void negate() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = m1.clone();
m2.negate();
m2.add(m1, m2);
m1.setZero();
assertEpsilonEquals(m2, m1);
}
@Test
public void negateMatrix4D() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = m1.clone();
m2.negate(m2);
m2.add(m1, m2);
m1.setZero();
assertEpsilonEquals(m2, m1);
}
@Test
public void testClone() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = m1.clone();
Matrix4d m3 = new Matrix4d(m1);
assertEpsilonEquals(m2, m1);
assertEpsilonEquals(m3, m1);
assertEpsilonEquals(m2, m3);
}
@Test
public void isSymmetric() {
double a = getRandom().nextDouble();
double b = getRandom().nextDouble();
double c = getRandom().nextDouble();
double d = getRandom().nextDouble();
double e = getRandom().nextDouble();
double f = getRandom().nextDouble();
double g = getRandom().nextDouble();
double h = getRandom().nextDouble();
double i = getRandom().nextDouble();
double j = getRandom().nextDouble();
Matrix4d m1 = new Matrix4d(a,b,c,d,b,e,f,g,c,f,h,i,d,g,i,j);
assertTrue(m1.isSymmetric());
m1.setM01(j);
assertFalse(m1.isSymmetric());
}
@Test
public void isIdentity() {
Matrix4d m1 = this.randomMatrix4f();
m1.setIdentity();
assertTrue(m1.isIdentity());
m1.setZero();
assertFalse(m1.isIdentity());
}
@Test
public void operator_addMatrix4f() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = this.randomMatrix4f();
Matrix4d m3 = m2.clone();
m2.set(m2.m00+m1.m00, m2.m01+m1.m01, m2.m02+m1.m02, m2.m03+m1.m03, m2.m10+m1.m10, m2.m11+m1.m11, m2.m12+m1.m12, m2.m13+m1.m13, m2.m20+m1.m20, m2.m21+m1.m21, m2.m22+m1.m22, m2.m23+m1.m23, m2.m30+m1.m30, m2.m31+m1.m31, m2.m32+m1.m32, m2.m33+m1.m33);
m3.operator_add(m1);
assertEpsilonEquals(m2, m3);
}
@Test
public void operator_addDouble() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = m1.clone();
double s = getRandom().nextDouble();
m2.set(m2.m00+s, m2.m01+s, m2.m02+s, m2.m03+s, m2.m10+s, m2.m11+s, m2.m12+s, m2.m13+s, m2.m20+s, m2.m21+s, m2.m22+s, m2.m23+s, m2.m30+s, m2.m31+s, m2.m32+s, m2.m33+s);
m1.operator_add(s);
assertEpsilonEquals(m2, m1);
}
@Test
public void operator_removeMatrix4f() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = this.randomMatrix4f();
Matrix4d m3 = m2.clone();
m2.set(m2.m00-m1.m00, m2.m01-m1.m01, m2.m02-m1.m02, m2.m03-m1.m03, m2.m10-m1.m10, m2.m11-m1.m11, m2.m12-m1.m12, m2.m13-m1.m13, m2.m20-m1.m20, m2.m21-m1.m21, m2.m22-m1.m22, m2.m23-m1.m23, m2.m30-m1.m30, m2.m31-m1.m31, m2.m32-m1.m32, m2.m33-m1.m33);
m3.operator_remove(m1);
assertEpsilonEquals(m2, m3);
}
@Test
public void operator_removeDouble() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = m1.clone();
double s = getRandom().nextDouble();
m2.set(m2.m00-s, m2.m01-s, m2.m02-s, m2.m03-s, m2.m10-s, m2.m11-s, m2.m12-s, m2.m13-s, m2.m20-s, m2.m21-s, m2.m22-s, m2.m23-s, m2.m30-s, m2.m31-s, m2.m32-s, m2.m33-s);
m1.operator_remove(s);
assertEpsilonEquals(m2, m1);
}
@Test
public void operator_plusMatrix4f() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = this.randomMatrix4f();
Matrix4d m3 = m2.clone();
m2.set(m2.m00+m1.m00, m2.m01+m1.m01, m2.m02+m1.m02, m2.m03+m1.m03, m2.m10+m1.m10, m2.m11+m1.m11, m2.m12+m1.m12, m2.m13+m1.m13, m2.m20+m1.m20, m2.m21+m1.m21, m2.m22+m1.m22, m2.m23+m1.m23, m2.m30+m1.m30, m2.m31+m1.m31, m2.m32+m1.m32, m2.m33+m1.m33);
Matrix4d r = m3.operator_plus(m1);
assertEpsilonEquals(m2, r);
}
@Test
public void operator_plusDouble() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = m1.clone();
double s = getRandom().nextDouble();
m2.set(m2.m00+s, m2.m01+s, m2.m02+s, m2.m03+s, m2.m10+s, m2.m11+s, m2.m12+s, m2.m13+s, m2.m20+s, m2.m21+s, m2.m22+s, m2.m23+s, m2.m30+s, m2.m31+s, m2.m32+s, m2.m33+s);
Matrix4d r = m1.operator_plus(s);
assertEpsilonEquals(m2, r);
}
@Test
public void operator_minusMatrix4f() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = this.randomMatrix4f();
Matrix4d m3 = m2.clone();
m2.set(m2.m00-m1.m00, m2.m01-m1.m01, m2.m02-m1.m02, m2.m03-m1.m03, m2.m10-m1.m10, m2.m11-m1.m11, m2.m12-m1.m12, m2.m13-m1.m13, m2.m20-m1.m20, m2.m21-m1.m21, m2.m22-m1.m22, m2.m23-m1.m23, m2.m30-m1.m30, m2.m31-m1.m31, m2.m32-m1.m32, m2.m33-m1.m33);
Matrix4d r = m3.operator_minus(m1);
assertEpsilonEquals(m2, r);
}
@Test
public void operator_minusDouble() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = m1.clone();
double s = getRandom().nextDouble();
m2.set(m2.m00-s, m2.m01-s, m2.m02-s, m2.m03-s, m2.m10-s, m2.m11-s, m2.m12-s, m2.m13-s, m2.m20-s, m2.m21-s, m2.m22-s, m2.m23-s, m2.m30-s, m2.m31-s, m2.m32-s, m2.m33-s);
Matrix4d r = m1.operator_minus(s);
assertEpsilonEquals(m2, r);
}
@Test
public void operator_minus() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = m1.clone();
m2.set(-m2.m00, -m2.m01, -m2.m02, -m2.m03, -m2.m10, -m2.m11, -m2.m12, -m2.m13, -m2.m20, -m2.m21, -m2.m22, -m2.m23, -m2.m30, -m2.m31, -m2.m32, -m2.m33);
Matrix4d r = m1.operator_minus();
assertEpsilonEquals(m2, r);
}
@Test
public void operator_multiplyMatrix3f() {
double a = getRandom().nextDouble()*50;
double b = getRandom().nextDouble()*50;
double c = getRandom().nextDouble()*50;
double d = getRandom().nextDouble()*50;
double e = getRandom().nextDouble()*50;
double f = getRandom().nextDouble()*50;
double g = getRandom().nextDouble()*50;
double h = getRandom().nextDouble()*50;
double i = getRandom().nextDouble()*50;
double j = getRandom().nextDouble()*50;
double k = getRandom().nextDouble()*50;
double l = getRandom().nextDouble()*50;
double m = getRandom().nextDouble()*50;
double n = getRandom().nextDouble()*50;
double o = getRandom().nextDouble()*50;
double p = getRandom().nextDouble()*50;
Matrix4d matrix1 = new Matrix4d(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p);
double a1 = getRandom().nextDouble()*50;
double b1 = getRandom().nextDouble()*50;
double c1 = getRandom().nextDouble()*50;
double d1 = getRandom().nextDouble()*50;
double e1 = getRandom().nextDouble()*50;
double f1 = getRandom().nextDouble()*50;
double g1 = getRandom().nextDouble()*50;
double h1 = getRandom().nextDouble()*50;
double i1 = getRandom().nextDouble()*50;
double j1 = getRandom().nextDouble()*50;
double k1 = getRandom().nextDouble()*50;
double l1 = getRandom().nextDouble()*50;
double m1 = getRandom().nextDouble()*50;
double n1 = getRandom().nextDouble()*50;
double o1 = getRandom().nextDouble()*50;
double p1 = getRandom().nextDouble()*50;
Matrix4d matrix2 = new Matrix4d(a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,o1,p1);
Matrix4d prod = new Matrix4d(
a*a1+b*e1+c*i1+d*m1,
a*b1+b*f1+c*j1+d*n1,
a*c1+b*g1+c*k1+d*o1,
a*d1+b*h1+c*l1+d*p1,
e*a1+f*e1+g*i1+h*m1,
e*b1+f*f1+g*j1+h*n1,
e*c1+f*g1+g*k1+h*o1,
e*d1+f*h1+g*l1+h*p1,
i*a1+j*e1+k*i1+l*m1,
i*b1+j*f1+k*j1+l*n1,
i*c1+j*g1+k*k1+l*o1,
i*d1+j*h1+k*l1+l*p1,
m*a1+n*e1+o*i1+p*m1,
m*b1+n*f1+o*j1+p*n1,
m*c1+n*g1+o*k1+p*o1,
m*d1+n*h1+o*l1+p*p1);
Matrix4d r = matrix1.operator_multiply(matrix2);
assertEpsilonEquals(prod, r);
}
@Test
public void operator_multiplyDouble() {
double a = getRandom().nextDouble()*50;
double b = getRandom().nextDouble()*50;
double c = getRandom().nextDouble()*50;
double d = getRandom().nextDouble()*50;
double e = getRandom().nextDouble()*50;
double f = getRandom().nextDouble()*50;
double g = getRandom().nextDouble()*50;
double h = getRandom().nextDouble()*50;
double i = getRandom().nextDouble()*50;
double j = getRandom().nextDouble()*50;
double k = getRandom().nextDouble()*50;
double l = getRandom().nextDouble()*50;
double m = getRandom().nextDouble()*50;
double n = getRandom().nextDouble()*50;
double o = getRandom().nextDouble()*50;
double p = getRandom().nextDouble()*50;
Matrix4d m1 = new Matrix4d(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p);
double s = getRandom().nextDouble();
Matrix4d m2 = new Matrix4d(a*s,b*s,c*s,d*s,e*s,f*s,g*s,h*s,i*s,j*s,k*s,l*s,m*s,n*s,o*s,p*s);
Matrix4d result = m1.operator_multiply(s);
assertEpsilonEquals(m2, result);
}
@Test
public void operator_divideDouble() {
double a = getRandom().nextDouble()*50;
double b = getRandom().nextDouble()*50;
double c = getRandom().nextDouble()*50;
double d = getRandom().nextDouble()*50;
double e = getRandom().nextDouble()*50;
double f = getRandom().nextDouble()*50;
double g = getRandom().nextDouble()*50;
double h = getRandom().nextDouble()*50;
double i = getRandom().nextDouble()*50;
double j = getRandom().nextDouble()*50;
double k = getRandom().nextDouble()*50;
double l = getRandom().nextDouble()*50;
double m = getRandom().nextDouble()*50;
double n = getRandom().nextDouble()*50;
double o = getRandom().nextDouble()*50;
double p = getRandom().nextDouble()*50;
Matrix4d m1 = new Matrix4d(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p);
double s = getRandom().nextDouble() * 50 + 2;
Matrix4d m2 = new Matrix4d(a/s,b/s,c/s,d/s,e/s,f/s,g/s,h/s,i/s,j/s,k/s,l/s,m/s,n/s,o/s,p/s);
Matrix4d result = m1.operator_divide(s);
assertEpsilonEquals(m2, result);
}
@Test
public void operator_plusPlus() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = m1.clone();
m2.set(m2.m00+1, m2.m01+1, m2.m02+1, m2.m03+1, m2.m10+1, m2.m11+1, m2.m12+1, m2.m13+1, m2.m20+1, m2.m21+1, m2.m22+1, m2.m23+1, m2.m30+1, m2.m31+1, m2.m32+1, m2.m33+1);
m1.operator_plusPlus();
assertEpsilonEquals(m2, m1);
}
@Test
public void operator_moinsMoins() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = m1.clone();
m2.set(m2.m00-1, m2.m01-1, m2.m02-1, m2.m03-1, m2.m10-1, m2.m11-1, m2.m12-1, m2.m13-1, m2.m20-1, m2.m21-1, m2.m22-1, m2.m23-1, m2.m30-1, m2.m31-1, m2.m32-1, m2.m33-1);
m1.operator_moinsMoins();
assertEpsilonEquals(m2, m1);
}
@Test
public void operator_not() {
Matrix4d m1 = this.randomMatrix4f();
Matrix4d m2 = m1.clone();
m2.set(
m2.m00, m2.m10, m2.m20, m2.m30,
m2.m01, m2.m11, m2.m21, m2.m31,
m2.m02, m2.m12, m2.m22, m2.m32,
m2.m03, m2.m13, m2.m23, m2.m33);
Matrix4d r = m1.operator_not();
assertEpsilonEquals(m2, r);
}
}