From 658c2b5964559d0164c3c7203b28122dbd836a5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Klinkovsk=C3=BD?= <klinkjak@fjfi.cvut.cz> Date: Mon, 31 Jul 2017 09:19:19 +0200 Subject: [PATCH] Tests for List --- src/TNL/Containers/List.h | 6 -- src/TNL/Containers/List_impl.h | 4 +- src/UnitTests/Containers/ListTest.cpp | 96 ++++++++++++++++++++++++++- 3 files changed, 96 insertions(+), 10 deletions(-) diff --git a/src/TNL/Containers/List.h b/src/TNL/Containers/List.h index adb163374d..0ec42106de 100644 --- a/src/TNL/Containers/List.h +++ b/src/TNL/Containers/List.h @@ -10,7 +10,6 @@ #pragma once -#include <stdlib.h> #include <iostream> #include <TNL/Assert.h> @@ -41,9 +40,7 @@ template< class T > class ListDataElement; */ template< class T > class List { - public: - typedef T ElementType; //! Basic constructor @@ -118,7 +115,6 @@ template< class T > class List bool DeepLoad( File& file ); protected: - //! Pointer to the first element ListDataElement< T >* first; @@ -135,8 +131,6 @@ template< class T > class List //! Iterator index mutable int index; - - }; template< typename T > std::ostream& operator << ( std::ostream& str, const List< T >& list ); diff --git a/src/TNL/Containers/List_impl.h b/src/TNL/Containers/List_impl.h index 158c47aaed..136f4cc986 100644 --- a/src/TNL/Containers/List_impl.h +++ b/src/TNL/Containers/List_impl.h @@ -203,9 +203,7 @@ template< typename T > template< typename Array > void List< T >::toArray( Array& array ) { - TNL_ASSERT( this->getSize() <= array.getSize(), - std::cerr << "this->getSize() = " << this->getSize() - << " array.getSize() = " << array.getSize() << std::endl; ); + array.setSize( this->getSize() ); for( int i = 0; i < this->getSize(); i++ ) array[ i ] = ( *this )[ i ]; } diff --git a/src/UnitTests/Containers/ListTest.cpp b/src/UnitTests/Containers/ListTest.cpp index 2b4974de88..ec81c1f0bf 100644 --- a/src/UnitTests/Containers/ListTest.cpp +++ b/src/UnitTests/Containers/ListTest.cpp @@ -14,8 +14,102 @@ #include <TNL/Containers/List.h> using namespace TNL; +using namespace TNL::Containers; -// TODO + +// test fixture for typed tests +template< typename List > +class ListTest : public ::testing::Test +{ +protected: + using ListType = List; +}; + +// types for which ListTest is instantiated +using ListTypes = ::testing::Types< + List< short >, + List< int >, + List< long >, + List< float >, + List< double >, + List< String > +>; + +TYPED_TEST_CASE( ListTest, ListTypes ); + + +TYPED_TEST( ListTest, constructor ) +{ + using ListType = typename TestFixture::ListType; + + ListType list; + EXPECT_TRUE( list.isEmpty() ); + EXPECT_EQ( list.getSize(), 0 ); + + list.Append( 0 ); + EXPECT_EQ( list.getSize(), 1 ); + + ListType copy( list ); + list.Append( 0 ); + EXPECT_EQ( list.getSize(), 2 ); + EXPECT_EQ( copy.getSize(), 1 ); + EXPECT_EQ( copy[ 0 ], list[ 0 ] ); +} + +TYPED_TEST( ListTest, operations ) +{ + using ListType = typename TestFixture::ListType; + using ElementType = typename ListType::ElementType; + + ListType a, b; + + a.Append( 0 ); + a.Append( 1 ); + a.Prepend( 2 ); + a.Insert( 3, 1 ); + EXPECT_EQ( a.getSize(), 4 ); + EXPECT_EQ( a[ 0 ], (ElementType) 2 ); + EXPECT_EQ( a[ 1 ], (ElementType) 3 ); + EXPECT_EQ( a[ 2 ], (ElementType) 0 ); + EXPECT_EQ( a[ 3 ], (ElementType) 1 ); + + b = a; + EXPECT_EQ( b.getSize(), 4 ); + EXPECT_EQ( a, b ); + + b.Insert( 4, 4 ); + EXPECT_NE( a, b ); + EXPECT_EQ( b[ 4 ], (ElementType) 4 ); + + a.AppendList( b ); + EXPECT_EQ( a.getSize(), 9 ); + EXPECT_EQ( a[ 0 ], (ElementType) 2 ); + EXPECT_EQ( a[ 1 ], (ElementType) 3 ); + EXPECT_EQ( a[ 2 ], (ElementType) 0 ); + EXPECT_EQ( a[ 3 ], (ElementType) 1 ); + EXPECT_EQ( a[ 4 ], (ElementType) 2 ); + EXPECT_EQ( a[ 5 ], (ElementType) 3 ); + EXPECT_EQ( a[ 6 ], (ElementType) 0 ); + EXPECT_EQ( a[ 7 ], (ElementType) 1 ); + EXPECT_EQ( a[ 8 ], (ElementType) 4 ); + + a.PrependList( b ); + EXPECT_EQ( a.getSize(), 14 ); + EXPECT_EQ( a[ 0 ], (ElementType) 2 ); + EXPECT_EQ( a[ 1 ], (ElementType) 3 ); + EXPECT_EQ( a[ 2 ], (ElementType) 0 ); + EXPECT_EQ( a[ 3 ], (ElementType) 1 ); + EXPECT_EQ( a[ 4 ], (ElementType) 4 ); + EXPECT_EQ( a[ 5 ], (ElementType) 2 ); + EXPECT_EQ( a[ 6 ], (ElementType) 3 ); + EXPECT_EQ( a[ 7 ], (ElementType) 0 ); + EXPECT_EQ( a[ 8 ], (ElementType) 1 ); + EXPECT_EQ( a[ 9 ], (ElementType) 2 ); + EXPECT_EQ( a[ 10 ], (ElementType) 3 ); + EXPECT_EQ( a[ 11 ], (ElementType) 0 ); + EXPECT_EQ( a[ 12 ], (ElementType) 1 ); + EXPECT_EQ( a[ 13 ], (ElementType) 4 ); +} #endif -- GitLab