187d2adbcSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 387d2adbcSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 487d2adbcSAndrew Rist * or more contributor license agreements. See the NOTICE file 587d2adbcSAndrew Rist * distributed with this work for additional information 687d2adbcSAndrew Rist * regarding copyright ownership. The ASF licenses this file 787d2adbcSAndrew Rist * to you under the Apache License, Version 2.0 (the 887d2adbcSAndrew Rist * "License"); you may not use this file except in compliance 987d2adbcSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 1187d2adbcSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 1387d2adbcSAndrew Rist * Unless required by applicable law or agreed to in writing, 1487d2adbcSAndrew Rist * software distributed under the License is distributed on an 1587d2adbcSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 1687d2adbcSAndrew Rist * KIND, either express or implied. See the License for the 1787d2adbcSAndrew Rist * specific language governing permissions and limitations 1887d2adbcSAndrew Rist * under the License. 19cdf0e10cSrcweir * 2087d2adbcSAndrew Rist *************************************************************/ 2187d2adbcSAndrew Rist 2287d2adbcSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir 25cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 26cdf0e10cSrcweir #include "precompiled_sal.hxx" 27cdf0e10cSrcweir // autogenerated file with codegen.pl 28cdf0e10cSrcweir 29cdf0e10cSrcweir #include <math.h> 30cdf0e10cSrcweir #include <stdio.h> 31cdf0e10cSrcweir 32cdf0e10cSrcweir #include <algorithm> // STL 33cdf0e10cSrcweir 34*1a7dd8bbSDamjan Jovanovic #include "gtest/gtest.h" 35cdf0e10cSrcweir #include "stringhelper.hxx" 36cdf0e10cSrcweir #include "valueequal.hxx" 37cdf0e10cSrcweir 38cdf0e10cSrcweir inline void printOUString( ::rtl::OUString const & _suStr ) 39cdf0e10cSrcweir { 40cdf0e10cSrcweir rtl::OString aString; 41cdf0e10cSrcweir 42*1a7dd8bbSDamjan Jovanovic printf( "OUString: " ); 43cdf0e10cSrcweir aString = ::rtl::OUStringToOString( _suStr, RTL_TEXTENCODING_ASCII_US ); 44*1a7dd8bbSDamjan Jovanovic printf( "'%s'\n", aString.getStr( ) ); 45cdf0e10cSrcweir } 46cdf0e10cSrcweir 47cdf0e10cSrcweir namespace rtl_OUString 48cdf0e10cSrcweir { 49cdf0e10cSrcweir 50*1a7dd8bbSDamjan Jovanovic class ctors_rtl_uString : public ::testing::Test 51cdf0e10cSrcweir { 52cdf0e10cSrcweir public: 53*1a7dd8bbSDamjan Jovanovic }; 54*1a7dd8bbSDamjan Jovanovic 55cdf0e10cSrcweir /// test of OUString(rtl_uString*) 56*1a7dd8bbSDamjan Jovanovic TEST_F(ctors_rtl_uString, ctors_001) 57cdf0e10cSrcweir { 58cdf0e10cSrcweir rtl::OUString *pStr = new rtl::OUString( rtl::OUString::createFromAscii("a String") ); 59cdf0e10cSrcweir 60cdf0e10cSrcweir rtl::OUString aStrToTest(pStr->pData); 61cdf0e10cSrcweir delete pStr; 62cdf0e10cSrcweir 63cdf0e10cSrcweir // maybe here should we do something with current memory 64cdf0e10cSrcweir char* pBuffer = (char*) malloc(2 * 8); 65cdf0e10cSrcweir memset(pBuffer, 0, 2 * 8); 66cdf0e10cSrcweir free(pBuffer); 67cdf0e10cSrcweir 68cdf0e10cSrcweir sal_Bool bResult = aStrToTest.equals(rtl::OUString::createFromAscii("a String")); 69*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(bResult == sal_True) << "String must not be empty"; 70cdf0e10cSrcweir } 71cdf0e10cSrcweir 72cdf0e10cSrcweir // ----------------------------------------------------------------------------- 73*1a7dd8bbSDamjan Jovanovic class valueOf : public ::testing::Test 74cdf0e10cSrcweir { 75*1a7dd8bbSDamjan Jovanovic protected: 76cdf0e10cSrcweir void valueOf_float_test_impl(float _nValue) 77cdf0e10cSrcweir { 78cdf0e10cSrcweir rtl::OUString suValue; 79cdf0e10cSrcweir suValue = rtl::OUString::valueOf( _nValue ); 80cdf0e10cSrcweir rtl::OString sValue; 81cdf0e10cSrcweir sValue <<= suValue; 82*1a7dd8bbSDamjan Jovanovic printf("nFloat := %.9f sValue := %s\n", _nValue, sValue.getStr()); 83cdf0e10cSrcweir 84cdf0e10cSrcweir float nValueATOF = static_cast<float>(atof( sValue.getStr() )); 85cdf0e10cSrcweir 86cdf0e10cSrcweir bool bEqualResult = is_float_equal(_nValue, nValueATOF); 87*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(bEqualResult == true) << "Values are not equal."; 88cdf0e10cSrcweir } 89cdf0e10cSrcweir 90cdf0e10cSrcweir void valueOf_float_test(float _nValue) 91cdf0e10cSrcweir { 92cdf0e10cSrcweir valueOf_float_test_impl(_nValue); 93cdf0e10cSrcweir 94cdf0e10cSrcweir // test also the negative part. 95cdf0e10cSrcweir float nNegativeValue = -_nValue; 96cdf0e10cSrcweir valueOf_float_test_impl(nNegativeValue); 97cdf0e10cSrcweir } 98cdf0e10cSrcweir 99*1a7dd8bbSDamjan Jovanovic protected: 100cdf0e10cSrcweir 101cdf0e10cSrcweir void valueOf_double_test_impl(double _nValue) 102cdf0e10cSrcweir { 103cdf0e10cSrcweir rtl::OUString suValue; 104cdf0e10cSrcweir suValue = rtl::OUString::valueOf( _nValue ); 105cdf0e10cSrcweir rtl::OString sValue; 106cdf0e10cSrcweir sValue <<= suValue; 107*1a7dd8bbSDamjan Jovanovic printf("nDouble := %.20f sValue := %s\n", _nValue, sValue.getStr()); 108cdf0e10cSrcweir 109cdf0e10cSrcweir double nValueATOF = atof( sValue.getStr() ); 110cdf0e10cSrcweir 111cdf0e10cSrcweir bool bEqualResult = is_double_equal(_nValue, nValueATOF); 112*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(bEqualResult == true) << "Values are not equal."; 113cdf0e10cSrcweir } 114cdf0e10cSrcweir 115cdf0e10cSrcweir void valueOf_double_test(double _nValue) 116cdf0e10cSrcweir { 117cdf0e10cSrcweir valueOf_double_test_impl(_nValue); 118cdf0e10cSrcweir 119cdf0e10cSrcweir // test also the negative part. 120cdf0e10cSrcweir double nNegativeValue = -_nValue; 121cdf0e10cSrcweir valueOf_double_test_impl(nNegativeValue); 122cdf0e10cSrcweir } 123*1a7dd8bbSDamjan Jovanovic }; // class valueOf 124*1a7dd8bbSDamjan Jovanovic 125*1a7dd8bbSDamjan Jovanovic TEST_F(valueOf, valueOf_float_test_001) 126*1a7dd8bbSDamjan Jovanovic { 127*1a7dd8bbSDamjan Jovanovic // this is demonstration code 128*1a7dd8bbSDamjan Jovanovic // ASSERT_TRUE(1 == 1) << "a message"; 129*1a7dd8bbSDamjan Jovanovic float nValue = 3.0f; 130*1a7dd8bbSDamjan Jovanovic valueOf_float_test(nValue); 131*1a7dd8bbSDamjan Jovanovic } 132*1a7dd8bbSDamjan Jovanovic 133*1a7dd8bbSDamjan Jovanovic TEST_F(valueOf, valueOf_float_test_002) 134*1a7dd8bbSDamjan Jovanovic { 135*1a7dd8bbSDamjan Jovanovic float nValue = 3.5f; 136*1a7dd8bbSDamjan Jovanovic valueOf_float_test(nValue); 137*1a7dd8bbSDamjan Jovanovic } 138*1a7dd8bbSDamjan Jovanovic 139*1a7dd8bbSDamjan Jovanovic TEST_F(valueOf, valueOf_float_test_003) 140*1a7dd8bbSDamjan Jovanovic { 141*1a7dd8bbSDamjan Jovanovic float nValue = 3.0625f; 142*1a7dd8bbSDamjan Jovanovic valueOf_float_test(nValue); 143*1a7dd8bbSDamjan Jovanovic } 144*1a7dd8bbSDamjan Jovanovic 145*1a7dd8bbSDamjan Jovanovic TEST_F(valueOf, valueOf_float_test_004) 146*1a7dd8bbSDamjan Jovanovic { 147*1a7dd8bbSDamjan Jovanovic float nValue = 3.502525f; 148*1a7dd8bbSDamjan Jovanovic valueOf_float_test(nValue); 149*1a7dd8bbSDamjan Jovanovic } 150*1a7dd8bbSDamjan Jovanovic 151*1a7dd8bbSDamjan Jovanovic TEST_F(valueOf, valueOf_float_test_005) 152*1a7dd8bbSDamjan Jovanovic { 153*1a7dd8bbSDamjan Jovanovic float nValue = 3.141592f; 154*1a7dd8bbSDamjan Jovanovic valueOf_float_test(nValue); 155*1a7dd8bbSDamjan Jovanovic } 156*1a7dd8bbSDamjan Jovanovic 157*1a7dd8bbSDamjan Jovanovic TEST_F(valueOf, valueOf_float_test_006) 158*1a7dd8bbSDamjan Jovanovic { 159*1a7dd8bbSDamjan Jovanovic float nValue = 3.5025255f; 160*1a7dd8bbSDamjan Jovanovic valueOf_float_test(nValue); 161*1a7dd8bbSDamjan Jovanovic } 162*1a7dd8bbSDamjan Jovanovic 163*1a7dd8bbSDamjan Jovanovic TEST_F(valueOf, valueOf_float_test_007) 164*1a7dd8bbSDamjan Jovanovic { 165*1a7dd8bbSDamjan Jovanovic float nValue = 3.0039062f; 166*1a7dd8bbSDamjan Jovanovic valueOf_float_test(nValue); 167*1a7dd8bbSDamjan Jovanovic } 168cdf0e10cSrcweir 169cdf0e10cSrcweir // valueOf double 170*1a7dd8bbSDamjan Jovanovic TEST_F(valueOf, valueOf_double_test_001) 171cdf0e10cSrcweir { 172cdf0e10cSrcweir double nValue = 3.0; 173cdf0e10cSrcweir valueOf_double_test(nValue); 174cdf0e10cSrcweir } 175*1a7dd8bbSDamjan Jovanovic TEST_F(valueOf, valueOf_double_test_002) 176cdf0e10cSrcweir { 177cdf0e10cSrcweir double nValue = 3.5; 178cdf0e10cSrcweir valueOf_double_test(nValue); 179cdf0e10cSrcweir } 180*1a7dd8bbSDamjan Jovanovic TEST_F(valueOf, valueOf_double_test_003) 181cdf0e10cSrcweir { 182cdf0e10cSrcweir double nValue = 3.0625; 183cdf0e10cSrcweir valueOf_double_test(nValue); 184cdf0e10cSrcweir } 185*1a7dd8bbSDamjan Jovanovic TEST_F(valueOf, valueOf_double_test_004) 186cdf0e10cSrcweir { 187cdf0e10cSrcweir double nValue = 3.1415926535; 188cdf0e10cSrcweir valueOf_double_test(nValue); 189cdf0e10cSrcweir } 190*1a7dd8bbSDamjan Jovanovic TEST_F(valueOf, valueOf_double_test_005) 191cdf0e10cSrcweir { 192cdf0e10cSrcweir double nValue = 3.141592653589793; 193cdf0e10cSrcweir valueOf_double_test(nValue); 194cdf0e10cSrcweir } 195*1a7dd8bbSDamjan Jovanovic TEST_F(valueOf, valueOf_double_test_006) 196cdf0e10cSrcweir { 197cdf0e10cSrcweir double nValue = 3.1415926535897932; 198cdf0e10cSrcweir valueOf_double_test(nValue); 199cdf0e10cSrcweir } 200*1a7dd8bbSDamjan Jovanovic TEST_F(valueOf, valueOf_double_test_007) 201cdf0e10cSrcweir { 202cdf0e10cSrcweir double nValue = 3.14159265358979323; 203cdf0e10cSrcweir valueOf_double_test(nValue); 204cdf0e10cSrcweir } 205*1a7dd8bbSDamjan Jovanovic TEST_F(valueOf, valueOf_double_test_008) 206cdf0e10cSrcweir { 207cdf0e10cSrcweir double nValue = 3.141592653589793238462643; 208cdf0e10cSrcweir valueOf_double_test(nValue); 209cdf0e10cSrcweir } 210cdf0e10cSrcweir 211cdf0e10cSrcweir //------------------------------------------------------------------------ 212cdf0e10cSrcweir // testing the method toDouble() 213cdf0e10cSrcweir //------------------------------------------------------------------------ 214cdf0e10cSrcweir template<class T> 215cdf0e10cSrcweir sal_Int16 SAL_CALL checkPrecisionSize() 216cdf0e10cSrcweir { 217cdf0e10cSrcweir // sal_Int16 nSize = sizeof(T); 218cdf0e10cSrcweir volatile T nCalcValue = 1.0; 219cdf0e10cSrcweir 220cdf0e10cSrcweir 221cdf0e10cSrcweir // (i + 1) is the current precision 222cdf0e10cSrcweir // numerical series 223cdf0e10cSrcweir // 1.1 224cdf0e10cSrcweir // 10.1 225cdf0e10cSrcweir // 100.1 226cdf0e10cSrcweir // ... 227cdf0e10cSrcweir // 1000...0.1 228cdf0e10cSrcweir 229cdf0e10cSrcweir sal_Int16 i = 0; 230cdf0e10cSrcweir for (i=0;i<50;i++) 231cdf0e10cSrcweir { 232cdf0e10cSrcweir nCalcValue *= 10; 233cdf0e10cSrcweir volatile T nValue = nCalcValue + static_cast<T>(0.1); 234cdf0e10cSrcweir volatile T dSub = nValue - nCalcValue; 235cdf0e10cSrcweir // ----- 0.11 ---- 0.1 ---- 0.09 ----- 236cdf0e10cSrcweir if (0.11 > dSub && dSub < 0.09) 237cdf0e10cSrcweir { 238cdf0e10cSrcweir // due to the fact, that the value is break down we sub 1 from the precision value 239cdf0e10cSrcweir // but to suppress this, we start at zero, precision is i+1 till here --i; 240cdf0e10cSrcweir break; 241cdf0e10cSrcweir } 242cdf0e10cSrcweir } 243cdf0e10cSrcweir 244cdf0e10cSrcweir sal_Int16 j= 0; 245cdf0e10cSrcweir nCalcValue = 1.0; 246cdf0e10cSrcweir 247cdf0e10cSrcweir // numerical series 248cdf0e10cSrcweir // 1.1 249cdf0e10cSrcweir // 1.01 250cdf0e10cSrcweir // 1.001 251cdf0e10cSrcweir // ... 252cdf0e10cSrcweir // 1.000...001 253cdf0e10cSrcweir 254cdf0e10cSrcweir for (j=0;j<50;j++) 255cdf0e10cSrcweir { 256cdf0e10cSrcweir nCalcValue /= 10; 257cdf0e10cSrcweir volatile T nValue = nCalcValue + static_cast<T>(1.0); 258cdf0e10cSrcweir volatile T dSub = nValue - static_cast<T>(1.0); 259cdf0e10cSrcweir // ---- 0.02 ----- 0.01 ---- 0 --- -0.99 ---- -0.98 ---- 260cdf0e10cSrcweir // volatile T dSubAbsolut = fabs(dSub); 261cdf0e10cSrcweir // ---- 0.02 ----- 0.01 ---- 0 (cut) 262cdf0e10cSrcweir if ( dSub == 0) 263cdf0e10cSrcweir break; 264cdf0e10cSrcweir } 265cdf0e10cSrcweir if (i != j) 266cdf0e10cSrcweir { 267cdf0e10cSrcweir // hmmm.... 268cdf0e10cSrcweir // imho i +- 1 == j is a good value 269cdf0e10cSrcweir int n = i - j; 270cdf0e10cSrcweir if (n < 0) n = -n; 271cdf0e10cSrcweir if (n <= 1) 272cdf0e10cSrcweir { 273cdf0e10cSrcweir return std::min(i,j); 274cdf0e10cSrcweir } 275cdf0e10cSrcweir else 276cdf0e10cSrcweir { 277*1a7dd8bbSDamjan Jovanovic printf("warning: presision differs more than 1!\n"); 278cdf0e10cSrcweir } 279cdf0e10cSrcweir } 280cdf0e10cSrcweir 281cdf0e10cSrcweir return i; 282cdf0e10cSrcweir } 283cdf0e10cSrcweir 284cdf0e10cSrcweir // ----------------------------------------------------------------------------- 285cdf0e10cSrcweir 286cdf0e10cSrcweir class testPrecision 287cdf0e10cSrcweir { 288cdf0e10cSrcweir public: 289cdf0e10cSrcweir testPrecision() 290cdf0e10cSrcweir { 291cdf0e10cSrcweir sal_Int16 nPrecision; 292cdf0e10cSrcweir nPrecision = checkPrecisionSize<float>(); 293*1a7dd8bbSDamjan Jovanovic printf("precision of float: %d sizeof()=%lu \n", nPrecision, sizeof(float)); 294cdf0e10cSrcweir 295cdf0e10cSrcweir nPrecision = checkPrecisionSize<double>(); 296*1a7dd8bbSDamjan Jovanovic printf("precision of double: %d sizeof()=%lu \n", nPrecision, sizeof(double)); 297cdf0e10cSrcweir 298cdf0e10cSrcweir nPrecision = checkPrecisionSize<long double>(); 299*1a7dd8bbSDamjan Jovanovic printf("precision of long double: %d sizeof()=%lu \n", nPrecision, sizeof(long double)); 300cdf0e10cSrcweir 301cdf0e10cSrcweir } 302cdf0e10cSrcweir 303cdf0e10cSrcweir }; 304cdf0e10cSrcweir 305*1a7dd8bbSDamjan Jovanovic class toInt: public ::testing::Test { 306cdf0e10cSrcweir public: 307*1a7dd8bbSDamjan Jovanovic }; 308*1a7dd8bbSDamjan Jovanovic 309*1a7dd8bbSDamjan Jovanovic TEST_F(toInt, test) { 310*1a7dd8bbSDamjan Jovanovic ASSERT_EQ( 311cdf0e10cSrcweir static_cast< sal_Int32 >(-0x76543210), 312cdf0e10cSrcweir (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("-76543210")). 313cdf0e10cSrcweir toInt32(16))); 314*1a7dd8bbSDamjan Jovanovic ASSERT_EQ( 315cdf0e10cSrcweir static_cast< sal_Int32 >(0xFEDCBA98), 316cdf0e10cSrcweir (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("+FEDCBA98")). 317cdf0e10cSrcweir toInt32(16))); 318*1a7dd8bbSDamjan Jovanovic ASSERT_EQ( 319cdf0e10cSrcweir static_cast< sal_Int64 >(-SAL_CONST_INT64(0x76543210FEDCBA98)), 320cdf0e10cSrcweir (rtl::OUString( 321cdf0e10cSrcweir RTL_CONSTASCII_USTRINGPARAM("-76543210FEDCBA98")). 322cdf0e10cSrcweir toInt64(16))); 323*1a7dd8bbSDamjan Jovanovic ASSERT_EQ( 324cdf0e10cSrcweir static_cast< sal_Int64 >(SAL_CONST_INT64(0xFEDCBA9876543210)), 325cdf0e10cSrcweir (rtl::OUString( 326cdf0e10cSrcweir RTL_CONSTASCII_USTRINGPARAM("+FEDCBA9876543210")). 327cdf0e10cSrcweir toInt64(16))); 328cdf0e10cSrcweir } 329cdf0e10cSrcweir 330cdf0e10cSrcweir // ----------------------------------------------------------------------------- 331cdf0e10cSrcweir // - toDouble (tests) 332cdf0e10cSrcweir // ----------------------------------------------------------------------------- 333*1a7dd8bbSDamjan Jovanovic class toDouble : public ::testing::Test 334cdf0e10cSrcweir { 335cdf0e10cSrcweir public: 336cdf0e10cSrcweir void toDouble_test_impl(rtl::OString const& _sValue) 337cdf0e10cSrcweir { 338*1a7dd8bbSDamjan Jovanovic //printf("the original str is %s\n", _sValue.getStr()); 339cdf0e10cSrcweir double nValueATOF = atof( _sValue.getStr() ); 340*1a7dd8bbSDamjan Jovanovic //printf("original data is %e\n", nValueATOF); 341cdf0e10cSrcweir rtl::OUString suValue = rtl::OUString::createFromAscii( _sValue.getStr() ); 342cdf0e10cSrcweir double nValueToDouble = suValue.toDouble(); 343*1a7dd8bbSDamjan Jovanovic //printf("result data is %e\n", nValueToDouble); 344cdf0e10cSrcweir 345cdf0e10cSrcweir bool bEqualResult = is_double_equal(nValueToDouble, nValueATOF); 346*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(bEqualResult == true) << "Values are not equal."; 347cdf0e10cSrcweir } 348cdf0e10cSrcweir 349cdf0e10cSrcweir void toDouble_test(rtl::OString const& _sValue) 350cdf0e10cSrcweir { 351cdf0e10cSrcweir toDouble_test_impl(_sValue); 352cdf0e10cSrcweir 353cdf0e10cSrcweir // test also the negativ part. 354cdf0e10cSrcweir rtl::OString sNegativValue("-"); 355cdf0e10cSrcweir sNegativValue += _sValue; 356cdf0e10cSrcweir toDouble_test_impl(sNegativValue); 357cdf0e10cSrcweir } 358*1a7dd8bbSDamjan Jovanovic }; // class toDouble 359cdf0e10cSrcweir 360*1a7dd8bbSDamjan Jovanovic TEST_F(toDouble, toDouble_selftest) 361cdf0e10cSrcweir { 362*1a7dd8bbSDamjan Jovanovic printf("Start selftest:\n"); 363*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_double_equal(1.0, 1.01) == false); 364*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_double_equal(1.0, 1.001) == false); 365*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_double_equal(1.0, 1.0001) == false); 366*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_double_equal(1.0, 1.00001) == false); 367*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_double_equal(1.0, 1.000001) == false); 368*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_double_equal(1.0, 1.0000001) == false); 369*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_double_equal(1.0, 1.00000001) == false); 370*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_double_equal(1.0, 1.000000001) == false); 371*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_double_equal(1.0, 1.0000000001) == false); 372*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_double_equal(1.0, 1.00000000001) == false); 373*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_double_equal(1.0, 1.000000000001) == false); 374*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_double_equal(1.0, 1.0000000000001) == false); 375cdf0e10cSrcweir // we check til 15 values after comma 376*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_double_equal(1.0, 1.00000000000001) == true); 377*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_double_equal(1.0, 1.000000000000001) == true); 378*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_double_equal(1.0, 1.0000000000000001) == true); 379*1a7dd8bbSDamjan Jovanovic printf("Selftest done.\n"); 380cdf0e10cSrcweir } 381cdf0e10cSrcweir 382*1a7dd8bbSDamjan Jovanovic TEST_F(toDouble, toDouble_test_3) 383cdf0e10cSrcweir { 384cdf0e10cSrcweir rtl::OString sValue("3"); 385cdf0e10cSrcweir toDouble_test(sValue); 386cdf0e10cSrcweir } 387*1a7dd8bbSDamjan Jovanovic TEST_F(toDouble, toDouble_test_3_5) 388cdf0e10cSrcweir { 389cdf0e10cSrcweir rtl::OString sValue("3.5"); 390cdf0e10cSrcweir toDouble_test(sValue); 391cdf0e10cSrcweir } 392*1a7dd8bbSDamjan Jovanovic TEST_F(toDouble, toDouble_test_3_0625) 393cdf0e10cSrcweir { 394cdf0e10cSrcweir rtl::OString sValue("3.0625"); 395cdf0e10cSrcweir toDouble_test(sValue); 396cdf0e10cSrcweir } 397*1a7dd8bbSDamjan Jovanovic TEST_F(toDouble, toDouble_test_pi) 398cdf0e10cSrcweir { 399cdf0e10cSrcweir // value from http://www.angio.net/pi/digits/50.txt 400cdf0e10cSrcweir rtl::OString sValue("3.141592653589793238462643383279502884197169399375"); 401cdf0e10cSrcweir toDouble_test(sValue); 402cdf0e10cSrcweir } 403cdf0e10cSrcweir 404*1a7dd8bbSDamjan Jovanovic TEST_F(toDouble, toDouble_test_1) 405cdf0e10cSrcweir { 406cdf0e10cSrcweir rtl::OString sValue("1"); 407cdf0e10cSrcweir toDouble_test(sValue); 408cdf0e10cSrcweir } 409*1a7dd8bbSDamjan Jovanovic TEST_F(toDouble, toDouble_test_10) 410cdf0e10cSrcweir { 411cdf0e10cSrcweir rtl::OString sValue("10"); 412cdf0e10cSrcweir toDouble_test(sValue); 413cdf0e10cSrcweir } 414*1a7dd8bbSDamjan Jovanovic TEST_F(toDouble, toDouble_test_100) 415cdf0e10cSrcweir { 416cdf0e10cSrcweir rtl::OString sValue("100"); 417cdf0e10cSrcweir toDouble_test(sValue); 418cdf0e10cSrcweir } 419*1a7dd8bbSDamjan Jovanovic TEST_F(toDouble, toDouble_test_1000) 420cdf0e10cSrcweir { 421cdf0e10cSrcweir rtl::OString sValue("1000"); 422cdf0e10cSrcweir toDouble_test(sValue); 423cdf0e10cSrcweir } 424*1a7dd8bbSDamjan Jovanovic TEST_F(toDouble, toDouble_test_10000) 425cdf0e10cSrcweir { 426cdf0e10cSrcweir rtl::OString sValue("10000"); 427cdf0e10cSrcweir toDouble_test(sValue); 428cdf0e10cSrcweir } 429*1a7dd8bbSDamjan Jovanovic TEST_F(toDouble, toDouble_test_1e99) 430cdf0e10cSrcweir { 431cdf0e10cSrcweir rtl::OString sValue("1e99"); 432cdf0e10cSrcweir toDouble_test(sValue); 433cdf0e10cSrcweir } 434*1a7dd8bbSDamjan Jovanovic TEST_F(toDouble, toDouble_test_1e_n99) 435cdf0e10cSrcweir { 436cdf0e10cSrcweir rtl::OString sValue("1e-99"); 437cdf0e10cSrcweir toDouble_test(sValue); 438cdf0e10cSrcweir } 439*1a7dd8bbSDamjan Jovanovic TEST_F(toDouble, toDouble_test_1e308) 440cdf0e10cSrcweir { 441cdf0e10cSrcweir rtl::OString sValue("1e308"); 442cdf0e10cSrcweir toDouble_test(sValue); 443cdf0e10cSrcweir } 444cdf0e10cSrcweir 445cdf0e10cSrcweir // ----------------------------------------------------------------------------- 446cdf0e10cSrcweir // - toFloat (tests) 447cdf0e10cSrcweir // ----------------------------------------------------------------------------- 448*1a7dd8bbSDamjan Jovanovic class toFloat : public ::testing::Test 449cdf0e10cSrcweir { 450cdf0e10cSrcweir public: 451cdf0e10cSrcweir void toFloat_test_impl(rtl::OString const& _sValue) 452cdf0e10cSrcweir { 453*1a7dd8bbSDamjan Jovanovic //printf("the original str is %s\n", _sValue.getStr()); 454cdf0e10cSrcweir float nValueATOF = static_cast<float>(atof( _sValue.getStr() )); 455*1a7dd8bbSDamjan Jovanovic //printf("the original str is %.10f\n", nValueATOF); 456cdf0e10cSrcweir rtl::OUString suValue = rtl::OUString::createFromAscii( _sValue.getStr() ); 457cdf0e10cSrcweir float nValueToFloat = suValue.toFloat(); 458*1a7dd8bbSDamjan Jovanovic //printf("the result str is %.10f\n", nValueToFloat); 459cdf0e10cSrcweir 460cdf0e10cSrcweir bool bEqualResult = is_float_equal(nValueToFloat, nValueATOF); 461*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(bEqualResult == true) << "Values are not equal."; 462cdf0e10cSrcweir } 463cdf0e10cSrcweir 464cdf0e10cSrcweir void toFloat_test(rtl::OString const& _sValue) 465cdf0e10cSrcweir { 466cdf0e10cSrcweir toFloat_test_impl(_sValue); 467cdf0e10cSrcweir 468cdf0e10cSrcweir // test also the negativ part. 469cdf0e10cSrcweir rtl::OString sNegativValue("-"); 470cdf0e10cSrcweir sNegativValue += _sValue; 471cdf0e10cSrcweir toFloat_test_impl(sNegativValue); 472cdf0e10cSrcweir } 473*1a7dd8bbSDamjan Jovanovic }; // class toFloat 474cdf0e10cSrcweir 475*1a7dd8bbSDamjan Jovanovic TEST_F(toFloat, toFloat_selftest) 476cdf0e10cSrcweir { 477*1a7dd8bbSDamjan Jovanovic printf("Start selftest:\n"); 478*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_float_equal(1.0f, 1.01f) == false); 479*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_float_equal(1.0f, 1.001f) == false); 480*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_float_equal(1.0f, 1.0001f) == false); 481*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_float_equal(1.0f, 1.00001f) == false); 482*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_float_equal(1.0f, 1.000002f) == false); 483*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_float_equal(1.0f, 1.0000001f) == true); 484*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_float_equal(1.0f, 1.00000001f) == true); 485*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE (is_float_equal(1.0f, 1.000000001f) == true); 486cdf0e10cSrcweir 487*1a7dd8bbSDamjan Jovanovic printf("Selftest done.\n"); 488cdf0e10cSrcweir } 489cdf0e10cSrcweir 490*1a7dd8bbSDamjan Jovanovic TEST_F(toFloat, toFloat_test_3) 491cdf0e10cSrcweir { 492cdf0e10cSrcweir rtl::OString sValue("3"); 493cdf0e10cSrcweir toFloat_test(sValue); 494cdf0e10cSrcweir } 495*1a7dd8bbSDamjan Jovanovic TEST_F(toFloat, toFloat_test_3_5) 496cdf0e10cSrcweir { 497cdf0e10cSrcweir rtl::OString sValue("3.5"); 498cdf0e10cSrcweir toFloat_test(sValue); 499cdf0e10cSrcweir } 500*1a7dd8bbSDamjan Jovanovic TEST_F(toFloat, toFloat_test_3_0625) 501cdf0e10cSrcweir { 502cdf0e10cSrcweir rtl::OString sValue("3.0625"); 503cdf0e10cSrcweir toFloat_test(sValue); 504cdf0e10cSrcweir } 505*1a7dd8bbSDamjan Jovanovic TEST_F(toFloat, toFloat_test_3_0625_e) 506cdf0e10cSrcweir { 507cdf0e10cSrcweir rtl::OString sValue("3.0625e-4"); 508cdf0e10cSrcweir toFloat_test(sValue); 509cdf0e10cSrcweir } 510*1a7dd8bbSDamjan Jovanovic TEST_F(toFloat, toFloat_test_pi) 511cdf0e10cSrcweir { 512cdf0e10cSrcweir // value from http://www.angio.net/pi/digits/50.txt 513cdf0e10cSrcweir rtl::OString sValue("3.141592653589793238462643383279502884197169399375"); 514cdf0e10cSrcweir toFloat_test(sValue); 515cdf0e10cSrcweir } 516cdf0e10cSrcweir 517*1a7dd8bbSDamjan Jovanovic TEST_F(toFloat, toFloat_test_1) 518cdf0e10cSrcweir { 519cdf0e10cSrcweir rtl::OString sValue("1"); 520cdf0e10cSrcweir toFloat_test(sValue); 521cdf0e10cSrcweir } 522*1a7dd8bbSDamjan Jovanovic TEST_F(toFloat, toFloat_test_10) 523cdf0e10cSrcweir { 524cdf0e10cSrcweir rtl::OString sValue("10"); 525cdf0e10cSrcweir toFloat_test(sValue); 526cdf0e10cSrcweir } 527*1a7dd8bbSDamjan Jovanovic TEST_F(toFloat, toFloat_test_100) 528cdf0e10cSrcweir { 529cdf0e10cSrcweir rtl::OString sValue("100"); 530cdf0e10cSrcweir toFloat_test(sValue); 531cdf0e10cSrcweir } 532*1a7dd8bbSDamjan Jovanovic TEST_F(toFloat, toFloat_test_1000) 533cdf0e10cSrcweir { 534cdf0e10cSrcweir rtl::OString sValue("1000"); 535cdf0e10cSrcweir toFloat_test(sValue); 536cdf0e10cSrcweir } 537*1a7dd8bbSDamjan Jovanovic TEST_F(toFloat, toFloat_test_10000) 538cdf0e10cSrcweir { 539cdf0e10cSrcweir rtl::OString sValue("10000"); 540cdf0e10cSrcweir toFloat_test(sValue); 541cdf0e10cSrcweir } 542*1a7dd8bbSDamjan Jovanovic TEST_F(toFloat, toFloat_test_mix) 543cdf0e10cSrcweir { 544cdf0e10cSrcweir rtl::OString sValue("456789321455.123456789012"); 545cdf0e10cSrcweir toFloat_test(sValue); 546cdf0e10cSrcweir } 547*1a7dd8bbSDamjan Jovanovic TEST_F(toFloat, toFloat_test_1e99) 548cdf0e10cSrcweir { 549cdf0e10cSrcweir rtl::OString sValue("1e99"); 550cdf0e10cSrcweir toFloat_test(sValue); 551cdf0e10cSrcweir } 552*1a7dd8bbSDamjan Jovanovic TEST_F(toFloat, toFloat_test_1e_n99) 553cdf0e10cSrcweir { 554cdf0e10cSrcweir rtl::OString sValue("1e-9"); 555cdf0e10cSrcweir toFloat_test(sValue); 556cdf0e10cSrcweir } 557*1a7dd8bbSDamjan Jovanovic TEST_F(toFloat, toFloat_test_1e308) 558cdf0e10cSrcweir { 559cdf0e10cSrcweir rtl::OString sValue("1e308"); 560cdf0e10cSrcweir toFloat_test(sValue); 561cdf0e10cSrcweir } 562cdf0e10cSrcweir 563cdf0e10cSrcweir // ----------------------------------------------------------------------------- 564cdf0e10cSrcweir // - lastIndexOf (tests) 565cdf0e10cSrcweir // ----------------------------------------------------------------------------- 566*1a7dd8bbSDamjan Jovanovic class lastIndexOf : public ::testing::Test 567cdf0e10cSrcweir { 568cdf0e10cSrcweir public: 569cdf0e10cSrcweir void lastIndexOf_oustring(rtl::OUString const& _suStr, rtl::OUString const& _suSearchStr, sal_Int32 _nExpectedResultPos) 570cdf0e10cSrcweir { 571cdf0e10cSrcweir // Algorithm 572cdf0e10cSrcweir // search the string _suSearchStr (rtl::OUString) in the string _suStr. 573cdf0e10cSrcweir // check if the _nExpectedResultPos occurs. 574cdf0e10cSrcweir 575cdf0e10cSrcweir sal_Int32 nPos = _suStr.lastIndexOf(_suSearchStr); 576*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(nPos == _nExpectedResultPos) << "expected position is wrong"; 577cdf0e10cSrcweir } 578cdf0e10cSrcweir 579cdf0e10cSrcweir void lastIndexOf_salunicode(rtl::OUString const& _suStr, sal_Unicode _cuSearchChar, sal_Int32 _nExpectedResultPos) 580cdf0e10cSrcweir { 581cdf0e10cSrcweir // Algorithm 582cdf0e10cSrcweir // search the unicode char _suSearchChar (sal_Unicode) in the string _suStr. 583cdf0e10cSrcweir // check if the _nExpectedResultPos occurs. 584cdf0e10cSrcweir 585cdf0e10cSrcweir sal_Int32 nPos = _suStr.lastIndexOf(_cuSearchChar); 586*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(nPos == _nExpectedResultPos) << "expected position is wrong"; 587cdf0e10cSrcweir } 588cdf0e10cSrcweir 589cdf0e10cSrcweir void lastIndexOf_oustring_offset(rtl::OUString const& _suStr, rtl::OUString const& _suSearchStr, sal_Int32 _nExpectedResultPos, sal_Int32 _nStartOffset) 590cdf0e10cSrcweir { 591cdf0e10cSrcweir sal_Int32 nPos = _suStr.lastIndexOf(_suSearchStr, _nStartOffset); 592*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(nPos == _nExpectedResultPos) << "expected position is wrong"; 593cdf0e10cSrcweir } 594cdf0e10cSrcweir 595cdf0e10cSrcweir void lastIndexOf_salunicode_offset(rtl::OUString const& _suStr, sal_Unicode _cuSearchChar, sal_Int32 _nExpectedResultPos, sal_Int32 _nStartOffset) 596cdf0e10cSrcweir { 597cdf0e10cSrcweir sal_Int32 nPos = _suStr.lastIndexOf(_cuSearchChar, _nStartOffset); 598*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(nPos == _nExpectedResultPos) << "expected position is wrong"; 599cdf0e10cSrcweir } 600*1a7dd8bbSDamjan Jovanovic }; // class lastIndexOf 601cdf0e10cSrcweir 602*1a7dd8bbSDamjan Jovanovic TEST_F(lastIndexOf, lastIndexOf_test_oustring_offset_001) 603cdf0e10cSrcweir { 604cdf0e10cSrcweir // search for sun, start at the end, found (pos==0) 605cdf0e10cSrcweir rtl::OUString aStr = rtl::OUString::createFromAscii("sun java system"); 606cdf0e10cSrcweir rtl::OUString aSearchStr = rtl::OUString::createFromAscii("sun"); 607cdf0e10cSrcweir lastIndexOf_oustring_offset(aStr, aSearchStr, 0, aStr.getLength()); 608cdf0e10cSrcweir } 609cdf0e10cSrcweir 610*1a7dd8bbSDamjan Jovanovic TEST_F(lastIndexOf, lastIndexOf_test_oustring_offset_002) 611cdf0e10cSrcweir { 612cdf0e10cSrcweir // search for sun, start at pos = 3, found (pos==0) 613cdf0e10cSrcweir rtl::OUString aStr = rtl::OUString::createFromAscii("sun java system"); 614cdf0e10cSrcweir rtl::OUString aSearchStr = rtl::OUString::createFromAscii("sun"); 615cdf0e10cSrcweir lastIndexOf_oustring_offset(aStr, aSearchStr, 0, 3); 616cdf0e10cSrcweir } 617cdf0e10cSrcweir 618*1a7dd8bbSDamjan Jovanovic TEST_F(lastIndexOf, lastIndexOf_test_oustring_offset_003) 619cdf0e10cSrcweir { 620cdf0e10cSrcweir // search for sun, start at pos = 2, found (pos==-1) 621cdf0e10cSrcweir rtl::OUString aStr = rtl::OUString::createFromAscii("sun java system"); 622cdf0e10cSrcweir rtl::OUString aSearchStr = rtl::OUString::createFromAscii("sun"); 623cdf0e10cSrcweir lastIndexOf_oustring_offset(aStr, aSearchStr, -1, 2); 624cdf0e10cSrcweir } 625cdf0e10cSrcweir 626*1a7dd8bbSDamjan Jovanovic TEST_F(lastIndexOf, lastIndexOf_test_oustring_offset_004) 627cdf0e10cSrcweir { 628cdf0e10cSrcweir // search for sun, start at the end, found (pos==0) 629cdf0e10cSrcweir rtl::OUString aStr = rtl::OUString::createFromAscii("sun java system"); 630cdf0e10cSrcweir rtl::OUString aSearchStr = rtl::OUString::createFromAscii("sun"); 631cdf0e10cSrcweir lastIndexOf_oustring_offset(aStr, aSearchStr, -1, -1); 632cdf0e10cSrcweir } 633cdf0e10cSrcweir 634*1a7dd8bbSDamjan Jovanovic TEST_F(lastIndexOf, lastIndexOf_test_oustring_001) 635cdf0e10cSrcweir { 636cdf0e10cSrcweir // search for sun, found (pos==0) 637cdf0e10cSrcweir rtl::OUString aStr = rtl::OUString::createFromAscii("sun java system"); 638cdf0e10cSrcweir rtl::OUString aSearchStr = rtl::OUString::createFromAscii("sun"); 639cdf0e10cSrcweir lastIndexOf_oustring(aStr, aSearchStr, 0); 640cdf0e10cSrcweir } 641cdf0e10cSrcweir 642*1a7dd8bbSDamjan Jovanovic TEST_F(lastIndexOf, lastIndexOf_test_oustring_002) 643cdf0e10cSrcweir { 644cdf0e10cSrcweir // search for sun, found (pos==4) 645cdf0e10cSrcweir rtl::OUString aStr = rtl::OUString::createFromAscii("the sun java system"); 646cdf0e10cSrcweir rtl::OUString aSearchStr = rtl::OUString::createFromAscii("sun"); 647cdf0e10cSrcweir lastIndexOf_oustring(aStr, aSearchStr, 4); 648cdf0e10cSrcweir } 649cdf0e10cSrcweir 650*1a7dd8bbSDamjan Jovanovic TEST_F(lastIndexOf, lastIndexOf_test_oustring_003) 651cdf0e10cSrcweir { 652cdf0e10cSrcweir // search for sun, found (pos==8) 653cdf0e10cSrcweir rtl::OUString aStr = rtl::OUString::createFromAscii("the sun sun java system"); 654cdf0e10cSrcweir rtl::OUString aSearchStr = rtl::OUString::createFromAscii("sun"); 655cdf0e10cSrcweir lastIndexOf_oustring(aStr, aSearchStr, 8); 656cdf0e10cSrcweir } 657cdf0e10cSrcweir 658*1a7dd8bbSDamjan Jovanovic TEST_F(lastIndexOf, lastIndexOf_test_oustring_004) 659cdf0e10cSrcweir { 660cdf0e10cSrcweir // search for sun, found (pos==8) 661cdf0e10cSrcweir rtl::OUString aStr = rtl::OUString::createFromAscii("the sun sun"); 662cdf0e10cSrcweir rtl::OUString aSearchStr = rtl::OUString::createFromAscii("sun"); 663cdf0e10cSrcweir lastIndexOf_oustring(aStr, aSearchStr, 8); 664cdf0e10cSrcweir } 665cdf0e10cSrcweir 666*1a7dd8bbSDamjan Jovanovic TEST_F(lastIndexOf, lastIndexOf_test_oustring_005) 667cdf0e10cSrcweir { 668cdf0e10cSrcweir // search for sun, found (pos==4) 669cdf0e10cSrcweir rtl::OUString aStr = rtl::OUString::createFromAscii("the sun su"); 670cdf0e10cSrcweir rtl::OUString aSearchStr = rtl::OUString::createFromAscii("sun"); 671cdf0e10cSrcweir lastIndexOf_oustring(aStr, aSearchStr, 4); 672cdf0e10cSrcweir } 673cdf0e10cSrcweir 674*1a7dd8bbSDamjan Jovanovic TEST_F(lastIndexOf, lastIndexOf_test_oustring_006) 675cdf0e10cSrcweir { 676cdf0e10cSrcweir // search for sun, found (pos==-1) 677cdf0e10cSrcweir rtl::OUString aStr = rtl::OUString::createFromAscii("the su su"); 678cdf0e10cSrcweir rtl::OUString aSearchStr = rtl::OUString::createFromAscii("sun"); 679cdf0e10cSrcweir lastIndexOf_oustring(aStr, aSearchStr, -1); 680cdf0e10cSrcweir } 681cdf0e10cSrcweir 682*1a7dd8bbSDamjan Jovanovic TEST_F(lastIndexOf, lastIndexOf_test_oustring_007) 683cdf0e10cSrcweir { 684cdf0e10cSrcweir // search for earth, not found (-1) 685cdf0e10cSrcweir rtl::OUString aStr = rtl::OUString::createFromAscii("the su su"); 686cdf0e10cSrcweir rtl::OUString aSearchStr = rtl::OUString::createFromAscii("earth"); 687cdf0e10cSrcweir lastIndexOf_oustring(aStr, aSearchStr, -1); 688cdf0e10cSrcweir } 689cdf0e10cSrcweir 690*1a7dd8bbSDamjan Jovanovic TEST_F(lastIndexOf, lastIndexOf_test_oustring_008) 691cdf0e10cSrcweir { 692cdf0e10cSrcweir // search for earth, not found (-1) 693cdf0e10cSrcweir rtl::OUString aStr = rtl::OUString(); 694cdf0e10cSrcweir rtl::OUString aSearchStr = rtl::OUString::createFromAscii("earth"); 695cdf0e10cSrcweir lastIndexOf_oustring(aStr, aSearchStr, -1); 696cdf0e10cSrcweir } 697cdf0e10cSrcweir 698*1a7dd8bbSDamjan Jovanovic TEST_F(lastIndexOf, lastIndexOf_test_oustring_009) 699cdf0e10cSrcweir { 700cdf0e10cSrcweir // search for earth, not found (-1) 701cdf0e10cSrcweir rtl::OUString aStr = rtl::OUString(); 702cdf0e10cSrcweir rtl::OUString aSearchStr = rtl::OUString(); 703cdf0e10cSrcweir lastIndexOf_oustring(aStr, aSearchStr, -1); 704cdf0e10cSrcweir 705cdf0e10cSrcweir } 706cdf0e10cSrcweir 707*1a7dd8bbSDamjan Jovanovic TEST_F(lastIndexOf, lastIndexOf_test_salunicode_001) 708cdf0e10cSrcweir { 709cdf0e10cSrcweir // search for 's', found (19) 710cdf0e10cSrcweir rtl::OUString aStr = rtl::OUString::createFromAscii("the sun sun java system"); 711cdf0e10cSrcweir sal_Unicode suChar = L's'; 712cdf0e10cSrcweir lastIndexOf_salunicode(aStr, suChar, 19); 713cdf0e10cSrcweir } 714cdf0e10cSrcweir 715*1a7dd8bbSDamjan Jovanovic TEST_F(lastIndexOf, lastIndexOf_test_salunicode_002) 716cdf0e10cSrcweir { 717cdf0e10cSrcweir // search for 'x', not found (-1) 718cdf0e10cSrcweir rtl::OUString aStr = rtl::OUString::createFromAscii("the sun sun java system"); 719cdf0e10cSrcweir sal_Unicode suChar = L'x'; 720cdf0e10cSrcweir lastIndexOf_salunicode(aStr, suChar, -1); 721cdf0e10cSrcweir } 722cdf0e10cSrcweir 723*1a7dd8bbSDamjan Jovanovic TEST_F(lastIndexOf, lastIndexOf_test_salunicode_offset_001) 724cdf0e10cSrcweir { 725cdf0e10cSrcweir // search for 's', start from pos last char, found (19) 726cdf0e10cSrcweir rtl::OUString aStr = rtl::OUString::createFromAscii("the sun sun java system"); 727cdf0e10cSrcweir sal_Unicode cuChar = L's'; 728cdf0e10cSrcweir lastIndexOf_salunicode_offset(aStr, cuChar, 19, aStr.getLength()); 729cdf0e10cSrcweir } 730*1a7dd8bbSDamjan Jovanovic TEST_F(lastIndexOf, lastIndexOf_test_salunicode_offset_002) 731cdf0e10cSrcweir { 732cdf0e10cSrcweir // search for 's', start pos is last occur from search behind, found (17) 733cdf0e10cSrcweir rtl::OUString aStr = rtl::OUString::createFromAscii("the sun sun java system"); 734cdf0e10cSrcweir sal_Unicode cuChar = L's'; 735cdf0e10cSrcweir lastIndexOf_salunicode_offset(aStr, cuChar, 17, 19); 736cdf0e10cSrcweir } 737*1a7dd8bbSDamjan Jovanovic TEST_F(lastIndexOf, lastIndexOf_test_salunicode_offset_003) 738cdf0e10cSrcweir { 739cdf0e10cSrcweir // search for 't', start pos is 1, found (0) 740cdf0e10cSrcweir rtl::OUString aStr = rtl::OUString::createFromAscii("the sun sun java system"); 741cdf0e10cSrcweir sal_Unicode cuChar = L't'; 742cdf0e10cSrcweir lastIndexOf_salunicode_offset(aStr, cuChar, 0, 1); 743cdf0e10cSrcweir } 744cdf0e10cSrcweir 745cdf0e10cSrcweir // ----------------------------------------------------------------------------- 746cdf0e10cSrcweir // - getToken (tests) 747cdf0e10cSrcweir // ----------------------------------------------------------------------------- 748*1a7dd8bbSDamjan Jovanovic class getToken : public ::testing::Test 749cdf0e10cSrcweir { 750cdf0e10cSrcweir public: 751*1a7dd8bbSDamjan Jovanovic }; // class getToken 752*1a7dd8bbSDamjan Jovanovic 753*1a7dd8bbSDamjan Jovanovic TEST_F(getToken, getToken_000) 754cdf0e10cSrcweir { 755cdf0e10cSrcweir rtl::OUString suTokenStr; 756cdf0e10cSrcweir 757cdf0e10cSrcweir sal_Int32 nIndex = 0; 758cdf0e10cSrcweir do 759cdf0e10cSrcweir { 760cdf0e10cSrcweir rtl::OUString suToken = suTokenStr.getToken( 0, ';', nIndex ); 761cdf0e10cSrcweir } 762cdf0e10cSrcweir while ( nIndex >= 0 ); 763*1a7dd8bbSDamjan Jovanovic printf("Index %d\n", nIndex); 764cdf0e10cSrcweir // should not GPF 765cdf0e10cSrcweir } 766cdf0e10cSrcweir 767*1a7dd8bbSDamjan Jovanovic TEST_F(getToken, getToken_001) 768cdf0e10cSrcweir { 769cdf0e10cSrcweir rtl::OUString suTokenStr = rtl::OUString::createFromAscii("a;b"); 770cdf0e10cSrcweir 771cdf0e10cSrcweir sal_Int32 nIndex = 0; 772cdf0e10cSrcweir 773cdf0e10cSrcweir rtl::OUString suToken = suTokenStr.getToken( 0, ';', nIndex ); 774*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(suToken.equals(rtl::OUString::createFromAscii("a")) == sal_True) << "Token should be a 'a'"; 775cdf0e10cSrcweir 776cdf0e10cSrcweir /* rtl::OUString */ suToken = suTokenStr.getToken( 0, ';', nIndex ); 777*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(suToken.equals(rtl::OUString::createFromAscii("b")) == sal_True) << "Token should be a 'b'"; 778*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(nIndex == -1) << "index should be negative"; 779cdf0e10cSrcweir } 780cdf0e10cSrcweir 781*1a7dd8bbSDamjan Jovanovic TEST_F(getToken, getToken_002) 782cdf0e10cSrcweir { 783cdf0e10cSrcweir rtl::OUString suTokenStr = rtl::OUString::createFromAscii("a;b.c"); 784cdf0e10cSrcweir 785cdf0e10cSrcweir sal_Int32 nIndex = 0; 786cdf0e10cSrcweir 787cdf0e10cSrcweir rtl::OUString suToken = suTokenStr.getToken( 0, ';', nIndex ); 788*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(suToken.equals(rtl::OUString::createFromAscii("a")) == sal_True) << "Token should be a 'a'"; 789cdf0e10cSrcweir 790cdf0e10cSrcweir /* rtl::OUString */ suToken = suTokenStr.getToken( 0, '.', nIndex ); 791*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(suToken.equals(rtl::OUString::createFromAscii("b")) == sal_True) << "Token should be a 'b'"; 792cdf0e10cSrcweir 793cdf0e10cSrcweir /* rtl::OUString */ suToken = suTokenStr.getToken( 0, '.', nIndex ); 794*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(suToken.equals(rtl::OUString::createFromAscii("c")) == sal_True) << "Token should be a 'c'"; 795*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(nIndex == -1) << "index should be negative"; 796cdf0e10cSrcweir } 797cdf0e10cSrcweir 798*1a7dd8bbSDamjan Jovanovic TEST_F(getToken, getToken_003) 799cdf0e10cSrcweir { 800cdf0e10cSrcweir rtl::OUString suTokenStr = rtl::OUString::createFromAscii("a;;b"); 801cdf0e10cSrcweir 802cdf0e10cSrcweir sal_Int32 nIndex = 0; 803cdf0e10cSrcweir 804cdf0e10cSrcweir rtl::OUString suToken = suTokenStr.getToken( 0, ';', nIndex ); 805*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(suToken.equals(rtl::OUString::createFromAscii("a")) == sal_True) << "Token should be a 'a'"; 806cdf0e10cSrcweir 807cdf0e10cSrcweir /* rtl::OUString */ suToken = suTokenStr.getToken( 0, ';', nIndex ); 808*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(suToken.getLength() == 0) << "Token should be empty"; 809cdf0e10cSrcweir 810cdf0e10cSrcweir /* rtl::OUString */ suToken = suTokenStr.getToken( 0, ';', nIndex ); 811*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(suToken.equals(rtl::OUString::createFromAscii("b")) == sal_True) << "Token should be a 'b'"; 812*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(nIndex == -1) << "index should be negative"; 813cdf0e10cSrcweir } 814cdf0e10cSrcweir 815*1a7dd8bbSDamjan Jovanovic TEST_F(getToken, getToken_004) 816cdf0e10cSrcweir { 817cdf0e10cSrcweir rtl::OUString suTokenStr = rtl::OUString::createFromAscii("longer.then.ever."); 818cdf0e10cSrcweir 819cdf0e10cSrcweir sal_Int32 nIndex = 0; 820cdf0e10cSrcweir 821cdf0e10cSrcweir rtl::OUString suToken = suTokenStr.getToken( 0, '.', nIndex ); 822*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(suToken.equals(rtl::OUString::createFromAscii("longer")) == sal_True) << "Token should be 'longer'"; 823cdf0e10cSrcweir 824cdf0e10cSrcweir /* rtl::OUString */ suToken = suTokenStr.getToken( 0, '.', nIndex ); 825*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(suToken.equals(rtl::OUString::createFromAscii("then")) == sal_True) << "Token should be 'then'"; 826cdf0e10cSrcweir 827cdf0e10cSrcweir /* rtl::OUString */ suToken = suTokenStr.getToken( 0, '.', nIndex ); 828*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(suToken.equals(rtl::OUString::createFromAscii("ever")) == sal_True) << "Token should be 'ever'"; 829cdf0e10cSrcweir 830cdf0e10cSrcweir /* rtl::OUString */ suToken = suTokenStr.getToken( 0, '.', nIndex ); 831*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(suToken.getLength() == 0) << "Token should be empty"; 832cdf0e10cSrcweir 833*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(nIndex == -1) << "index should be negative"; 834cdf0e10cSrcweir } 835cdf0e10cSrcweir 836*1a7dd8bbSDamjan Jovanovic TEST_F(getToken, getToken_005) { 837cdf0e10cSrcweir rtl::OUString ab(RTL_CONSTASCII_USTRINGPARAM("ab")); 838cdf0e10cSrcweir sal_Int32 n = 0; 839*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(ab.getToken(0, '-', n) == ab) << "token should be 'ab'"; 840*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(n == -1) << "n should be -1"; 841*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(ab.getToken(0, '-', n).getLength() == 0) << "token should be empty"; 842cdf0e10cSrcweir } 843cdf0e10cSrcweir 844*1a7dd8bbSDamjan Jovanovic class convertToString: public ::testing::Test { 845cdf0e10cSrcweir public: 846cdf0e10cSrcweir }; 847cdf0e10cSrcweir 848*1a7dd8bbSDamjan Jovanovic TEST_F(convertToString, test) { 849cdf0e10cSrcweir static sal_Unicode const utf16[] = { 0x0041, 0x00E4, 0x0061 }; 850cdf0e10cSrcweir rtl::OString s; 851*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE( 852cdf0e10cSrcweir rtl::OUString(utf16, sizeof utf16 / sizeof utf16[0]).convertToString( 853cdf0e10cSrcweir &s, RTL_TEXTENCODING_UTF7, 854cdf0e10cSrcweir (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR | 855cdf0e10cSrcweir RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR))); 856*1a7dd8bbSDamjan Jovanovic ASSERT_EQ( 857cdf0e10cSrcweir rtl::OString(RTL_CONSTASCII_STRINGPARAM("A+AOQ-a")), s); 858cdf0e10cSrcweir } 859cdf0e10cSrcweir 860cdf0e10cSrcweir // ----------------------------------------------------------------------------- 861cdf0e10cSrcweir // - string construction & interning (tests) 862cdf0e10cSrcweir // ----------------------------------------------------------------------------- 863*1a7dd8bbSDamjan Jovanovic class construction : public ::testing::Test 864cdf0e10cSrcweir { 865cdf0e10cSrcweir public: 866*1a7dd8bbSDamjan Jovanovic }; 867*1a7dd8bbSDamjan Jovanovic 868*1a7dd8bbSDamjan Jovanovic TEST_F(construction, construct) 869cdf0e10cSrcweir { 870cdf0e10cSrcweir #ifdef RTL_INLINE_STRINGS 871cdf0e10cSrcweir ::rtl::OUString aFoo( RTL_CONSTASCII_USTRINGPARAM("foo") ); 872*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(aFoo[0] == 'f') << "string contents"; 873*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(aFoo[1] == 'o') << "string contents"; 874*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(aFoo[2] == 'o') << "string contents"; 875*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(aFoo.getLength() == 3) << "string length"; 876cdf0e10cSrcweir 877cdf0e10cSrcweir ::rtl::OUString aBaa( RTL_CONSTASCII_USTRINGPARAM("this is a very long string with a lot of long things inside it and it goes on and on and on forever etc.") ); 878*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(aBaa.getLength() == 104) << "string length"; 879cdf0e10cSrcweir // Dig at the internals ... FIXME: should we have the bit-flag defines public ? 880*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE((aBaa.pData->refCount & 1<<30) != 0) << "string static flags"; 881cdf0e10cSrcweir #endif 882cdf0e10cSrcweir } 883cdf0e10cSrcweir 884*1a7dd8bbSDamjan Jovanovic TEST_F(construction, intern) 885cdf0e10cSrcweir { 886cdf0e10cSrcweir // The empty string is 'static' a special case ... 887cdf0e10cSrcweir rtl::OUString aEmpty = rtl::OUString().intern(); 888cdf0e10cSrcweir rtl::OUString aEmpty2 = rtl::OUString::intern( RTL_CONSTASCII_USTRINGPARAM( "" ) ); 889cdf0e10cSrcweir 890cdf0e10cSrcweir ::rtl::OUString aFoo( RTL_CONSTASCII_USTRINGPARAM("foo") ); 891cdf0e10cSrcweir ::rtl::OUString aFooIntern = aFoo.intern(); 892*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(aFooIntern.equalsAscii("foo")) << "string contents"; 893*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(aFooIntern.getLength() == 3) << "string length"; 894cdf0e10cSrcweir // We have to dup due to no atomic 'intern' bit-set operation 895*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(aFoo.pData != aFooIntern.pData) << "intern dups"; 896cdf0e10cSrcweir 897cdf0e10cSrcweir // Test interning lots of things 898cdf0e10cSrcweir int i; 899cdf0e10cSrcweir static const int nSequence = 4096; 900cdf0e10cSrcweir rtl::OUString *pStrs; 901cdf0e10cSrcweir sal_uIntPtr *pValues; 902cdf0e10cSrcweir 903cdf0e10cSrcweir pStrs = new rtl::OUString[nSequence]; 904cdf0e10cSrcweir pValues = new sal_uIntPtr[nSequence]; 905cdf0e10cSrcweir for (i = 0; i < nSequence; i++) 906cdf0e10cSrcweir { 907cdf0e10cSrcweir pStrs[i] = rtl::OUString::valueOf( sqrt( static_cast<double>(i) ) ).intern(); 908cdf0e10cSrcweir pValues[i] = reinterpret_cast<sal_uIntPtr>( pStrs[i].pData ); 909cdf0e10cSrcweir } 910cdf0e10cSrcweir for (i = 0; i < nSequence; i++) 911cdf0e10cSrcweir { 912cdf0e10cSrcweir rtl::OUString aNew = rtl::OUString::valueOf( sqrt( static_cast<double>(i) ) ).intern(); 913*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(aNew.pData == pStrs[i].pData) << "double intern failed"; 914cdf0e10cSrcweir } 915cdf0e10cSrcweir 916cdf0e10cSrcweir // Free strings to check for leaks 917cdf0e10cSrcweir for (i = 0; i < nSequence; i++) 918cdf0e10cSrcweir { 919cdf0e10cSrcweir // Overwrite - hopefully this re-uses the memory 920cdf0e10cSrcweir pStrs[i] = rtl::OUString(); 921cdf0e10cSrcweir pStrs[i] = rtl::OUString::valueOf( sqrt( static_cast<double>(i) ) ); 922cdf0e10cSrcweir } 923cdf0e10cSrcweir 924cdf0e10cSrcweir for (i = 0; i < nSequence; i++) 925cdf0e10cSrcweir { 926cdf0e10cSrcweir rtl::OUString aIntern; 927cdf0e10cSrcweir sal_uIntPtr nValue; 928cdf0e10cSrcweir aIntern = rtl::OUString::valueOf( sqrt( static_cast<double>(i) ) ).intern(); 929cdf0e10cSrcweir 930cdf0e10cSrcweir nValue = reinterpret_cast<sal_uIntPtr>( aIntern.pData ); 931cdf0e10cSrcweir // This may not be 100% reliable: memory may 932cdf0e10cSrcweir // have been re-used, but it's worth checking. 933*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(nValue != pValues[i]) << "intern leaking"; 934cdf0e10cSrcweir } 935cdf0e10cSrcweir delete [] pValues; 936cdf0e10cSrcweir delete [] pStrs; 937cdf0e10cSrcweir } 938cdf0e10cSrcweir 939*1a7dd8bbSDamjan Jovanovic class indexOfAscii: public ::testing::Test { 940cdf0e10cSrcweir public: 941cdf0e10cSrcweir }; 942cdf0e10cSrcweir 943*1a7dd8bbSDamjan Jovanovic TEST_F(indexOfAscii, test) { 944*1a7dd8bbSDamjan Jovanovic ASSERT_EQ( 945cdf0e10cSrcweir sal_Int32(-1), 946cdf0e10cSrcweir rtl::OUString().indexOfAsciiL(RTL_CONSTASCII_STRINGPARAM(""))); 947*1a7dd8bbSDamjan Jovanovic ASSERT_EQ( 948cdf0e10cSrcweir sal_Int32(-1), 949cdf0e10cSrcweir rtl::OUString().lastIndexOfAsciiL(RTL_CONSTASCII_STRINGPARAM(""))); 950*1a7dd8bbSDamjan Jovanovic ASSERT_EQ( 951cdf0e10cSrcweir sal_Int32(0), 952cdf0e10cSrcweir rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("foo")).indexOfAsciiL( 953cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM("foo"))); 954*1a7dd8bbSDamjan Jovanovic ASSERT_EQ( 955cdf0e10cSrcweir sal_Int32(0), 956cdf0e10cSrcweir rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("foo")).lastIndexOfAsciiL( 957cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM("foo"))); 958*1a7dd8bbSDamjan Jovanovic ASSERT_EQ( 959cdf0e10cSrcweir sal_Int32(2), 960cdf0e10cSrcweir rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("fofoobar")).indexOfAsciiL( 961cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM("foo"))); 962*1a7dd8bbSDamjan Jovanovic ASSERT_EQ( 963cdf0e10cSrcweir sal_Int32(3), 964cdf0e10cSrcweir rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("foofoofob")). 965cdf0e10cSrcweir lastIndexOfAsciiL(RTL_CONSTASCII_STRINGPARAM("foo"))); 966*1a7dd8bbSDamjan Jovanovic ASSERT_EQ( 967cdf0e10cSrcweir sal_Int32(3), 968cdf0e10cSrcweir rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("foofoobar")).indexOfAsciiL( 969cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM("foo"), 1)); 970cdf0e10cSrcweir } 971cdf0e10cSrcweir 972*1a7dd8bbSDamjan Jovanovic class endsWith: public ::testing::Test { 973cdf0e10cSrcweir public: 974cdf0e10cSrcweir }; 975cdf0e10cSrcweir 976*1a7dd8bbSDamjan Jovanovic TEST_F(endsWith, test) { 977*1a7dd8bbSDamjan Jovanovic ASSERT_EQ( 978cdf0e10cSrcweir true, 979cdf0e10cSrcweir rtl::OUString().endsWithAsciiL(RTL_CONSTASCII_STRINGPARAM(""))); 980*1a7dd8bbSDamjan Jovanovic ASSERT_EQ( 981cdf0e10cSrcweir false, 982cdf0e10cSrcweir rtl::OUString().endsWithAsciiL(RTL_CONSTASCII_STRINGPARAM("foo"))); 983*1a7dd8bbSDamjan Jovanovic ASSERT_EQ( 984cdf0e10cSrcweir true, 985cdf0e10cSrcweir rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("bar")).endsWithAsciiL( 986cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM("bar"))); 987*1a7dd8bbSDamjan Jovanovic ASSERT_EQ( 988cdf0e10cSrcweir true, 989cdf0e10cSrcweir rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("foobar")).endsWithAsciiL( 990cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM("bar"))); 991*1a7dd8bbSDamjan Jovanovic ASSERT_EQ( 992cdf0e10cSrcweir false, 993cdf0e10cSrcweir rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FOOBAR")).endsWithAsciiL( 994cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM("bar"))); 995cdf0e10cSrcweir } 996cdf0e10cSrcweir 997*1a7dd8bbSDamjan Jovanovic class createFromCodePoints: public ::testing::Test { 998cdf0e10cSrcweir public: 999cdf0e10cSrcweir }; 1000cdf0e10cSrcweir 1001*1a7dd8bbSDamjan Jovanovic TEST_F(createFromCodePoints, test) { 1002*1a7dd8bbSDamjan Jovanovic ASSERT_EQ( 1003cdf0e10cSrcweir sal_Int32(0), 1004cdf0e10cSrcweir rtl::OUString(static_cast< sal_uInt32 const * >(NULL), 0).getLength()); 1005cdf0e10cSrcweir static sal_uInt32 const cp[] = { 0, 0xD800, 0xFFFF, 0x10000, 0x10FFFF }; 1006cdf0e10cSrcweir rtl::OUString s(cp, sizeof cp / sizeof (sal_uInt32)); 1007*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_Int32(7), s.getLength()); 1008*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_Unicode(0), s[0]); 1009*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_Unicode(0xD800), s[1]); 1010*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_Unicode(0xFFFF), s[2]); 1011*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_Unicode(0xD800), s[3]); 1012*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_Unicode(0xDC00), s[4]); 1013*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_Unicode(0xDBFF), s[5]); 1014*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_Unicode(0xDFFF), s[6]); 1015cdf0e10cSrcweir } 1016cdf0e10cSrcweir 1017*1a7dd8bbSDamjan Jovanovic class iterateCodePoints: public ::testing::Test { 1018cdf0e10cSrcweir public: 1019cdf0e10cSrcweir }; 1020cdf0e10cSrcweir 1021*1a7dd8bbSDamjan Jovanovic TEST_F(iterateCodePoints, testNotWellFormed) { 1022cdf0e10cSrcweir static sal_Unicode const utf16[] = 1023cdf0e10cSrcweir { 0xD800, 0xDC00, 0x0041, 0xDBFF, 0xDFFF, 0xDDEF, 0xD9AB }; 1024cdf0e10cSrcweir rtl::OUString s(utf16, sizeof utf16 / sizeof (sal_Unicode)); 1025cdf0e10cSrcweir sal_Int32 i = 0; 1026*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_uInt32(0x10000), s.iterateCodePoints(&i)); 1027*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_Int32(2), i); 1028*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_uInt32(0x0041), s.iterateCodePoints(&i)); 1029*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_Int32(3), i); 1030*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_uInt32(0x10FFFF), s.iterateCodePoints(&i)); 1031*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_Int32(5), i); 1032*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_uInt32(0xDDEF), s.iterateCodePoints(&i)); 1033*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_Int32(6), i); 1034*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_uInt32(0xD9AB), s.iterateCodePoints(&i)); 1035*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_Int32(7), i); 1036*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_uInt32(0xD9AB), s.iterateCodePoints(&i, -1)); 1037*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_Int32(6), i); 1038*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_uInt32(0xDDEF), s.iterateCodePoints(&i, -1)); 1039*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_Int32(5), i); 1040*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_uInt32(0x10FFFF), s.iterateCodePoints(&i, -1)); 1041*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_Int32(3), i); 1042*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_uInt32(0x0041), s.iterateCodePoints(&i, -1)); 1043*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_Int32(2), i); 1044*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_uInt32(0x10000), s.iterateCodePoints(&i, -1)); 1045*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_Int32(0), i); 1046cdf0e10cSrcweir i = 1; 1047*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_uInt32(0xDC00), s.iterateCodePoints(&i, 2)); 1048*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_Int32(3), i); 1049cdf0e10cSrcweir i = 4; 1050*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_uInt32(0x10000), s.iterateCodePoints(&i, -3)); 1051*1a7dd8bbSDamjan Jovanovic ASSERT_EQ(sal_Int32(0), i); 1052cdf0e10cSrcweir } 1053cdf0e10cSrcweir 1054*1a7dd8bbSDamjan Jovanovic class convertFromString: public ::testing::Test { 1055cdf0e10cSrcweir public: 1056cdf0e10cSrcweir }; 1057cdf0e10cSrcweir 1058*1a7dd8bbSDamjan Jovanovic TEST_F(convertFromString, test) { 1059cdf0e10cSrcweir rtl::OUString t; 1060*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE( 1061cdf0e10cSrcweir !rtl_convertStringToUString( 1062cdf0e10cSrcweir &t.pData, RTL_CONSTASCII_STRINGPARAM("\x80"), RTL_TEXTENCODING_UTF8, 1063cdf0e10cSrcweir (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR | 1064cdf0e10cSrcweir RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR | 1065cdf0e10cSrcweir RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR))); 1066*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE( 1067cdf0e10cSrcweir !rtl_convertStringToUString( 1068cdf0e10cSrcweir &t.pData, RTL_CONSTASCII_STRINGPARAM("\xC0"), RTL_TEXTENCODING_UTF8, 1069cdf0e10cSrcweir (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR | 1070cdf0e10cSrcweir RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR | 1071cdf0e10cSrcweir RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR))); 1072*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE( 1073cdf0e10cSrcweir !rtl_convertStringToUString( 1074cdf0e10cSrcweir &t.pData, RTL_CONSTASCII_STRINGPARAM("\xFF"), RTL_TEXTENCODING_UTF8, 1075cdf0e10cSrcweir (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR | 1076cdf0e10cSrcweir RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR | 1077cdf0e10cSrcweir RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR))); 1078*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE( 1079cdf0e10cSrcweir rtl_convertStringToUString( 1080cdf0e10cSrcweir &t.pData, RTL_CONSTASCII_STRINGPARAM("abc"), RTL_TEXTENCODING_UTF8, 1081cdf0e10cSrcweir (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR | 1082cdf0e10cSrcweir RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR | 1083cdf0e10cSrcweir RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR))); 1084*1a7dd8bbSDamjan Jovanovic ASSERT_TRUE(t.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("abc"))); 1085cdf0e10cSrcweir } 1086cdf0e10cSrcweir 1087cdf0e10cSrcweir 1088cdf0e10cSrcweir } // namespace rtl_OUString 1089cdf0e10cSrcweir 1090*1a7dd8bbSDamjan Jovanovic int main(int argc, char **argv) 1091*1a7dd8bbSDamjan Jovanovic { 1092*1a7dd8bbSDamjan Jovanovic ::testing::InitGoogleTest(&argc, argv); 1093*1a7dd8bbSDamjan Jovanovic return RUN_ALL_TESTS(); 1094*1a7dd8bbSDamjan Jovanovic } 1095