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