blob: 1a4974550cdb1044f3bd8947090555a337455166 [file]
/*
* Tiny Vector Matrix Library
* Dense Vector Matrix Libary of Tiny size using Expression Templates
*
* Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* $Id: SelfTest.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $
*/
#ifndef TVMET_SELFTEST_H
#define TVMET_SELFTEST_H
#include <cppunit/extensions/HelperMacros.h>
#include <tvmet/Vector.h>
#include <tvmet/Matrix.h>
#include <cassert>
template <class T>
class SelfTest : public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE( SelfTest );
CPPUNIT_TEST( basics1 );
CPPUNIT_TEST( basics2 );
CPPUNIT_TEST_SUITE_END();
private:
typedef tvmet::Vector<T, 3> vector_type;
typedef tvmet::Matrix<T, 3, 3> matrix_type;
public:
SelfTest()
: vZero(0), vOne(1), mZero(0), mOne(1) { }
public: // cppunit interface
/** cppunit hook for fixture set up. */
void setUp();
/** cppunit hook for fixture tear down. */
void tearDown();
protected:
void basics1();
void basics2();
private: // vectors
const vector_type vZero;
const vector_type vOne;
vector_type v1;
private: // matrizes
const matrix_type mZero;
const matrix_type mOne;
matrix_type m1;
};
/*****************************************************************************
* Implementation Part I (cppunit part)
****************************************************************************/
template <class T>
void SelfTest<T>::setUp () {
v1 = 1,2,3;
m1 = 1,4,7,
2,5,8,
3,6,9;
}
template <class T>
void SelfTest<T>::tearDown() { }
/*****************************************************************************
* Implementation Part II
* these are elemental - therefore we use std::assert
****************************************************************************/
/*
* We have to guarantee that the vectors and matrizes these are what
* they should be. E.g. vOne: all elements should be equal to 1.
* Implicit we check on right construction here due to the way of
* construction.
*/
template <class T>
void
SelfTest<T>::basics1()
{
// all elements of vZero have to be equal to zero:
assert(vZero(0) == T(0) && vZero(1) == T(0) && vZero(2) == T(0));
// all elements of vOne have to be equal to 1:
assert(vOne(0) == T(1) && vOne(1) == T(1) && vOne(2) == T(1));
// all elements of mZero have to be equal to zero:
assert(mZero(0,0) == T(0) && mZero(0,1) == T(0) && mZero(0,2) == T(0) &&
mZero(1,0) == T(0) && mZero(1,1) == T(0) && mZero(1,2) == T(0) &&
mZero(2,0) == T(0) && mZero(2,1) == T(0) && mZero(2,2) == T(0));
// all elements of mOne have to be equal to 1:
assert(mOne(0,0) == T(1) && mOne(0,1) == T(1) && mOne(0,2) == T(1) &&
mOne(1,0) == T(1) && mOne(1,1) == T(1) && mOne(1,2) == T(1) &&
mOne(2,0) == T(1) && mOne(2,1) == T(1) && mOne(2,2) == T(1));
}
/*
* We have to guarantee that the vectors and matrizes these are what
* they should be. E.g. v1: all elements should increase by 1.
* Implicit we check the CommaInitializer due to the way of
* construction.
*/
template <class T>
void
SelfTest<T>::basics2()
{
// all elements of v1 should increase
assert(v1(0) == T(1) && v1(1) == T(2) && v1(2) == T(3));
// all elements of m1 should increase column-wise
assert(m1(0,0) == T(1) && m1(0,1) == T(4) && m1(0,2) == T(7) &&
m1(1,0) == T(2) && m1(1,1) == T(5) && m1(1,2) == T(8) &&
m1(2,0) == T(3) && m1(2,1) == T(6) && m1(2,2) == T(9));
}
#endif // TVMET_SELFTEST_H
// Local Variables:
// mode:C++
// End: