2017-11-01 22:07:41 +01:00
|
|
|
#include <ebcl/Strings.hh>
|
2017-11-01 20:14:23 +01:00
|
|
|
#include <cppunit/extensions/HelperMacros.h>
|
2017-11-01 22:07:41 +01:00
|
|
|
using namespace ebcl;
|
2017-11-01 20:14:23 +01:00
|
|
|
|
|
|
|
|
|
|
|
/*= StringsDynamicTest ========================================================*/
|
|
|
|
|
|
|
|
class StringsDynamicTest : public CppUnit::TestFixture
|
|
|
|
{
|
|
|
|
CPPUNIT_TEST_SUITE( StringsDynamicTest );
|
|
|
|
CPPUNIT_TEST( testNoPool );
|
|
|
|
CPPUNIT_TEST( testPoolReg );
|
|
|
|
CPPUNIT_TEST( testPoolPersist );
|
|
|
|
CPPUNIT_TEST( testTStringPooled );
|
|
|
|
CPPUNIT_TEST( testDynamicCons );
|
|
|
|
CPPUNIT_TEST( testUsePool );
|
|
|
|
CPPUNIT_TEST_SUITE_END( );
|
|
|
|
|
|
|
|
private:
|
|
|
|
static const char TEST_STRING_1[];
|
|
|
|
static const char TEST_STRING_2[];
|
|
|
|
static const char TEST_STRING_3[];
|
|
|
|
static const char TEST_STRING_4[];
|
|
|
|
static const char TEST_STRING_5[];
|
|
|
|
static const char TEST_STRING_6[];
|
|
|
|
|
|
|
|
public:
|
|
|
|
void testNoPool( );
|
|
|
|
void testPoolReg( );
|
|
|
|
void testPoolPersist( );
|
|
|
|
void testTStringPooled( );
|
|
|
|
void testDynamicCons( );
|
|
|
|
void testUsePool( );
|
|
|
|
};
|
|
|
|
|
|
|
|
CPPUNIT_TEST_SUITE_REGISTRATION( StringsDynamicTest );
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
const char StringsDynamicTest::TEST_STRING_1[] = "Dynamic strings test 1";
|
|
|
|
const char StringsDynamicTest::TEST_STRING_2[] = "Dynamic strings test 2";
|
|
|
|
const char StringsDynamicTest::TEST_STRING_3[] = "Dynamic strings test 3";
|
|
|
|
const char StringsDynamicTest::TEST_STRING_4[] = "Dynamic strings test 4";
|
|
|
|
const char StringsDynamicTest::TEST_STRING_5[] = "Dynamic strings test 5";
|
|
|
|
const char StringsDynamicTest::TEST_STRING_6[] = "Dynamic strings test 6";
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
void StringsDynamicTest::testNoPool( )
|
|
|
|
{
|
|
|
|
T_String test1( TEST_STRING_1 ) , test2( TEST_STRING_1 );
|
|
|
|
CPPUNIT_ASSERT( test1.data( ) != test2.data( ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
void StringsDynamicTest::testPoolReg( )
|
|
|
|
{
|
|
|
|
const T_String pooled( std::move(
|
|
|
|
T_String( TEST_STRING_2 ).addToPool( ) ) );
|
|
|
|
const T_String test1( TEST_STRING_2 ) , test2( TEST_STRING_2 );
|
|
|
|
CPPUNIT_ASSERT( test1.data( ) == pooled.data( ) );
|
|
|
|
CPPUNIT_ASSERT( test2.data( ) == pooled.data( ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
void StringsDynamicTest::testPoolPersist( )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
T_String( TEST_STRING_3 ).addToPool( );
|
|
|
|
}
|
|
|
|
const T_String test1( TEST_STRING_3 ) , test2( TEST_STRING_3 );
|
|
|
|
CPPUNIT_ASSERT( test1.data( ) == test2.data( ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
void StringsDynamicTest::testTStringPooled( )
|
|
|
|
{
|
|
|
|
const T_String pooled( T_String::Pooled( TEST_STRING_4 ) );
|
|
|
|
const T_String test( TEST_STRING_4 );
|
|
|
|
CPPUNIT_ASSERT( test.data( ) == pooled.data( ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
void StringsDynamicTest::testDynamicCons( )
|
|
|
|
{
|
|
|
|
const T_String pooled( T_String::Pooled( TEST_STRING_5 ) );
|
|
|
|
const T_String test( TEST_STRING_5 , strlen( TEST_STRING_5 ) );
|
|
|
|
CPPUNIT_ASSERT( test.data( ) != pooled.data( ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
void StringsDynamicTest::testUsePool( )
|
|
|
|
{
|
|
|
|
T_String test( TEST_STRING_6 );
|
|
|
|
const T_String pooled( T_String::Pooled( TEST_STRING_6 ) );
|
|
|
|
CPPUNIT_ASSERT( test.data( ) != pooled.data( ) );
|
|
|
|
test.usePool( );
|
|
|
|
CPPUNIT_ASSERT( test.data( ) == pooled.data( ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*= StringsStaticTest ========================================================*/
|
|
|
|
|
|
|
|
class StringsStaticTest : public CppUnit::TestFixture
|
|
|
|
{
|
|
|
|
CPPUNIT_TEST_SUITE( StringsStaticTest );
|
|
|
|
CPPUNIT_TEST( testEmpty );
|
|
|
|
CPPUNIT_TEST( testUnpooled );
|
|
|
|
CPPUNIT_TEST( testPooled );
|
|
|
|
CPPUNIT_TEST_SUITE_END( );
|
|
|
|
|
|
|
|
private:
|
|
|
|
static const char TEST_STRING_1[];
|
|
|
|
static const char TEST_STRING_2[];
|
|
|
|
|
|
|
|
public:
|
|
|
|
void testEmpty( );
|
|
|
|
void testUnpooled( );
|
|
|
|
void testPooled( );
|
|
|
|
};
|
|
|
|
|
|
|
|
const char StringsStaticTest::TEST_STRING_1[] = "Static strings test 1";
|
|
|
|
const char StringsStaticTest::TEST_STRING_2[] = "Static strings test 2";
|
|
|
|
|
|
|
|
CPPUNIT_TEST_SUITE_REGISTRATION( StringsStaticTest );
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
void StringsStaticTest::testEmpty( )
|
|
|
|
{
|
|
|
|
T_String test1 , test2( "" ) , test3( T_String::Pooled( "" ) );
|
|
|
|
CPPUNIT_ASSERT( test1.data( ) == nullptr );
|
|
|
|
CPPUNIT_ASSERT_EQUAL( uint32_t( 0 ) , test1.length( ) );
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT( test2.data( ) == nullptr );
|
|
|
|
CPPUNIT_ASSERT_EQUAL( uint32_t( 0 ) , test2.length( ) );
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT( test3.data( ) == nullptr );
|
|
|
|
CPPUNIT_ASSERT_EQUAL( uint32_t( 0 ) , test3.length( ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
void StringsStaticTest::testUnpooled( )
|
|
|
|
{
|
|
|
|
T_String test1( TEST_STRING_1 ) , test2( TEST_STRING_1 );
|
|
|
|
CPPUNIT_ASSERT( test1.data( ) != test2.data( ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
void StringsStaticTest::testPooled( )
|
|
|
|
{
|
|
|
|
char const* ptr;
|
|
|
|
{
|
|
|
|
const T_String reg( T_String::Pooled( TEST_STRING_2 ) );
|
|
|
|
const T_String test1( TEST_STRING_2 ) , test2( TEST_STRING_2 );
|
|
|
|
CPPUNIT_ASSERT( test1.data( ) == reg.data( ) );
|
|
|
|
CPPUNIT_ASSERT( test2.data( ) == reg.data( ) );
|
|
|
|
|
|
|
|
ptr = reg.data( );
|
|
|
|
}
|
|
|
|
{
|
|
|
|
const T_String test( TEST_STRING_2 );
|
|
|
|
CPPUNIT_ASSERT( test.data( ) == ptr );
|
|
|
|
}
|
|
|
|
{
|
|
|
|
const T_String test( T_String::Pooled( TEST_STRING_2 ) );
|
|
|
|
CPPUNIT_ASSERT( test.data( ) == ptr );
|
|
|
|
}
|
|
|
|
{
|
|
|
|
const T_String test( TEST_STRING_2 , strlen( TEST_STRING_2 ) );
|
|
|
|
CPPUNIT_ASSERT( test.data( ) != ptr );
|
|
|
|
}
|
|
|
|
{
|
|
|
|
T_String test( TEST_STRING_2 , strlen( TEST_STRING_2 ) );
|
|
|
|
test.usePool( );
|
|
|
|
CPPUNIT_ASSERT( test.data( ) == ptr );
|
|
|
|
}
|
|
|
|
{
|
|
|
|
T_String test( TEST_STRING_2 , strlen( TEST_STRING_2 ) );
|
|
|
|
test.addToPool( );
|
|
|
|
CPPUNIT_ASSERT( test.data( ) == ptr );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*= SubstringsTest ===========================================================*/
|
|
|
|
|
|
|
|
class SubstringsTest : public CppUnit::TestFixture
|
|
|
|
{
|
|
|
|
CPPUNIT_TEST_SUITE( SubstringsTest );
|
|
|
|
CPPUNIT_TEST( testLeft );
|
|
|
|
CPPUNIT_TEST( testRight );
|
|
|
|
CPPUNIT_TEST( testSubstr );
|
|
|
|
CPPUNIT_TEST( testRange );
|
|
|
|
CPPUNIT_TEST( testPooling );
|
|
|
|
CPPUNIT_TEST_SUITE_END( );
|
|
|
|
|
|
|
|
private:
|
|
|
|
static const char TEST_STRING[];
|
|
|
|
|
|
|
|
public:
|
|
|
|
void testLeft( );
|
|
|
|
void testRight( );
|
|
|
|
void testSubstr( );
|
|
|
|
void testRange( );
|
|
|
|
void testPooling( );
|
|
|
|
};
|
|
|
|
|
|
|
|
const char SubstringsTest::TEST_STRING[] = "abcdefghijkl";
|
|
|
|
|
|
|
|
CPPUNIT_TEST_SUITE_REGISTRATION( SubstringsTest );
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
void SubstringsTest::testLeft( )
|
|
|
|
{
|
|
|
|
const T_String s( TEST_STRING );
|
|
|
|
{
|
|
|
|
const T_String sub( s.left( 4 ) );
|
|
|
|
CPPUNIT_ASSERT( sub == "abcd" );
|
|
|
|
}
|
|
|
|
{
|
|
|
|
const T_String sub( s.left( 0 ) );
|
|
|
|
CPPUNIT_ASSERT( sub == "" );
|
|
|
|
}
|
|
|
|
{
|
|
|
|
const T_String sub( s.left( s.length( ) * 2 ) );
|
|
|
|
CPPUNIT_ASSERT( sub == s );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
void SubstringsTest::testRight( )
|
|
|
|
{
|
|
|
|
const T_String s( TEST_STRING );
|
|
|
|
{
|
|
|
|
const T_String sub( s.right( 4 ) );
|
|
|
|
CPPUNIT_ASSERT( sub == "ijkl" );
|
|
|
|
}
|
|
|
|
{
|
|
|
|
const T_String sub( s.right( 0 ) );
|
|
|
|
CPPUNIT_ASSERT( sub == "" );
|
|
|
|
}
|
|
|
|
{
|
|
|
|
const T_String sub( s.right( s.length( ) * 2 ) );
|
|
|
|
CPPUNIT_ASSERT( sub == s );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
void SubstringsTest::testSubstr( )
|
|
|
|
{
|
|
|
|
const T_String s( TEST_STRING );
|
|
|
|
{
|
|
|
|
const T_String sub( s.substr( 2 ) );
|
|
|
|
CPPUNIT_ASSERT( sub == "cdefghijkl" );
|
|
|
|
}
|
|
|
|
{
|
|
|
|
const T_String sub( s.substr( 2 , 2 ) );
|
|
|
|
CPPUNIT_ASSERT( sub == "cd" );
|
|
|
|
}
|
|
|
|
{
|
|
|
|
const T_String sub( s.substr( 0 ) );
|
|
|
|
CPPUNIT_ASSERT( sub == s );
|
|
|
|
}
|
|
|
|
{
|
|
|
|
const T_String sub( s.substr( 0 , 2 ) );
|
|
|
|
CPPUNIT_ASSERT( sub == "ab" );
|
|
|
|
}
|
|
|
|
{
|
|
|
|
const T_String sub( s.substr( s.length( ) ) );
|
|
|
|
CPPUNIT_ASSERT( sub == "" );
|
|
|
|
}
|
|
|
|
{
|
|
|
|
const T_String sub( s.substr( 0 , 0 ) );
|
|
|
|
CPPUNIT_ASSERT( sub == "" );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
void SubstringsTest::testRange( )
|
|
|
|
{
|
|
|
|
const T_String s( TEST_STRING );
|
|
|
|
{
|
|
|
|
const T_String sub( s.range( 2 , UINT32_MAX ) );
|
|
|
|
CPPUNIT_ASSERT( sub == "cdefghijkl" );
|
|
|
|
}
|
|
|
|
{
|
|
|
|
const T_String sub( s.range( 2 , 3 ) );
|
|
|
|
CPPUNIT_ASSERT( sub == "cd" );
|
|
|
|
}
|
|
|
|
{
|
|
|
|
const T_String sub( s.range( 0 , UINT32_MAX ) );
|
|
|
|
CPPUNIT_ASSERT( sub == s );
|
|
|
|
}
|
|
|
|
{
|
|
|
|
const T_String sub( s.range( 0 , 1 ) );
|
|
|
|
CPPUNIT_ASSERT( sub == "ab" );
|
|
|
|
}
|
|
|
|
{
|
|
|
|
const T_String sub( s.range( s.length( ) , UINT32_MAX ) );
|
|
|
|
CPPUNIT_ASSERT( sub == "" );
|
|
|
|
}
|
|
|
|
{
|
|
|
|
const T_String sub( s.range( 0 , 0 ) );
|
|
|
|
CPPUNIT_ASSERT( sub == "a" );
|
|
|
|
}
|
|
|
|
{
|
|
|
|
const T_String sub( s.range( 1 , 0 ) );
|
|
|
|
CPPUNIT_ASSERT( sub == "" );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
void SubstringsTest::testPooling( )
|
|
|
|
{
|
|
|
|
const T_String s( TEST_STRING );
|
|
|
|
const T_String pooled( T_String::Pooled( "abcd" ) );
|
|
|
|
|
|
|
|
T_String sub( s.left( 4 ) );
|
|
|
|
CPPUNIT_ASSERT( sub == pooled );
|
|
|
|
CPPUNIT_ASSERT( sub.data( ) != pooled.data( ) );
|
|
|
|
|
|
|
|
sub.addToPool( );
|
|
|
|
CPPUNIT_ASSERT( sub == pooled );
|
|
|
|
CPPUNIT_ASSERT( sub.data( ) == pooled.data( ) );
|
|
|
|
}
|