Commit 658c2b59 authored by Jakub Klinkovský's avatar Jakub Klinkovský
Browse files

Tests for List

parent 0a4c9f2c
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -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 );
+1 −3
Original line number Diff line number Diff line
@@ -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 ];
}
+95 −1
Original line number Diff line number Diff line
@@ -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