Loading src/TNL/Math.h +27 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,19 @@ ResultType min( const T1& a, const T2& b ) #endif } /** * \brief This function returns minimum of a variadic number of inputs. * * The inputs are folded with the \ref min function from the left to the right. */ template< typename T1, typename T2, typename T3, typename... Ts > __cuda_callable__ typename std::common_type< T1, T2, T3, Ts... >::type min( T1&& val1, T2&& val2, T3&& val3, Ts&&... vs ) { return min( min( std::forward<T1>(val1), std::forward<T2>(val2) ), std::forward<T3>(val3), std::forward<Ts>(vs)... ); } /** * \brief This function returns maximum of two numbers. Loading @@ -68,6 +81,20 @@ ResultType max( const T1& a, const T2& b ) #endif } /** * \brief This function returns minimum of a variadic number of inputs. * * The inputs are folded with the \ref max function from the left to the right. */ template< typename T1, typename T2, typename T3, typename... Ts > __cuda_callable__ typename std::common_type< T1, T2, T3, Ts... >::type max( T1&& val1, T2&& val2, T3&& val3, Ts&&... vs ) { return max( max( std::forward<T1>(val1), std::forward<T2>(val2) ), std::forward<T3>(val3), std::forward<Ts>(vs)... ); } /** * \brief This function returns absolute value of given number \e n. */ Loading src/UnitTests/CMakeLists.txt +1 −1 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ ADD_SUBDIRECTORY( Functions ) ADD_SUBDIRECTORY( Meshes ) ADD_SUBDIRECTORY( Pointers ) set( CPP_TESTS AssertTest FileNameTest StringTest ObjectTest TimerTest TypeInfoTest ) set( CPP_TESTS AssertTest FileNameTest MathTest ObjectTest StringTest TimerTest TypeInfoTest ) set( CUDA_TESTS AssertCudaTest ) if( BUILD_CUDA ) set( CUDA_TESTS ${CUDA_TESTS} AllocatorsTest FileTest ) Loading src/UnitTests/MathTest.cpp 0 → 100644 +79 −0 Original line number Diff line number Diff line /*************************************************************************** MathTest.cpp - description ------------------- begin : Dec 17, 2020 copyright : (C) 2020 by Tomas Oberhuber et al. email : tomas.oberhuber@fjfi.cvut.cz ***************************************************************************/ /* See Copyright Notice in tnl/Copyright */ #ifdef HAVE_GTEST #include <gtest/gtest.h> #endif #include <TNL/Math.h> #ifdef HAVE_GTEST TEST( MathTest, variadic_min ) { using TNL::min; EXPECT_EQ( min(1, 2, 3, 4), 1 ); EXPECT_EQ( min(1, 2, 4, 3), 1 ); EXPECT_EQ( min(1, 3, 2, 4), 1 ); EXPECT_EQ( min(1, 3, 4, 2), 1 ); EXPECT_EQ( min(1, 4, 2, 3), 1 ); EXPECT_EQ( min(1, 4, 3, 2), 1 ); EXPECT_EQ( min(2, 1, 3, 4), 1 ); EXPECT_EQ( min(2, 1, 4, 3), 1 ); EXPECT_EQ( min(2, 3, 1, 4), 1 ); EXPECT_EQ( min(2, 3, 4, 1), 1 ); EXPECT_EQ( min(2, 4, 1, 3), 1 ); EXPECT_EQ( min(2, 4, 3, 1), 1 ); EXPECT_EQ( min(3, 1, 2, 4), 1 ); EXPECT_EQ( min(3, 1, 4, 2), 1 ); EXPECT_EQ( min(3, 2, 1, 4), 1 ); EXPECT_EQ( min(3, 2, 4, 1), 1 ); EXPECT_EQ( min(3, 4, 1, 2), 1 ); EXPECT_EQ( min(3, 4, 2, 1), 1 ); EXPECT_EQ( min(4, 1, 2, 3), 1 ); EXPECT_EQ( min(4, 1, 3, 2), 1 ); EXPECT_EQ( min(4, 2, 1, 3), 1 ); EXPECT_EQ( min(4, 2, 3, 1), 1 ); EXPECT_EQ( min(4, 3, 1, 2), 1 ); EXPECT_EQ( min(4, 3, 2, 1), 1 ); } TEST( MathTest, variadic_max ) { using TNL::max; EXPECT_EQ( max(1, 2, 3, 4), 4 ); EXPECT_EQ( max(1, 2, 4, 3), 4 ); EXPECT_EQ( max(1, 3, 2, 4), 4 ); EXPECT_EQ( max(1, 3, 4, 2), 4 ); EXPECT_EQ( max(1, 4, 2, 3), 4 ); EXPECT_EQ( max(1, 4, 3, 2), 4 ); EXPECT_EQ( max(2, 1, 3, 4), 4 ); EXPECT_EQ( max(2, 1, 4, 3), 4 ); EXPECT_EQ( max(2, 3, 1, 4), 4 ); EXPECT_EQ( max(2, 3, 4, 1), 4 ); EXPECT_EQ( max(2, 4, 1, 3), 4 ); EXPECT_EQ( max(2, 4, 3, 1), 4 ); EXPECT_EQ( max(3, 1, 2, 4), 4 ); EXPECT_EQ( max(3, 1, 4, 2), 4 ); EXPECT_EQ( max(3, 2, 1, 4), 4 ); EXPECT_EQ( max(3, 2, 4, 1), 4 ); EXPECT_EQ( max(3, 4, 1, 2), 4 ); EXPECT_EQ( max(3, 4, 2, 1), 4 ); EXPECT_EQ( max(4, 1, 2, 3), 4 ); EXPECT_EQ( max(4, 1, 3, 2), 4 ); EXPECT_EQ( max(4, 2, 1, 3), 4 ); EXPECT_EQ( max(4, 2, 3, 1), 4 ); EXPECT_EQ( max(4, 3, 1, 2), 4 ); EXPECT_EQ( max(4, 3, 2, 1), 4 ); } #endif #include "main.h" Loading
src/TNL/Math.h +27 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,19 @@ ResultType min( const T1& a, const T2& b ) #endif } /** * \brief This function returns minimum of a variadic number of inputs. * * The inputs are folded with the \ref min function from the left to the right. */ template< typename T1, typename T2, typename T3, typename... Ts > __cuda_callable__ typename std::common_type< T1, T2, T3, Ts... >::type min( T1&& val1, T2&& val2, T3&& val3, Ts&&... vs ) { return min( min( std::forward<T1>(val1), std::forward<T2>(val2) ), std::forward<T3>(val3), std::forward<Ts>(vs)... ); } /** * \brief This function returns maximum of two numbers. Loading @@ -68,6 +81,20 @@ ResultType max( const T1& a, const T2& b ) #endif } /** * \brief This function returns minimum of a variadic number of inputs. * * The inputs are folded with the \ref max function from the left to the right. */ template< typename T1, typename T2, typename T3, typename... Ts > __cuda_callable__ typename std::common_type< T1, T2, T3, Ts... >::type max( T1&& val1, T2&& val2, T3&& val3, Ts&&... vs ) { return max( max( std::forward<T1>(val1), std::forward<T2>(val2) ), std::forward<T3>(val3), std::forward<Ts>(vs)... ); } /** * \brief This function returns absolute value of given number \e n. */ Loading
src/UnitTests/CMakeLists.txt +1 −1 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ ADD_SUBDIRECTORY( Functions ) ADD_SUBDIRECTORY( Meshes ) ADD_SUBDIRECTORY( Pointers ) set( CPP_TESTS AssertTest FileNameTest StringTest ObjectTest TimerTest TypeInfoTest ) set( CPP_TESTS AssertTest FileNameTest MathTest ObjectTest StringTest TimerTest TypeInfoTest ) set( CUDA_TESTS AssertCudaTest ) if( BUILD_CUDA ) set( CUDA_TESTS ${CUDA_TESTS} AllocatorsTest FileTest ) Loading
src/UnitTests/MathTest.cpp 0 → 100644 +79 −0 Original line number Diff line number Diff line /*************************************************************************** MathTest.cpp - description ------------------- begin : Dec 17, 2020 copyright : (C) 2020 by Tomas Oberhuber et al. email : tomas.oberhuber@fjfi.cvut.cz ***************************************************************************/ /* See Copyright Notice in tnl/Copyright */ #ifdef HAVE_GTEST #include <gtest/gtest.h> #endif #include <TNL/Math.h> #ifdef HAVE_GTEST TEST( MathTest, variadic_min ) { using TNL::min; EXPECT_EQ( min(1, 2, 3, 4), 1 ); EXPECT_EQ( min(1, 2, 4, 3), 1 ); EXPECT_EQ( min(1, 3, 2, 4), 1 ); EXPECT_EQ( min(1, 3, 4, 2), 1 ); EXPECT_EQ( min(1, 4, 2, 3), 1 ); EXPECT_EQ( min(1, 4, 3, 2), 1 ); EXPECT_EQ( min(2, 1, 3, 4), 1 ); EXPECT_EQ( min(2, 1, 4, 3), 1 ); EXPECT_EQ( min(2, 3, 1, 4), 1 ); EXPECT_EQ( min(2, 3, 4, 1), 1 ); EXPECT_EQ( min(2, 4, 1, 3), 1 ); EXPECT_EQ( min(2, 4, 3, 1), 1 ); EXPECT_EQ( min(3, 1, 2, 4), 1 ); EXPECT_EQ( min(3, 1, 4, 2), 1 ); EXPECT_EQ( min(3, 2, 1, 4), 1 ); EXPECT_EQ( min(3, 2, 4, 1), 1 ); EXPECT_EQ( min(3, 4, 1, 2), 1 ); EXPECT_EQ( min(3, 4, 2, 1), 1 ); EXPECT_EQ( min(4, 1, 2, 3), 1 ); EXPECT_EQ( min(4, 1, 3, 2), 1 ); EXPECT_EQ( min(4, 2, 1, 3), 1 ); EXPECT_EQ( min(4, 2, 3, 1), 1 ); EXPECT_EQ( min(4, 3, 1, 2), 1 ); EXPECT_EQ( min(4, 3, 2, 1), 1 ); } TEST( MathTest, variadic_max ) { using TNL::max; EXPECT_EQ( max(1, 2, 3, 4), 4 ); EXPECT_EQ( max(1, 2, 4, 3), 4 ); EXPECT_EQ( max(1, 3, 2, 4), 4 ); EXPECT_EQ( max(1, 3, 4, 2), 4 ); EXPECT_EQ( max(1, 4, 2, 3), 4 ); EXPECT_EQ( max(1, 4, 3, 2), 4 ); EXPECT_EQ( max(2, 1, 3, 4), 4 ); EXPECT_EQ( max(2, 1, 4, 3), 4 ); EXPECT_EQ( max(2, 3, 1, 4), 4 ); EXPECT_EQ( max(2, 3, 4, 1), 4 ); EXPECT_EQ( max(2, 4, 1, 3), 4 ); EXPECT_EQ( max(2, 4, 3, 1), 4 ); EXPECT_EQ( max(3, 1, 2, 4), 4 ); EXPECT_EQ( max(3, 1, 4, 2), 4 ); EXPECT_EQ( max(3, 2, 1, 4), 4 ); EXPECT_EQ( max(3, 2, 4, 1), 4 ); EXPECT_EQ( max(3, 4, 1, 2), 4 ); EXPECT_EQ( max(3, 4, 2, 1), 4 ); EXPECT_EQ( max(4, 1, 2, 3), 4 ); EXPECT_EQ( max(4, 1, 3, 2), 4 ); EXPECT_EQ( max(4, 2, 1, 3), 4 ); EXPECT_EQ( max(4, 2, 3, 1), 4 ); EXPECT_EQ( max(4, 3, 1, 2), 4 ); EXPECT_EQ( max(4, 3, 2, 1), 4 ); } #endif #include "main.h"