1 #ifndef TYPE_VECTOR_TEST_H 2 #define TYPE_VECTOR_TEST_H 4 #include <libmesh/type_vector.h> 8 #define TYPEVECTORTEST \ 9 CPPUNIT_TEST( testNorm ); \ 10 CPPUNIT_TEST( testNormSq ); \ 12 CPPUNIT_TEST( testValue ); \ 13 CPPUNIT_TEST( testZero ); \ 15 CPPUNIT_TEST( testEquality ); \ 16 CPPUNIT_TEST( testInEquality ); \ 17 CPPUNIT_TEST( testAssignment ); \ 19 CPPUNIT_TEST( testScalarMult ); \ 20 CPPUNIT_TEST( testScalarDiv ); \ 21 CPPUNIT_TEST( testScalarMultAssign ); \ 22 CPPUNIT_TEST( testScalarDivAssign ); \ 24 CPPUNIT_TEST( testVectorAdd ); \ 25 CPPUNIT_TEST( testVectorAddScaled ); \ 26 CPPUNIT_TEST( testVectorSub ); \ 27 CPPUNIT_TEST( testVectorMult ); \ 28 CPPUNIT_TEST( testVectorAddAssign ); \ 29 CPPUNIT_TEST( testVectorSubAssign ); \ 31 CPPUNIT_TEST( testNormBase ); \ 32 CPPUNIT_TEST( testNormSqBase ); \ 33 CPPUNIT_TEST( testValueBase ); \ 34 CPPUNIT_TEST( testZeroBase ); \ 36 CPPUNIT_TEST( testIsZero ); \ 38 CPPUNIT_TEST( testEqualityBase ); \ 39 CPPUNIT_TEST( testInEqualityBase ); \ 40 CPPUNIT_TEST( testAssignmentBase ); \ 42 CPPUNIT_TEST( testScalarMultBase ); \ 43 CPPUNIT_TEST( testScalarDivBase ); \ 44 CPPUNIT_TEST( testScalarMultAssignBase ); \ 45 CPPUNIT_TEST( testScalarDivAssignBase ); \ 47 CPPUNIT_TEST( testVectorAddBase ); \ 48 CPPUNIT_TEST( testVectorAddScaledBase ); \ 49 CPPUNIT_TEST( testVectorSubBase ); \ 50 CPPUNIT_TEST( testVectorMultBase ); \ 51 CPPUNIT_TEST( testVectorAddAssignBase ); \ 52 CPPUNIT_TEST( testVectorSubAssignBase ); \ 53 CPPUNIT_TEST( testReplaceAlgebraicType ); 58 template <
class DerivedClass>
62 typedef typename DerivedClass::value_type
T;
74 m_1_1_1 = std::make_unique<DerivedClass>(1);
75 m_n1_1_n1 = std::make_unique<DerivedClass>(-1);
87 basem_1_1_1 = m_1_1_1.get();
88 basem_n1_1_n1 = m_n1_1_n1.get();
97 CPPUNIT_ASSERT_EQUAL(
T(1), (*m_1_1_1)(0));
98 CPPUNIT_ASSERT_EQUAL(
T(-1), (*m_n1_1_n1)(0));
101 CPPUNIT_ASSERT_EQUAL(
T(1), (*m_1_1_1)(1));
102 CPPUNIT_ASSERT_EQUAL(
T(1) , (*m_n1_1_n1)(1));
106 CPPUNIT_ASSERT_EQUAL(
T(1), (*m_1_1_1)(2));
107 CPPUNIT_ASSERT_EQUAL(
T(-1), (*m_n1_1_n1)(2));
116 DerivedClass avector(1,1,1);
117 #elif LIBMESH_DIM > 1 118 DerivedClass avector(1,1);
120 DerivedClass avector(1);
124 for (
int i = 0; i != LIBMESH_DIM; ++i)
125 CPPUNIT_ASSERT_EQUAL(
T(0), avector(i));
146 CPPUNIT_ASSERT( (*m_1_1_1) == (*m_1_1_1) );
148 CPPUNIT_ASSERT( !((*m_1_1_1) == (*m_n1_1_n1)) );
156 CPPUNIT_ASSERT( !((*m_1_1_1) != (*m_1_1_1)) );
158 CPPUNIT_ASSERT( (*m_1_1_1) != (*m_n1_1_n1) );
166 DerivedClass avector {*basem_1_1_1};
168 for (
int i = 0; i != LIBMESH_DIM; ++i)
169 CPPUNIT_ASSERT_EQUAL(
T(1), (avector)(i) );
176 DerivedClass avector = 0;
177 for (
int i = 0; i != LIBMESH_DIM; ++i)
180 DerivedClass bvector = 2.0;
182 for (
int i = 1; i != LIBMESH_DIM; ++i)
190 for (
int i = 0; i != LIBMESH_DIM; ++i)
202 for (
int i = 0; i != LIBMESH_DIM; ++i)
210 DerivedClass avector {*basem_1_1_1};
213 for (
int i = 0; i != LIBMESH_DIM; ++i)
221 DerivedClass avector {*basem_1_1_1};
224 for (
int i = 0; i != LIBMESH_DIM; ++i)
243 DerivedClass avector {*basem_1_1_1};
246 for (
int i = 0; i != LIBMESH_DIM; ++i)
265 if (LIBMESH_DIM == 2)
275 DerivedClass avector {*basem_1_1_1};
278 for (
int i = 0; i != LIBMESH_DIM; ++i)
286 DerivedClass avector {*basem_1_1_1};
287 avector-=(*m_n1_1_n1);
300 for (
int i = 0; i != LIBMESH_DIM; ++i)
301 CPPUNIT_ASSERT_EQUAL(
T(1), (*basem_1_1_1)(i));
303 CPPUNIT_ASSERT_EQUAL(
T(-1), (*basem_n1_1_n1)(0));
305 CPPUNIT_ASSERT_EQUAL(
T(1 ), (*basem_n1_1_n1)(1));
307 CPPUNIT_ASSERT_EQUAL(
T(-1), (*basem_n1_1_n1)(2));
317 for (
int i = 0; i != LIBMESH_DIM; ++i)
318 CPPUNIT_ASSERT_EQUAL(
T(0), avector(i));
327 DerivedClass avector(0,0,0);
328 #elif LIBMESH_DIM > 1 329 DerivedClass avector(0,0);
331 DerivedClass avector(0);
333 CPPUNIT_ASSERT(avector.is_zero());
337 DerivedClass avector(1,1,1);
338 #elif LIBMESH_DIM > 1 339 DerivedClass avector(1,1);
341 DerivedClass avector(1);
343 CPPUNIT_ASSERT(!avector.is_zero());
365 CPPUNIT_ASSERT( (*basem_1_1_1) == (*basem_1_1_1) );
366 CPPUNIT_ASSERT( !((*basem_1_1_1) == (*basem_n1_1_n1)) );
373 CPPUNIT_ASSERT( !((*basem_1_1_1) != (*basem_1_1_1)) );
374 CPPUNIT_ASSERT( (*basem_1_1_1) != (*basem_n1_1_n1) );
383 for (
int i = 0; i != LIBMESH_DIM; ++i)
384 CPPUNIT_ASSERT_EQUAL(
T(1), (avector)(i) );
391 for (
int i = 0; i != LIBMESH_DIM; ++i)
399 for (
int i = 0; i != LIBMESH_DIM; ++i)
410 for (
int i = 0; i != LIBMESH_DIM; ++i)
421 for (
int i = 0; i != LIBMESH_DIM; ++i)
443 for (
int i = 0; i != LIBMESH_DIM; ++i)
462 if (LIBMESH_DIM == 2)
473 avector+=(*basem_1_1_1);
475 for (
int i = 0; i != LIBMESH_DIM; ++i)
484 avector-=(*basem_n1_1_n1);
495 #ifdef LIBMESH_HAVE_METAPHYSICL 496 typedef typename MetaPhysicL::ReplaceAlgebraicType<
497 std::vector<TypeVector<double>>,
499 typename MetaPhysicL::ValueType<std::vector<TypeVector<double>>>::type>::type>::type
501 constexpr
bool assertion =
502 std::is_same<ReplacedType, std::vector<TensorValue<double>>>
::value;
503 CPPUNIT_ASSERT(assertion);
void testVectorAddAssign()
void add_scaled(const TypeVector< T2 > &, const T &)
Add a scaled value to this vector without creating a temporary.
TypeTensor< typename CompareTypes< T, T2 >::supertype > outer_product(const TypeVector< T > &a, const TypeVector< T2 > &b)
auto norm() const -> decltype(std::norm(T()))
void testVectorAddScaledBase()
void testVectorSubAssignBase()
static constexpr Real TOLERANCE
TypeVector< T > * basem_n1_1_n1
void testAssignmentBase()
void testReplaceAlgebraicType()
ADRealEigenVector< T, D, asd > sqrt(const ADRealEigenVector< T, D, asd > &)
The libMesh namespace provides an interface to certain functionality in the library.
std::unique_ptr< DerivedClass > m_1_1_1
void testScalarMultAssignBase()
auto norm_sq() const -> decltype(std::norm(T()))
void zero()
Set all entries of the vector to 0.
std::unique_ptr< DerivedClass > m_n1_1_n1
This class defines a vector in LIBMESH_DIM dimensional space of type T.
std::string libmesh_suite_name
void testVectorMultBase()
void testScalarMultBase()
void testVectorSubAssign()
void testScalarMultAssign()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void testVectorAddAssignBase()
void testVectorAddScaled()
void testInEqualityBase()
void testScalarDivAssign()
DerivedClass::value_type T
void testScalarDivAssignBase()