22 #include "testing/testing.h"
24 using namespace libmv;
28 TEST(Numeric, DynamicSizedNullspace) {
31 A << 0.76026643, 0.01799744, 0.55192142, 0.8699745,
32 0.42016166, 0.97863392, 0.33711682, 0.14479271,
33 0.51016811, 0.66528302, 0.54395496, 0.57794893;
37 EXPECT_NEAR(0.0, s, 1
e-15);
38 EXPECT_NEAR(0.0, (A *
x).
norm(), 1
e-15);
39 EXPECT_NEAR(1.0,
x.norm(), 1
e-15);
42 TEST(Numeric, FixedSizeMatrixNullspace) {
45 A << 0.76026643, 0.01799744, 0.55192142, 0.8699745,
46 0.42016166, 0.97863392, 0.33711682, 0.14479271,
47 0.51016811, 0.66528302, 0.54395496, 0.57794893;
51 EXPECT_NEAR(0.0, s, 1
e-15);
52 EXPECT_NEAR(0.0, (A *
x).
norm(), 1
e-15);
53 EXPECT_NEAR(1.0,
x.norm(), 1
e-15);
56 TEST(Numeric, NullspaceMatchesLapackSVD) {
59 A << 0.76026643, 0.01799744, 0.55192142,
60 0.8699745, 0.42016166, 0.97863392,
61 0.33711682, 0.14479271, 0.51016811,
62 0.66528302, 0.54395496, 0.57794893;
66 EXPECT_NEAR(1.0,
x.norm(), 1
e-15);
67 EXPECT_NEAR(0.206694992663, s, 1
e-9);
68 EXPECT_NEAR(0.206694992663, (A *
x).
norm(), 1
e-9);
70 EXPECT_NEAR(-0.64999717,
x(0), 1
e-8);
71 EXPECT_NEAR(-0.18452646,
x(1), 1
e-8);
72 EXPECT_NEAR(0.7371931,
x(2), 1
e-8);
78 A << 0.76026643, 0.01799744, 0.55192142,
79 0.8699745, 0.42016166, 0.97863392,
80 0.33711682, 0.14479271, 0.51016811,
81 0.66528302, 0.54395496, 0.57794893;
85 EXPECT_NEAR(1.0, x1.norm(), 1
e-15);
86 EXPECT_NEAR(0.206694992663, s, 1
e-9);
87 EXPECT_NEAR(0.206694992663, (A * x1).
norm(), 1
e-9);
89 EXPECT_NEAR(-0.64999717, x1(0), 1
e-8);
90 EXPECT_NEAR(-0.18452646, x1(1), 1
e-8);
91 EXPECT_NEAR(0.7371931, x1(2), 1
e-8);
96 EXPECT_NEAR(0.34679618,
x2(0), 1
e-8);
97 EXPECT_NEAR(-0.93519689,
x2(1), 1
e-8);
98 EXPECT_NEAR(0.07168809,
x2(2), 1
e-8);
101 TEST(Numeric, TinyMatrixSquareTranspose) {
103 A << 1.0, 2.0, 3.0, 4.0;
115 EXPECT_DOUBLE_EQ(3., l1);
116 EXPECT_DOUBLE_EQ(1. / 3.,
x(0));
117 EXPECT_DOUBLE_EQ(2. / 3.,
x(1));
124 EXPECT_DOUBLE_EQ(
sqrt(5.0), l2);
125 EXPECT_DOUBLE_EQ(1. /
sqrt(5.),
x(0));
126 EXPECT_DOUBLE_EQ(2. /
sqrt(5.),
x(1));
139 TEST(Numeric, Determinant) {
142 double detA =
A.determinant();
143 EXPECT_NEAR(5, detA, 1
e-8);
152 double detB =
B.determinant();
153 EXPECT_NEAR(0, detB, 1
e-8);
156 C << 0, 1, 2, 3, 4, 5, 6, 7, 1;
157 double detC =
C.determinant();
158 EXPECT_NEAR(21, detC, 1
e-8);
161 TEST(Numeric, Inverse) {
169 EXPECT_NEAR(1,
I(0, 0), 1
e-8);
170 EXPECT_NEAR(0,
I(0, 1), 1
e-8);
171 EXPECT_NEAR(0,
I(1, 0), 1
e-8);
172 EXPECT_NEAR(1,
I(1, 1), 1
e-8);
181 Mat I2 =
B *
B.inverse();
182 EXPECT_NEAR(1, I2(0, 0), 1
e-8);
183 EXPECT_NEAR(0, I2(0, 1), 1
e-8);
184 EXPECT_NEAR(0, I2(0, 2), 1
e-8);
185 EXPECT_NEAR(0, I2(1, 0), 1
e-8);
186 EXPECT_NEAR(1, I2(1, 1), 1
e-8);
187 EXPECT_NEAR(0, I2(1, 2), 1
e-8);
188 EXPECT_NEAR(0, I2(2, 0), 1
e-8);
189 EXPECT_NEAR(0, I2(2, 1), 1
e-8);
190 EXPECT_NEAR(1, I2(2, 2), 1
e-8);
197 points << 0, 0, 1, 1,
204 EXPECT_NEAR(0.5, mean(0), 1
e-8);
205 EXPECT_NEAR(1.5, mean(1), 1
e-8);
206 EXPECT_NEAR(0.25, variance(0), 1
e-8);
207 EXPECT_NEAR(1.25, variance(1), 1
e-8);
226 Mat x(2, 1),
y(2, 1),
z(2, 2);
236 EXPECT_MATRIX_EQ(
z,
xy);
241 EXPECT_MATRIX_EQ(
z,
HStack(xC, yC));
247 Mat x(2, 2),
y(2, 2),
z(4, 2);
261 EXPECT_MATRIX_EQ(
z,
xy);
266 EXPECT_MATRIX_EQ(
z,
VStack(xC, yC));
305 Xty =
X.transpose() *
y;
349 TEST(Numeric, TinyMatrixView) {
351 Mat K =
P.block(0, 0, 3, 3);
355 TEST(Numeric, Mat3MatProduct) {
362 TEST(Numeric, Vec3Negative) {
372 TEST(Numeric, Vec3VecInteroperability) {
382 TEST(Numeric, DeterminantLU7) {
391 EXPECT_NEAR(1,
A.determinant(), 1
e-8);
395 TEST(Numeric, DeterminantLU) {
401 EXPECT_NEAR(5,
A.determinant(), 1
e-8);
406 TEST(Numeric, InplaceProduct) {
415 EXPECT_MATRIX_NEAR(Mat2::Identity(),
K, 1
e-8);
427 EXPECT_NEAR(1, extracted(0, 0), 1
e-15);
428 EXPECT_NEAR(3, extracted(0, 1), 1
e-15);
429 EXPECT_NEAR(6, extracted(1, 0), 1
e-15);
430 EXPECT_NEAR(8, extracted(1, 1), 1
e-15);
447 EXPECT_MATRIX_NEAR(Rx, rodrigues_x, 1
e-15);
448 EXPECT_MATRIX_NEAR(Ry, rodrigues_y, 1
e-15);
449 EXPECT_MATRIX_NEAR(Rz, rodrigues_z, 1
e-15);
457 Mat3 RRT =
R *
R.transpose();
458 Mat3 RTR =
R.transpose() *
R;
460 EXPECT_MATRIX_NEAR(
I, RRT, 1
e-15);
461 EXPECT_MATRIX_NEAR(
I, RTR, 1
e-15);
464 TEST(Numeric, Reshape) {
469 M_expected << 1, 2, 3, 4;
470 EXPECT_MATRIX_NEAR(M_expected,
M, 1
e-15);
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble z
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble x2
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
SIMD_FORCE_INLINE btScalar norm() const
Return the norm (length) of the vector.
static double B1(double u)
double DistanceLInfinity(const TVec &x, const TVec &y)
double Nullspace(TMat *A, TVec *nullspace)
Mat3 CrossProductMatrix(const Vec3 &x)
void TransposeInPlace(TA *A)
void VerticalStack(const TTop &top, const TBot &bottom, TStacked *stacked)
double NormalizeL1(TVec *x)
Mat3 RotationAroundX(double angle)
Eigen::Matrix< T, ROWS, COLS > HStack(const Eigen::Matrix< T, RowsLeft, ColsLeft > &left, const Eigen::Matrix< T, RowsRight, ColsRight > &right)
TEST(PolynomialCameraIntrinsics2, ApplyOnFocalCenter)
void MatrixColumn(const Mat &A, int i, Vec2 *v)
void MeanAndVarianceAlongRows(const Mat &A, Vec *mean_pointer, Vec *variance_pointer)
Mat3 RotationRodrigues(const Vec3 &axis)
Eigen::Matrix< double, 3, 4 > Mat34
Eigen::Matrix< T, COLS, ROWS > VStack(const Eigen::Matrix< T, ColsLeft, RowsLeft > &top, const Eigen::Matrix< T, ColsRight, RowsRight > &bottom)
void HorizontalStack(const Mat &left, const Mat &right, Mat *stacked)
Mat3 RotationAroundZ(double angle)
void reshape(const TMat &a, int rows, int cols, TDest *b)
Eigen::Matrix< double, 2, Eigen::Dynamic > Mat2X
Mat3 RotationAroundY(double angle)
double NormalizeL2(TVec *x)
double Nullspace2(TMat *A, TVec1 *x1, TVec2 *x2)
Eigen::Matrix< double, 2, 2 > Mat2
TMat ExtractColumns(const TMat &A, const TCols &columns)
Vec3 CrossProduct(const Vec3 &x, const Vec3 &y)
Eigen::Matrix< double, 4, 3 > Mat43