Unit tests update

This commit is contained in:
Markus Gans 2018-03-05 03:15:16 +01:00
parent 2459126924
commit d97f03027e
2 changed files with 66 additions and 25 deletions

View File

@ -139,7 +139,9 @@ FString::FString (const FString& s) // copy constructor
, bufsize(0) , bufsize(0)
, c_string(0) , c_string(0)
{ {
if ( s.string ) if ( s.isNull() )
return;
else
_assign (s.string); _assign (s.string);
} }
@ -150,7 +152,9 @@ FString::FString (const std::wstring& s)
, bufsize(0) , bufsize(0)
, c_string(0) , c_string(0)
{ {
if ( ! s.empty() ) if ( s.empty() )
_assign (L"");
else
_assign (s.c_str()); _assign (s.c_str());
} }
@ -164,7 +168,12 @@ FString::FString (const wchar_t s[])
if ( ! s ) if ( ! s )
return; return;
if ( s[0] ) if ( ! s[0] )
{
_assign(L"");
return;
}
else
_assign (s); _assign (s);
} }
@ -176,7 +185,10 @@ FString::FString (const std::string& s)
, c_string(0) , c_string(0)
{ {
if ( s.empty() ) if ( s.empty() )
{
_assign(L"");
return; return;
}
const wchar_t* wc_string; const wchar_t* wc_string;
wc_string = c_to_wc_str(s.c_str()); wc_string = c_to_wc_str(s.c_str());
@ -195,7 +207,10 @@ FString::FString (const char s[])
return; return;
if ( ! s[0] ) if ( ! s[0] )
{
_assign(L"");
return; return;
}
const wchar_t* wc_string; const wchar_t* wc_string;
wc_string = c_to_wc_str(s); wc_string = c_to_wc_str(s);
@ -211,7 +226,10 @@ FString::FString (const wchar_t c)
, c_string(0) , c_string(0)
{ {
if ( c == 0 ) if ( c == 0 )
{
_assign(L"");
return; return;
}
wchar_t s[2]; wchar_t s[2];
s[0] = c; s[0] = c;
@ -227,7 +245,10 @@ FString::FString (const char c)
, c_string(0) , c_string(0)
{ {
if ( c == 0 ) if ( c == 0 )
{
_assign(L"");
return; return;
}
wchar_t s[2]; wchar_t s[2];
s[0] = wchar_t(c & 0xff); s[0] = wchar_t(c & 0xff);
@ -250,11 +271,7 @@ FString::~FString() // destructor
//---------------------------------------------------------------------- //----------------------------------------------------------------------
FString& FString::operator = (const FString& s) FString& FString::operator = (const FString& s)
{ {
if ( s )
_assign (s.string); _assign (s.string);
else
clear();
return *this; return *this;
} }
@ -1042,10 +1059,10 @@ float FString::toFloat() const
register double num; register double num;
num = toDouble(); num = toDouble();
if ( num > double(FLT_MAX) ) if ( num > double(FLT_MAX) || num < double(-FLT_MAX) )
throw std::overflow_error ("overflow"); throw std::overflow_error ("overflow");
if ( num < double(-FLT_MAX) ) if ( std::fabs(num) < FLT_EPSILON ) // num == 0.0f
throw std::underflow_error ("underflow"); throw std::underflow_error ("underflow");
return float(num); return float(num);
@ -1116,7 +1133,7 @@ FString FString::rtrim() const
s.length--; s.length--;
if ( last == p && std::iswspace(wint_t(*last)) ) if ( last == p && std::iswspace(wint_t(*last)) )
s.clear(); s = L"";
else else
*(last + 1) = '\0'; *(last + 1) = '\0';

View File

@ -145,14 +145,13 @@ void FStringTest::NoArgumentTest()
CPPUNIT_ASSERT ( str.size() == 0 ); CPPUNIT_ASSERT ( str.size() == 0 );
CPPUNIT_ASSERT ( str.empty() ); CPPUNIT_ASSERT ( str.empty() );
const FString fstr = str; const FString fstr = str;
CPPUNIT_ASSERT ( fstr == empty ); CPPUNIT_ASSERT ( ! fstr.isNull() );
CPPUNIT_ASSERT ( empty == '\0' ); CPPUNIT_ASSERT ( fstr.isEmpty() );
CPPUNIT_ASSERT ( empty == L'\0' );
cstr = 0; cstr = 0;
CPPUNIT_ASSERT ( empty == cstr ); CPPUNIT_ASSERT ( empty == cstr );
wcstr = 0; wcstr = 0;
CPPUNIT_ASSERT ( empty == std::string() ); CPPUNIT_ASSERT ( empty == wcstr );
CPPUNIT_ASSERT ( empty == std::wstring() );
CPPUNIT_ASSERT ( ! empty.includes('A') ); CPPUNIT_ASSERT ( ! empty.includes('A') );
CPPUNIT_ASSERT ( ! empty.includes(L'A') ); CPPUNIT_ASSERT ( ! empty.includes(L'A') );
@ -822,14 +821,15 @@ void FStringTest::functionCallOperatorTest()
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void FStringTest::formatTest() void FStringTest::formatTest()
{ {
FString str; FString str1;
int num = 3; int num = 3;
char location[] = "zoo"; char location[] = "zoo";
str.sprintf ("There are %d lions in the %s", num, location); str1.sprintf ("There are %d lions in the %s", num, location);
CPPUNIT_ASSERT ( str == "There are 3 lions in the zoo" ); CPPUNIT_ASSERT ( str1 == "There are 3 lions in the zoo" );
str.sprintf (L"It costs only %d cent", 50); FString str2;
CPPUNIT_ASSERT ( str == "It costs only 50 cent" ); str2.sprintf (L"It costs only %d cent", 50);
CPPUNIT_ASSERT ( str2 == "It costs only 50 cent" );
std::setlocale (LC_NUMERIC, "C"); std::setlocale (LC_NUMERIC, "C");
FString fnum1, fnum2; FString fnum1, fnum2;
@ -869,9 +869,15 @@ void FStringTest::convertToNumberTest()
str = "-2147483647"; str = "-2147483647";
CPPUNIT_ASSERT ( str.toLong() == -2147483647 ); CPPUNIT_ASSERT ( str.toLong() == -2147483647 );
str = "+987654321";
CPPUNIT_ASSERT ( str.toLong() == 987654321 );
str = "4294967295"; str = "4294967295";
CPPUNIT_ASSERT ( str.toULong() == 4294967295 ); CPPUNIT_ASSERT ( str.toULong() == 4294967295 );
str = "+1234567890";
CPPUNIT_ASSERT ( str.toULong() == 1234567890 );
str = "3.14159"; str = "3.14159";
CPPUNIT_ASSERT ( str.toFloat() == 3.14159f ); CPPUNIT_ASSERT ( str.toFloat() == 3.14159f );
@ -950,6 +956,24 @@ void FStringTest::exceptionTest()
CPPUNIT_ASSERT_THROW ( FString("one").toULong() CPPUNIT_ASSERT_THROW ( FString("one").toULong()
, std::invalid_argument ); , std::invalid_argument );
CPPUNIT_ASSERT_THROW ( FString("1E+42").toFloat()
, std::overflow_error );
CPPUNIT_ASSERT_THROW ( FString("-1E+42").toFloat()
, std::overflow_error );
CPPUNIT_ASSERT_THROW ( FString("1.19209290E-08").toFloat()
, std::underflow_error );
CPPUNIT_ASSERT_THROW ( FString("1.7976931348623157E+309").toDouble()
, std::overflow_error );
CPPUNIT_ASSERT_THROW ( FString("-1.7976931348623157E+309").toDouble()
, std::overflow_error );
CPPUNIT_ASSERT_THROW ( FString("2.225074e-310").toDouble()
, std::underflow_error );
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
@ -962,15 +986,15 @@ void FStringTest::trimTest()
const FString& trim_str2 = L"\n \n\n"; const FString& trim_str2 = L"\n \n\n";
CPPUNIT_ASSERT ( trim_str2.rtrim().isEmpty() ); CPPUNIT_ASSERT ( trim_str2.rtrim().isEmpty() );
CPPUNIT_ASSERT ( trim_str2.rtrim().isNull() ); CPPUNIT_ASSERT ( ! trim_str2.rtrim().isNull() );
CPPUNIT_ASSERT ( trim_str2.rtrim().getLength() == 0 ); CPPUNIT_ASSERT ( trim_str2.rtrim().getLength() == 0 );
CPPUNIT_ASSERT ( trim_str2.ltrim().isEmpty() ); CPPUNIT_ASSERT ( trim_str2.ltrim().isEmpty() );
CPPUNIT_ASSERT ( trim_str2.ltrim().isNull() ); CPPUNIT_ASSERT ( ! trim_str2.ltrim().isNull() );
CPPUNIT_ASSERT ( trim_str2.ltrim().getLength() == 0 ); CPPUNIT_ASSERT ( trim_str2.ltrim().getLength() == 0 );
CPPUNIT_ASSERT ( trim_str2.trim().isEmpty() ); CPPUNIT_ASSERT ( trim_str2.trim().isEmpty() );
CPPUNIT_ASSERT ( trim_str2.trim().isNull() ); CPPUNIT_ASSERT ( ! trim_str2.trim().isNull() );
CPPUNIT_ASSERT ( trim_str2.trim().getLength() == 0 ); CPPUNIT_ASSERT ( trim_str2.trim().getLength() == 0 );
} }