Unit tests update
This commit is contained in:
parent
f343945ff7
commit
2459126924
|
@ -161,7 +161,10 @@ FString::FString (const wchar_t s[])
|
||||||
, bufsize(0)
|
, bufsize(0)
|
||||||
, c_string(0)
|
, c_string(0)
|
||||||
{
|
{
|
||||||
if ( s )
|
if ( ! s )
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ( s[0] )
|
||||||
_assign (s);
|
_assign (s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -177,12 +180,8 @@ FString::FString (const std::string& s)
|
||||||
|
|
||||||
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());
|
||||||
|
|
||||||
if ( wc_string )
|
|
||||||
{
|
|
||||||
_assign( wc_string );
|
_assign( wc_string );
|
||||||
delete[] wc_string;
|
delete[] wc_string;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -195,14 +194,13 @@ FString::FString (const char s[])
|
||||||
if ( ! s )
|
if ( ! s )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if ( ! s[0] )
|
||||||
|
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);
|
||||||
|
|
||||||
if ( wc_string )
|
|
||||||
{
|
|
||||||
_assign (wc_string);
|
_assign (wc_string);
|
||||||
delete[] wc_string;
|
delete[] wc_string;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -879,9 +877,12 @@ sInt16 FString::toShort() const
|
||||||
register long num;
|
register long num;
|
||||||
num = toLong();
|
num = toLong();
|
||||||
|
|
||||||
if ( num > SHRT_MAX || num < SHRT_MIN )
|
if ( num > SHRT_MAX )
|
||||||
throw std::overflow_error ("overflow");
|
throw std::overflow_error ("overflow");
|
||||||
|
|
||||||
|
if ( num < SHRT_MIN )
|
||||||
|
throw std::underflow_error ("underflow");
|
||||||
|
|
||||||
return sInt16(num);
|
return sInt16(num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -889,7 +890,7 @@ sInt16 FString::toShort() const
|
||||||
uInt16 FString::toUShort() const
|
uInt16 FString::toUShort() const
|
||||||
{
|
{
|
||||||
register uLong num;
|
register uLong num;
|
||||||
num = uLong(toLong());
|
num = uLong(toULong());
|
||||||
|
|
||||||
if ( num > USHRT_MAX )
|
if ( num > USHRT_MAX )
|
||||||
throw std::overflow_error ("overflow");
|
throw std::overflow_error ("overflow");
|
||||||
|
@ -903,9 +904,12 @@ int FString::toInt() const
|
||||||
register long num;
|
register long num;
|
||||||
num = toLong();
|
num = toLong();
|
||||||
|
|
||||||
if ( num > INT_MAX || num < INT_MIN )
|
if ( num > INT_MAX )
|
||||||
throw std::overflow_error ("overflow");
|
throw std::overflow_error ("overflow");
|
||||||
|
|
||||||
|
if ( num < INT_MIN )
|
||||||
|
throw std::underflow_error ("underflow");
|
||||||
|
|
||||||
return int(num);
|
return int(num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -913,7 +917,7 @@ int FString::toInt() const
|
||||||
uInt FString::toUInt() const
|
uInt FString::toUInt() const
|
||||||
{
|
{
|
||||||
register uLong num;
|
register uLong num;
|
||||||
num = uLong(toLong());
|
num = uLong(toULong());
|
||||||
|
|
||||||
if ( num > UINT_MAX )
|
if ( num > UINT_MAX )
|
||||||
throw std::overflow_error ("overflow");
|
throw std::overflow_error ("overflow");
|
||||||
|
@ -963,6 +967,9 @@ long FString::toLong() const
|
||||||
if ( num > tenth_limit
|
if ( num > tenth_limit
|
||||||
|| (num == tenth_limit && d > tenth_limit_digit) )
|
|| (num == tenth_limit && d > tenth_limit_digit) )
|
||||||
{
|
{
|
||||||
|
if ( neg )
|
||||||
|
throw std::underflow_error ("underflow");
|
||||||
|
else
|
||||||
throw std::overflow_error ("overflow");
|
throw std::overflow_error ("overflow");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1000,7 +1007,11 @@ uLong FString::toULong() const
|
||||||
if ( ! *p )
|
if ( ! *p )
|
||||||
throw std::invalid_argument ("empty value");
|
throw std::invalid_argument ("empty value");
|
||||||
|
|
||||||
if ( *p == L'+' )
|
if ( *p == L'-' )
|
||||||
|
{
|
||||||
|
throw std::underflow_error ("underflow");
|
||||||
|
}
|
||||||
|
else if ( *p == L'+' )
|
||||||
{
|
{
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
|
@ -1031,9 +1042,12 @@ float FString::toFloat() const
|
||||||
register double num;
|
register double num;
|
||||||
num = toDouble();
|
num = toDouble();
|
||||||
|
|
||||||
if ( num > double(FLT_MAX) || num < double(FLT_MIN) )
|
if ( num > double(FLT_MAX) )
|
||||||
throw std::overflow_error ("overflow");
|
throw std::overflow_error ("overflow");
|
||||||
|
|
||||||
|
if ( num < double(-FLT_MAX) )
|
||||||
|
throw std::underflow_error ("underflow");
|
||||||
|
|
||||||
return float(num);
|
return float(num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,7 @@ class FStringTest : public CPPUNIT_NS::TestFixture
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FStringTest()
|
FStringTest()
|
||||||
|
: s(0)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
void setUp();
|
void setUp();
|
||||||
|
@ -72,7 +73,10 @@ class FStringTest : public CPPUNIT_NS::TestFixture
|
||||||
void streamExtractionTest();
|
void streamExtractionTest();
|
||||||
void subscriptOperatorTest();
|
void subscriptOperatorTest();
|
||||||
void functionCallOperatorTest();
|
void functionCallOperatorTest();
|
||||||
|
void formatTest();
|
||||||
|
void convertToNumberTest();
|
||||||
void exceptionTest();
|
void exceptionTest();
|
||||||
|
void trimTest();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
FString* s;
|
FString* s;
|
||||||
|
@ -97,7 +101,10 @@ class FStringTest : public CPPUNIT_NS::TestFixture
|
||||||
CPPUNIT_TEST (streamExtractionTest);
|
CPPUNIT_TEST (streamExtractionTest);
|
||||||
CPPUNIT_TEST (subscriptOperatorTest);
|
CPPUNIT_TEST (subscriptOperatorTest);
|
||||||
CPPUNIT_TEST (functionCallOperatorTest);
|
CPPUNIT_TEST (functionCallOperatorTest);
|
||||||
|
CPPUNIT_TEST (formatTest);
|
||||||
|
CPPUNIT_TEST (convertToNumberTest);
|
||||||
CPPUNIT_TEST (exceptionTest);
|
CPPUNIT_TEST (exceptionTest);
|
||||||
|
CPPUNIT_TEST (trimTest);
|
||||||
|
|
||||||
// End of test suite definition
|
// End of test suite definition
|
||||||
CPPUNIT_TEST_SUITE_END();
|
CPPUNIT_TEST_SUITE_END();
|
||||||
|
@ -691,6 +698,10 @@ void FStringTest::streamInsertionTest()
|
||||||
out << sInt16(INT_LEAST16_MIN);
|
out << sInt16(INT_LEAST16_MIN);
|
||||||
CPPUNIT_ASSERT ( out == L"-32768" );
|
CPPUNIT_ASSERT ( out == L"-32768" );
|
||||||
|
|
||||||
|
out.clear();
|
||||||
|
out << uInt16(UINT_LEAST16_MAX);
|
||||||
|
CPPUNIT_ASSERT ( out == L"65535" );
|
||||||
|
|
||||||
out.clear();
|
out.clear();
|
||||||
out << int(1234567);
|
out << int(1234567);
|
||||||
CPPUNIT_ASSERT ( out == L"1234567" );
|
CPPUNIT_ASSERT ( out == L"1234567" );
|
||||||
|
@ -808,6 +819,72 @@ void FStringTest::functionCallOperatorTest()
|
||||||
CPPUNIT_ASSERT ( copy == "teststring" );
|
CPPUNIT_ASSERT ( copy == "teststring" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FStringTest::formatTest()
|
||||||
|
{
|
||||||
|
FString str;
|
||||||
|
int num = 3;
|
||||||
|
char location[] = "zoo";
|
||||||
|
str.sprintf ("There are %d lions in the %s", num, location);
|
||||||
|
CPPUNIT_ASSERT ( str == "There are 3 lions in the zoo" );
|
||||||
|
|
||||||
|
str.sprintf (L"It costs only %d cent", 50);
|
||||||
|
CPPUNIT_ASSERT ( str == "It costs only 50 cent" );
|
||||||
|
|
||||||
|
std::setlocale (LC_NUMERIC, "C");
|
||||||
|
FString fnum1, fnum2;
|
||||||
|
|
||||||
|
#if defined(__LP64__) || defined(_LP64)
|
||||||
|
// 64-bit architecture
|
||||||
|
fnum1.setFormatedNumber(0xffffffffffffffff, '\'');
|
||||||
|
CPPUNIT_ASSERT ( fnum1 == "18'446'744'073'709'551'615" );
|
||||||
|
|
||||||
|
fnum2.setFormatedNumber(-9223372036854775807);
|
||||||
|
CPPUNIT_ASSERT ( fnum2 == "-9 223 372 036 854 775 807" );
|
||||||
|
#else
|
||||||
|
// 32-bit architecture
|
||||||
|
fnum1.setFormatedNumber(0xffffffff, '\'');
|
||||||
|
CPPUNIT_ASSERT ( fnum1 == "4'294'967'295" );
|
||||||
|
|
||||||
|
fnum2.setFormatedNumber(-2147483647);
|
||||||
|
CPPUNIT_ASSERT ( fnum2 == "-2 147 483 647" );
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FStringTest::convertToNumberTest()
|
||||||
|
{
|
||||||
|
FString str = "-127";
|
||||||
|
CPPUNIT_ASSERT ( str.toShort() == -127 );
|
||||||
|
|
||||||
|
str = "255";
|
||||||
|
CPPUNIT_ASSERT ( str.toUShort() == 255 );
|
||||||
|
|
||||||
|
str = "-32768";
|
||||||
|
CPPUNIT_ASSERT ( str.toInt() == -32768 );
|
||||||
|
|
||||||
|
str = "65535";
|
||||||
|
CPPUNIT_ASSERT ( str.toUInt() == 65535 );
|
||||||
|
|
||||||
|
str = "-2147483647";
|
||||||
|
CPPUNIT_ASSERT ( str.toLong() == -2147483647 );
|
||||||
|
|
||||||
|
str = "4294967295";
|
||||||
|
CPPUNIT_ASSERT ( str.toULong() == 4294967295 );
|
||||||
|
|
||||||
|
str = "3.14159";
|
||||||
|
CPPUNIT_ASSERT ( str.toFloat() == 3.14159f );
|
||||||
|
|
||||||
|
str = "-3.14159";
|
||||||
|
CPPUNIT_ASSERT ( str.toFloat() == -3.14159f );
|
||||||
|
|
||||||
|
str = "3.141592653589793238";
|
||||||
|
CPPUNIT_ASSERT ( str.toDouble() == 3.141592653589793238 );
|
||||||
|
|
||||||
|
str = "-3.141592653589793238";
|
||||||
|
CPPUNIT_ASSERT ( str.toDouble() == -3.141592653589793238 );
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FStringTest::exceptionTest()
|
void FStringTest::exceptionTest()
|
||||||
{
|
{
|
||||||
|
@ -815,10 +892,86 @@ void FStringTest::exceptionTest()
|
||||||
, std::invalid_argument );
|
, std::invalid_argument );
|
||||||
|
|
||||||
CPPUNIT_ASSERT_THROW ( FString("abc")[3]
|
CPPUNIT_ASSERT_THROW ( FString("abc")[3]
|
||||||
, std::out_of_range);
|
, std::out_of_range );
|
||||||
|
|
||||||
CPPUNIT_ASSERT_THROW ( FString("abc")[-1]
|
CPPUNIT_ASSERT_THROW ( FString("abc")[-1]
|
||||||
, std::out_of_range);
|
, std::out_of_range );
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_THROW ( FString("99999").toShort()
|
||||||
|
, std::overflow_error );
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_THROW ( FString("-99999").toShort()
|
||||||
|
, std::underflow_error );
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_THROW ( FString("99999").toUShort()
|
||||||
|
, std::overflow_error );
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_THROW ( FString("-1").toUShort()
|
||||||
|
, std::underflow_error );
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_THROW ( FString("9999999999").toInt()
|
||||||
|
, std::overflow_error );
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_THROW ( FString("-9999999999").toInt()
|
||||||
|
, std::underflow_error );
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_THROW ( FString("9999999999").toUInt()
|
||||||
|
, std::overflow_error );
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_THROW ( FString("-1").toUInt()
|
||||||
|
, std::underflow_error );
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_THROW ( FString("9999999999999999999").toLong()
|
||||||
|
, std::overflow_error );
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_THROW ( FString("-9999999999999999999").toLong()
|
||||||
|
, std::underflow_error );
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_THROW ( FString("99999999999999999999").toULong()
|
||||||
|
, std::overflow_error );
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_THROW ( FString("-1").toULong()
|
||||||
|
, std::underflow_error );
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_THROW ( FString().toLong()
|
||||||
|
, std::invalid_argument );
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_THROW ( FString("").toLong()
|
||||||
|
, std::invalid_argument );
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_THROW ( FString("one").toLong()
|
||||||
|
, std::invalid_argument );
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_THROW ( FString().toULong()
|
||||||
|
, std::invalid_argument );
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_THROW ( FString("").toULong()
|
||||||
|
, std::invalid_argument );
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_THROW ( FString("one").toULong()
|
||||||
|
, std::invalid_argument );
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FStringTest::trimTest()
|
||||||
|
{
|
||||||
|
const FString& trim_str1 = L"\r\n\t A string \n\t";
|
||||||
|
CPPUNIT_ASSERT ( trim_str1.rtrim() == L"\r\n\t A string" );
|
||||||
|
CPPUNIT_ASSERT ( trim_str1.ltrim() == L"A string \n\t" );
|
||||||
|
CPPUNIT_ASSERT ( trim_str1.trim() == L"A string" );
|
||||||
|
|
||||||
|
const FString& trim_str2 = L"\n \n\n";
|
||||||
|
CPPUNIT_ASSERT ( trim_str2.rtrim().isEmpty() );
|
||||||
|
CPPUNIT_ASSERT ( trim_str2.rtrim().isNull() );
|
||||||
|
CPPUNIT_ASSERT ( trim_str2.rtrim().getLength() == 0 );
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT ( trim_str2.ltrim().isEmpty() );
|
||||||
|
CPPUNIT_ASSERT ( trim_str2.ltrim().isNull() );
|
||||||
|
CPPUNIT_ASSERT ( trim_str2.ltrim().getLength() == 0 );
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT ( trim_str2.trim().isEmpty() );
|
||||||
|
CPPUNIT_ASSERT ( trim_str2.trim().isNull() );
|
||||||
|
CPPUNIT_ASSERT ( trim_str2.trim().getLength() == 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Put the test suite in the registry
|
// Put the test suite in the registry
|
||||||
|
|
Loading…
Reference in New Issue