Commit ec21102e authored by Tomáš Oberhuber's avatar Tomáš Oberhuber
Browse files

Unit tests for original implementation of the epxression templates were removed.

parent 67ae0bcd
Loading
Loading
Loading
Loading
+0 −8
Original line number Diff line number Diff line
@@ -13,14 +13,6 @@ if( BUILD_CUDA )
   TARGET_LINK_LIBRARIES( AssertCudaTest ${GTEST_BOTH_LIBRARIES} )
endif()

ADD_EXECUTABLE( ExpressionTemplatesStaticTest ExpressionTemplatesStaticTest.cpp )
TARGET_COMPILE_OPTIONS( ExpressionTemplatesStaticTest PRIVATE ${CXX_TESTS_FLAGS} )
TARGET_LINK_LIBRARIES( ExpressionTemplatesStaticTest ${GTEST_BOTH_LIBRARIES} )

#ADD_EXECUTABLE( ExpressionTemplatesDynamicTest ExpressionTemplatesDynamicTest.cpp )
#TARGET_COMPILE_OPTIONS( ExpressionTemplatesDynamicTest PRIVATE ${CXX_TESTS_FLAGS} )
#TARGET_LINK_LIBRARIES( ExpressionTemplatesDynamicTest ${GTEST_BOTH_LIBRARIES} )

if( BUILD_CUDA )
   CUDA_ADD_EXECUTABLE( FileTest FileTest.cu OPTIONS ${CXX_TESTS_FLAGS} )
   TARGET_LINK_LIBRARIES( FileTest ${GTEST_BOTH_LIBRARIES} )
+0 −194
Original line number Diff line number Diff line
/***************************************************************************
                          ExpressionTemplatesTest.cpp  -  description
                             -------------------
    begin                : Mar 27, 2019
    copyright            : (C) 2019 by Tomas Oberhuber
    email                : tomas.oberhuber@fjfi.cvut.cz
 ***************************************************************************/

/* See Copyright Notice in tnl/Copyright */

// Implemented by Vojtech Legler

#ifdef HAVE_GTEST 
#include <gtest/gtest.h>
#endif

#include <TNL/Containers/Vector.h>
#include <TNL/Experimental/ExpressionTemplates/VectorExpressions.h>

using namespace TNL;
using namespace TNL::Containers;

#ifdef HAVE_GTEST
TEST( ExpressionTemplatesDynamicTest, Addition )
{  
   Vector< double, Devices::Host, int > d1{ 1, 1.5, 9, 54, 300.4, 6 };
   Vector< double, Devices::Host, int > d2{ 1.5, 1.5, 50, 30.4, 8, 600 };
   Vector< double, Devices::Host, int > dr1( 6 );
   VectorView< double, Devices::Host, int > dv1( d1 );
   VectorView< double, Devices::Host, int > dv2( d2 );
   VectorView< double, Devices::Host, int > dvr1( dr1 );
   dvr1.evaluate( dv1 + dv2 + dv2 + dv1 );
   double temp;
   for( int i = 0; i < 6; i++){
   	temp = dv1[ i ] + dv2[ i ] + dv2[ i ] + dv1[ i ];
   	EXPECT_EQ( dvr1[ i ], temp );
   }
}

TEST( ExpressionTemplatesDynamicTest, Subtraction )
{
   Vector< double, Devices::Host, int > d1{ 1, 1.5, 9, 54, 300.4, 6 };
   Vector< double, Devices::Host, int > d2{ 1.5, 1.5, 50, 30.4, 8, 600 };
   Vector< double, Devices::Host, int > dr1( 6 );
   VectorView< double, Devices::Host, int > dv1( d1 );
   VectorView< double, Devices::Host, int > dv2( d2 );
   VectorView< double, Devices::Host, int > dvr1( dr1 );
   dvr1.evaluate( dv2 - dv1 - dv1 );
   double temp;
   for( int i = 0; i < 6; i++){
   	temp = dv2[ i ] - dv1[ i ] - dv1[ i ];
   	EXPECT_EQ( dvr1[ i ], temp );
   }
}


TEST( ExpressionTemplatesDynamicTest, MultiplicationLeftSide )
{
   Vector< double, Devices::Host, int > d1{ 1, 1.5, 9, 54, 300.4, 6 };
   Vector< double, Devices::Host, int > dr1( 6 );
   VectorView< double, Devices::Host, int > dv1( d1 );
   VectorView< double, Devices::Host, int > dvr1( dr1 );
   dvr1.evaluate( 5*dv1 );
   double temp;
   for( int i = 0; i < 6; i++){
   	temp = 5 * dv1[ i ];
   	EXPECT_EQ( dvr1[ i ], temp );
   }
}

TEST( ExpressionTemplatesDynamicTest, ExponentialFunction )
{
   Vector< double, Devices::Host, int > d1{ 1, 1.5, 0, 54, 300.4, 6 };
   Vector< double, Devices::Host, int > dr1( 6 );
   VectorView< double, Devices::Host, int > dv1( d1 );
   VectorView< double, Devices::Host, int > dvr1( dr1 );
   dvr1.evaluate( TNL::exp(dv1) );
   double temp;
   for( int i = 0; i < 6; i++){
   	temp = std::exp( dv1[ i ] );
   	EXPECT_EQ( dvr1[ i ], temp );
   }
}

TEST( ExpressionTemplatesDynamicTest, NaturalLogarithm )
{
   Vector< double, Devices::Host, int > d1{ 1, 1.5, 1, 54, 300.4, 6 };
   Vector< double, Devices::Host, int > dr1( 6 );
   VectorView< double, Devices::Host, int > dv1( d1 );
   VectorView< double, Devices::Host, int > dvr1( dr1 );
   dvr1.evaluate( TNL::log(dv1) );
   double temp;
   for( int i = 0; i < 6; i++){
   	temp = std::log( dv1[ i ] );
   	EXPECT_EQ( dvr1[ i ], temp );
   }
}

TEST( ExpressionTemplatesDynamicTest, Sine )
{
   Vector< double, Devices::Host, int > d1{ 1, 1.5, 0, 54, 300.4, 6 };
   Vector< double, Devices::Host, int > dr1( 6 );
   VectorView< double, Devices::Host, int > dv1( d1 );
   VectorView< double, Devices::Host, int > dvr1( dr1 );
   dvr1.evaluate( sin(dv1) );
   double temp;
   for( int i = 0; i < 6; i++){
   	temp = std::sin( dv1[ i ] );
   	EXPECT_EQ( dvr1[ i ], temp );
   }
}

TEST( ExpressionTemplatesDynamicTest, Cosine )
{
   Vector< double, Devices::Host, int > d1{ 1, 1.5, 0, 54, 300.4, 6 };
   Vector< double, Devices::Host, int > dr1( 6 );
   VectorView< double, Devices::Host, int > dv1( d1 );
   VectorView< double, Devices::Host, int > dvr1( dr1 );
   dvr1.evaluate( cos(dv1) );
   double temp;
   for( int i = 0; i < 6; i++){
   	temp = std::cos( dv1[ i ] );
   	EXPECT_EQ( dvr1[ i ], temp );
   }
}

TEST( ExpressionTemplatesDynamicTest, Tangent )
{
   Vector< double, Devices::Host, int > d1{ 1, 1.5, 0, 54, 300.4, 6 };
   Vector< double, Devices::Host, int > dr1( 6 );
   VectorView< double, Devices::Host, int > dv1( d1 );
   VectorView< double, Devices::Host, int > dvr1( dr1 );
   dvr1.evaluate( tan(dv1) );
   double temp;
   for( int i = 0; i < 6; i++){
   	temp = std::tan( dv1[ i ] );
   	EXPECT_EQ( dvr1[ i ], temp );
   }
}

TEST( ExpressionTemplatesDynamicTest, ArcSine )
{
   Vector< double, Devices::Host, int > d1{ 1, -0.5, 0, 0.35, -0.4, -1 };
   Vector< double, Devices::Host, int > dr1( 6 );
   VectorView< double, Devices::Host, int > dv1( d1 );
   VectorView< double, Devices::Host, int > dvr1( dr1 );
   dvr1.evaluate( asin(dv1) );
   double temp;
   for( int i = 0; i < 6; i++){
   	temp = std::asin( dv1[ i ] );
   	EXPECT_EQ( dvr1[ i ], temp );
   }
}

TEST( ExpressionTemplatesDynamicTest, ArcCosine )
{
   Vector< double, Devices::Host, int > d1{ 1, -0.5, 0, 0.35, -0.4, -1 };
   Vector< double, Devices::Host, int > dr1( 6 );
   VectorView< double, Devices::Host, int > dv1( d1 );
   VectorView< double, Devices::Host, int > dvr1( dr1 );
   dvr1.evaluate( acos(dv1) );
   double temp;
   for( int i = 0; i < 6; i++){
   	temp = std::acos( dv1[ i ] );
   	EXPECT_EQ( dvr1[ i ], temp );
   }
}

TEST( ExpressionTemplatesDynamicTest, ArcTangent )
{
   Vector< double, Devices::Host, int > d1{ 1, 1.5, 0, 54, 300.4, 6 };
   Vector< double, Devices::Host, int > dr1( 6 );
   VectorView< double, Devices::Host, int > dv1( d1 );
   VectorView< double, Devices::Host, int > dvr1( dr1 );
   dvr1.evaluate( atan(dv1) );
   double temp;
   for( int i = 0; i < 6; i++){
   	temp = std::atan( dv1[ i ] );
   	EXPECT_EQ( dvr1[ i ], temp );
   }
}

#endif

#include "GtestMissingError.h"
int main( int argc, char* argv[] )
{
#ifdef HAVE_GTEST
   ::testing::InitGoogleTest( &argc, argv );
   return RUN_ALL_TESTS();
#else
   throw GtestMissingError();
#endif
}
+0 −223
Original line number Diff line number Diff line
/***************************************************************************
                          ExpressionTemplatesTest.cpp  -  description
                             -------------------
    begin                : Mar 05, 2019
    copyright            : (C) 2019 by Tomas Oberhuber
    email                : tomas.oberhuber@fjfi.cvut.cz
 ***************************************************************************/

/* See Copyright Notice in tnl/Copyright */

// Implemented by Vojtech Legler

#ifdef HAVE_GTEST 
#include <gtest/gtest.h>
#endif

#include <TNL/Containers/StaticVector.h>

using namespace TNL;
using namespace TNL::Containers;

#ifdef HAVE_GTEST
TEST( ExpressionTemplatesStaticTest, TypeTraitsTest )
{
   using VectorType = StaticVector< 6, double >;
   VectorType sv1{ 1, 1.5, 9, 54, 300.4, 6 };
   VectorType sv2{ 1.5, 1.5, 50, 30.4, 8, 600 };
   VectorType svr1;

   using Type1 = decltype( sv1 + 1 );
   using Type2 = decltype( sv1 + sv2 );
   static_assert( Expressions::ExpressionVariableTypeGetter< int >::value == Expressions::ArithmeticVariable, "" );
   static_assert( Expressions::ExpressionVariableTypeGetter< VectorType >::value == Expressions::VectorVariable, "" );
   static_assert( Expressions::IsExpressionTemplate< Type1 >::value == true, "" );
   static_assert( Expressions::IsExpressionTemplate< Type2 >::value == true, "" );
}

TEST( ExpressionTemplatesStaticTest, Addition )
{
   using VectorType = StaticVector< 6, double >;
   VectorType sv1{ 1, 1.5, 9, 54, 300.4, 6 };
   VectorType sv2{ 1.5, 1.5, 50, 30.4, 8, 600 };
   VectorType svr1;

   svr1 = sv1 + sv2 + sv2 + sv1;
   for( int i = 0; i < 6; i++){
   	EXPECT_EQ( svr1[ i ], sv1[ i ] + sv2[ i ] + sv2[ i ] + sv1[ i ] );
   }
   svr1 = sv1 + ( double ) 2;
   for( int i = 0; i < 6; i++){
   	EXPECT_EQ( svr1[ i ], sv1[ i ] + 2 );
   }
   svr1 = 2 + sv1;
   for( int i = 0; i < 6; i++){
   	EXPECT_EQ( svr1[ i ], sv1[ i ] + 2 );
   }

   svr1 = sv1 + sv2 + ( double ) 1;
   svr1 = sv1 + sv2 - ( double ) 1;
}

TEST( ExpressionTemplatesStaticTest, Subtraction )
{
   StaticVector< 6, double > sv1{ 1, 1.5, 9, 54, 300.4, 6 };
   StaticVector< 6, double > sv2{ 1.5, 1.5, 50, 30.4, 8, 600 };
   StaticVector< 6, double > svr1{};
   svr1 = sv2 - sv1 - sv1;
   double temp;
   for( int i = 0; i < 6; i++){
   	temp = sv2[ i ] - sv1[ i ] - sv1[ i ];
   	EXPECT_EQ( svr1[ i ], temp );
   }
   svr1 = sv1 - 2;
   for( int i = 0; i < 6; i++){
   	EXPECT_EQ( svr1[ i ], sv1[ i ] - 2 );
   }
   svr1 = 2 - sv1;
   for( int i = 0; i < 6; i++){
   	EXPECT_EQ( svr1[ i ], 2 - sv1[ i ] );
   }
}

TEST( ExpressionTemplatesStaticTest, Multiplication )
{
   StaticVector< 6, double > sv1{ 1, 1.5, 9, 54, 300.4, 6 };
   StaticVector< 6, double > sv2{ 1.5, 1.5, 50, 30.4, 8, 600 };
   StaticVector< 6, double > svr1{};
   svr1 = sv1 * sv2;
   for( int i = 0; i < 6; i++){
   	EXPECT_EQ( svr1[ i ], sv1[ i ] * sv2[ i ] );
   }
   svr1 = sv1 * 2;
   for( int i = 0; i < 6; i++){
   	EXPECT_EQ( svr1[ i ], sv1[ i ] * 2 );
   }
   svr1 = 2 * sv1;
   for( int i = 0; i < 6; i++){
   	EXPECT_EQ( svr1[ i ], 2 * sv1[ i ] );
   }
}

/*
TEST( ExpressionTemplatesStaticTest, AbsoluteValue )
{
   StaticVector< 6, double > sv1{ 1, 1.5, 9, 54, -300.4, 6 };
   StaticVector< 6, double > svr1{};
   svr1 = abs(sv1);
   double temp;
   for( int i = 0; i < 6; i++){
   	temp = std::abs( sv1[ i ] );
   	EXPECT_EQ( svr1[ i ], temp );
   }
}

TEST( ExpressionTemplatesStaticTest, ExponentialFunction )
{
   StaticVector< 6, double > sv1{ 1, 1.5, 0, 54, 300.4, 6 };
   StaticVector< 6, double > svr1{};
   svr1 = exp(sv1);
   double temp;
   for( int i = 0; i < 6; i++){
   	temp = std::exp( sv1[ i ] );
   	EXPECT_EQ( svr1[ i ], temp );
   }
}

TEST( ExpressionTemplatesStaticTest, NaturalLogarithm )
{
   StaticVector< 6, double > sv1{ 1, 1.5, 1, 54, 300.4, 6 };
   StaticVector< 6, double > svr1{};
   svr1 = log(sv1);
   double temp;
   for( int i = 0; i < 6; i++){
   	temp = std::log( sv1[ i ] );
   	EXPECT_EQ( svr1[ i ], temp );
   }
}

TEST( ExpressionTemplatesStaticTest, Sine )
{
   StaticVector< 6, double > sv1{ 1, 1.5, 0, 54, 300.4, 6 };
   StaticVector< 6, double > svr1{};
   svr1 = sin(sv1);
   double temp;
   for( int i = 0; i < 6; i++){
   	temp = std::sin( sv1[ i ] );
   	EXPECT_EQ( svr1[ i ], temp );
   }
}

TEST( ExpressionTemplatesStaticTest, Cosine )
{
   StaticVector< 6, double > sv1{ 1, 1.5, 0, 54, 300.4, 6 };
   StaticVector< 6, double > svr1{};
   svr1 = cos(sv1);
   double temp;
   for( int i = 0; i < 6; i++){
   	temp = std::cos( sv1[ i ] );
   	EXPECT_EQ( svr1[ i ], temp );
   }
}

TEST( ExpressionTemplatesStaticTest, Tangent )
{
   StaticVector< 6, double > sv1{ 1, 1.5, 0, 54, 300.4, 6 };
   StaticVector< 6, double > svr1{};
   svr1 = tan(sv1);
   double temp;
   for( int i = 0; i < 6; i++){
   	temp = std::tan( sv1[ i ] );
   	EXPECT_EQ( svr1[ i ], temp );
   }
}

TEST( ExpressionTemplatesStaticTest, ArcSine )
{
   StaticVector< 6, double > sv1{ 1, -0.5, 0, 0.35, -0.4, -1 };
   StaticVector< 6, double > svr1{};
   svr1 = asin(sv1);
   double temp;
   for( int i = 0; i < 6; i++){
   	temp = std::asin( sv1[ i ] );
   	EXPECT_EQ( svr1[ i ], temp );
   }
}

TEST( ExpressionTemplatesStaticTest, ArcCosine )
{
   StaticVector< 6, double > sv1{ 1, -0.5, 0, 0.35, -0.4, -1 };
   StaticVector< 6, double > svr1{};
   svr1 = acos(sv1);
   double temp;
   for( int i = 0; i < 6; i++){
   	temp = std::acos( sv1[ i ] );
   	EXPECT_EQ( svr1[ i ], temp );
   }
}

TEST( ExpressionTemplatesStaticTest, ArcTangent )
{
   StaticVector< 6, double > sv1{ 1, 1.5, 0, 54, 300.4, 6 };
   StaticVector< 6, double > svr1{};
   svr1 = atan(sv1);
   double temp;
   for( int i = 0; i < 6; i++){
   	temp = std::atan( sv1[ i ] );
   	EXPECT_EQ( svr1[ i ], temp );
   }
}*/

#endif

#include "GtestMissingError.h"
int main( int argc, char* argv[] )
{
   //Test();
#ifdef HAVE_GTEST
   ::testing::InitGoogleTest( &argc, argv );
   return RUN_ALL_TESTS();
#else
   throw GtestMissingError();
#endif
}