mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Hello, World!
This is the initial commit for Eigen2, since I restarted it from scratch on Sunday.
This commit is contained in:
23
test/CMakeLists.txt
Normal file
23
test/CMakeLists.txt
Normal file
@@ -0,0 +1,23 @@
|
||||
IF(BUILD_TESTS)
|
||||
|
||||
ENABLE_TESTING()
|
||||
FIND_PACKAGE(Qt4 REQUIRED)
|
||||
INCLUDE_DIRECTORIES( ${QT_INCLUDE_DIR} )
|
||||
|
||||
SET(test_SRCS
|
||||
main.cpp
|
||||
vectorops.cpp
|
||||
matrixops.cpp
|
||||
matrixmanip.cpp
|
||||
)
|
||||
QT4_AUTOMOC(${test_SRCS})
|
||||
INCLUDE_DIRECTORIES(
|
||||
${CMAKE_SOURCE_DIR}/src
|
||||
)
|
||||
|
||||
ADD_EXECUTABLE(test ${test_SRCS})
|
||||
TARGET_LINK_LIBRARIES(test ${QT_QTCORE_LIBRARY} ${QT_QTTEST_LIBRARY})
|
||||
|
||||
ADD_TEST(Eigen test)
|
||||
|
||||
ENDIF(BUILD_TESTS)
|
||||
37
test/main.cpp
Normal file
37
test/main.cpp
Normal file
@@ -0,0 +1,37 @@
|
||||
// This file is part of Eigen, a lightweight C++ template library
|
||||
// for linear algebra. Eigen itself is part of the KDE project.
|
||||
//
|
||||
// Copyright (C) 2006-2007 Benoit Jacob <jacob@math.jussieu.fr>
|
||||
//
|
||||
// Eigen is free software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation; either version 2 or (at your option) any later version.
|
||||
//
|
||||
// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
// details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with Eigen; if not, write to the Free Software Foundation, Inc., 51
|
||||
// Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
//
|
||||
// As a special exception, if other files instantiate templates or use macros
|
||||
// or functions from this file, or you compile this file and link it
|
||||
// with other works to produce a work based on this file, this file does not
|
||||
// by itself cause the resulting work to be covered by the GNU General Public
|
||||
// License. This exception does not invalidate any other reasons why a work
|
||||
// based on this file might be covered by the GNU General Public License.
|
||||
|
||||
#include "main.h"
|
||||
|
||||
EigenTest::EigenTest()
|
||||
{
|
||||
unsigned int t = (unsigned int) time( NULL );
|
||||
qDebug() << "Initializing random number generator with seed"
|
||||
<< t;
|
||||
srand(t);
|
||||
}
|
||||
|
||||
QTEST_APPLESS_MAIN( EigenTest )
|
||||
#include "main.moc"
|
||||
51
test/main.h
Normal file
51
test/main.h
Normal file
@@ -0,0 +1,51 @@
|
||||
// This file is part of Eigen, a lightweight C++ template library
|
||||
// for linear algebra. Eigen itself is part of the KDE project.
|
||||
//
|
||||
// Copyright (C) 2006-2007 Benoit Jacob <jacob@math.jussieu.fr>
|
||||
//
|
||||
// Eigen is free software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation; either version 2 or (at your option) any later version.
|
||||
//
|
||||
// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
// details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with Eigen; if not, write to the Free Software Foundation, Inc., 51
|
||||
// Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
//
|
||||
// As a special exception, if other files instantiate templates or use macros
|
||||
// or functions from this file, or you compile this file and link it
|
||||
// with other works to produce a work based on this file, this file does not
|
||||
// by itself cause the resulting work to be covered by the GNU General Public
|
||||
// License. This exception does not invalidate any other reasons why a work
|
||||
// based on this file might be covered by the GNU General Public License.
|
||||
|
||||
#ifndef EIGEN_TEST_MAIN_H
|
||||
#define EIGEN_TEST_MAIN_H
|
||||
|
||||
#include<QtTest/QtTest>
|
||||
#include<All.h>
|
||||
#include<complex>
|
||||
#include<cstdlib>
|
||||
#include<ctime>
|
||||
|
||||
using namespace std;
|
||||
using namespace Eigen;
|
||||
|
||||
class EigenTest : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
EigenTest();
|
||||
|
||||
private slots:
|
||||
void testVectorOps();
|
||||
void testMatrixOps();
|
||||
void testMatrixManip();
|
||||
};
|
||||
|
||||
#endif // EIGEN_TEST_MAIN_H
|
||||
50
test/matrixmanip.cpp
Normal file
50
test/matrixmanip.cpp
Normal file
@@ -0,0 +1,50 @@
|
||||
// This file is part of Eigen, a lightweight C++ template library
|
||||
// for linear algebra. Eigen itself is part of the KDE project.
|
||||
//
|
||||
// Copyright (C) 2006-2007 Benoit Jacob <jacob@math.jussieu.fr>
|
||||
//
|
||||
// Eigen is free software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation; either version 2 or (at your option) any later version.
|
||||
//
|
||||
// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
// details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with Eigen; if not, write to the Free Software Foundation, Inc., 51
|
||||
// Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
//
|
||||
// As a special exception, if other files instantiate templates or use macros
|
||||
// or functions from this file, or you compile this file and link it
|
||||
// with other works to produce a work based on this file, this file does not
|
||||
// by itself cause the resulting work to be covered by the GNU General Public
|
||||
// License. This exception does not invalidate any other reasons why a work
|
||||
// based on this file might be covered by the GNU General Public License.
|
||||
|
||||
#include"main.h"
|
||||
|
||||
template<typename MatrixType> void matrixManip(const MatrixType& m)
|
||||
{
|
||||
int rows = m.rows(), cols = m.cols();
|
||||
int i = rand()%rows, j = rand()%cols;
|
||||
|
||||
MatrixType a(rows, cols), b(rows, cols);
|
||||
a.row(i);
|
||||
a.col(j);
|
||||
a.minor(i, j);
|
||||
a.block(1, rows-1, 1, cols-1);
|
||||
a.xpr().row(i) = b.row(i);
|
||||
a.xpr().minor(i, j) = b.block(1, rows-1, 1, cols-1);
|
||||
}
|
||||
|
||||
void EigenTest::testMatrixManip()
|
||||
{
|
||||
matrixManip(Matrix<int, 2, 3>());
|
||||
matrixManip(Matrix<double, 3, 3>());
|
||||
matrixManip(Matrix<complex<float>, 4,3>());
|
||||
matrixManip(MatrixX<int>(2, 2));
|
||||
matrixManip(MatrixX<double>(3, 5));
|
||||
matrixManip(MatrixX<complex<float> >(4, 4));
|
||||
}
|
||||
66
test/matrixops.cpp
Normal file
66
test/matrixops.cpp
Normal file
@@ -0,0 +1,66 @@
|
||||
// This file is part of Eigen, a lightweight C++ template library
|
||||
// for linear algebra. Eigen itself is part of the KDE project.
|
||||
//
|
||||
// Copyright (C) 2006-2007 Benoit Jacob <jacob@math.jussieu.fr>
|
||||
//
|
||||
// Eigen is free software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation; either version 2 or (at your option) any later version.
|
||||
//
|
||||
// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
// details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with Eigen; if not, write to the Free Software Foundation, Inc., 51
|
||||
// Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
//
|
||||
// As a special exception, if other files instantiate templates or use macros
|
||||
// or functions from this file, or you compile this file and link it
|
||||
// with other works to produce a work based on this file, this file does not
|
||||
// by itself cause the resulting work to be covered by the GNU General Public
|
||||
// License. This exception does not invalidate any other reasons why a work
|
||||
// based on this file might be covered by the GNU General Public License.
|
||||
|
||||
#include"main.h"
|
||||
|
||||
template<typename MatrixType1,
|
||||
typename MatrixType2> void matrixOps(const MatrixType1& m1, const MatrixType2& m2)
|
||||
{
|
||||
typedef typename MatrixType1::Scalar Scalar;
|
||||
int rows1 = m1.rows(), cols1 = m1.cols();
|
||||
int rows2 = m2.rows(), cols2 = m2.cols();
|
||||
|
||||
MatrixType1 a(rows1, cols1), b(rows1, cols1), c(b);
|
||||
Scalar s;
|
||||
a * s;
|
||||
s * a;
|
||||
a + b;
|
||||
a - b;
|
||||
(a + b) * s;
|
||||
s * (a + b);
|
||||
a + b + c;
|
||||
a = b;
|
||||
a = b + c;
|
||||
a = s * (b - c);
|
||||
a << a + b;
|
||||
|
||||
MatrixType1 d(rows1, cols1);
|
||||
MatrixType2 e(rows2, cols2);
|
||||
QVERIFY( (d * e).rows() == rows1 && (d * e).cols() == cols2 );
|
||||
}
|
||||
|
||||
void EigenTest::testMatrixOps()
|
||||
{
|
||||
matrixOps(Matrix<float, 1, 1>(), Matrix<float, 1, 1>());
|
||||
matrixOps(Matrix<int, 2, 3>(), Matrix<int, 3, 1>());
|
||||
matrixOps(Matrix<double, 3, 3>(), Matrix<double, 3, 3>());
|
||||
matrixOps(Matrix<complex<float>, 4,3>(), Matrix<complex<float>, 3,4>());
|
||||
matrixOps(MatrixX<float>(1, 1), MatrixX<float>(1, 3));
|
||||
matrixOps(MatrixX<int>(2, 2), MatrixX<int>(2, 2));
|
||||
matrixOps(MatrixX<double>(3, 5), MatrixX<double>(5, 1));
|
||||
matrixOps(MatrixX<complex<float> >(4, 4), MatrixX<complex<float> >(4, 4));
|
||||
matrixOps(MatrixX<double>(3, 5), Matrix<double, 5, 1>());
|
||||
matrixOps(Matrix<complex<float>, 4, 4>(), MatrixX<complex<float> >(4, 4));
|
||||
}
|
||||
58
test/vectorops.cpp
Normal file
58
test/vectorops.cpp
Normal file
@@ -0,0 +1,58 @@
|
||||
// This file is part of Eigen, a lightweight C++ template library
|
||||
// for linear algebra. Eigen itself is part of the KDE project.
|
||||
//
|
||||
// Copyright (C) 2006-2007 Benoit Jacob <jacob@math.jussieu.fr>
|
||||
//
|
||||
// Eigen is free software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation; either version 2 or (at your option) any later version.
|
||||
//
|
||||
// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
// details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with Eigen; if not, write to the Free Software Foundation, Inc., 51
|
||||
// Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
//
|
||||
// As a special exception, if other files instantiate templates or use macros
|
||||
// or functions from this file, or you compile this file and link it
|
||||
// with other works to produce a work based on this file, this file does not
|
||||
// by itself cause the resulting work to be covered by the GNU General Public
|
||||
// License. This exception does not invalidate any other reasons why a work
|
||||
// based on this file might be covered by the GNU General Public License.
|
||||
|
||||
#include"main.h"
|
||||
|
||||
template<typename VectorType> void vectorOps(const VectorType& v)
|
||||
{
|
||||
typedef typename VectorType::Scalar Scalar;
|
||||
int size = v.size();
|
||||
|
||||
VectorType a(size), b(size), c(b);
|
||||
Scalar s;
|
||||
a * s;
|
||||
s * a;
|
||||
a + b;
|
||||
a - b;
|
||||
(a + b) * s;
|
||||
s * (a + b);
|
||||
a + b + c;
|
||||
a = b;
|
||||
a = b + c;
|
||||
a = s * (b - c);
|
||||
a << a + b;
|
||||
}
|
||||
|
||||
void EigenTest::testVectorOps()
|
||||
{
|
||||
vectorOps(Vector<float, 1>());
|
||||
vectorOps(Vector<int, 2>());
|
||||
vectorOps(Vector<double, 3>());
|
||||
vectorOps(Vector<complex<float>, 4>());
|
||||
vectorOps(VectorX<float>(1));
|
||||
vectorOps(VectorX<int>(2));
|
||||
vectorOps(VectorX<double>(3));
|
||||
vectorOps(VectorX<complex<float> >(4));
|
||||
}
|
||||
Reference in New Issue
Block a user