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
1087d2adbcSAndrew Rist  *
1187d2adbcSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
1287d2adbcSAndrew Rist  *
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.
1987d2adbcSAndrew Rist  *
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 
printOUString(::rtl::OUString const & _suStr)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     };
54cdf0e10cSrcweir 
55*1a7dd8bbSDamjan Jovanovic     /// test of OUString(rtl_uString*)
TEST_F(ctors_rtl_uString,ctors_001)56*1a7dd8bbSDamjan Jovanovic     TEST_F(ctors_rtl_uString, ctors_001)
57*1a7dd8bbSDamjan Jovanovic     {
58*1a7dd8bbSDamjan Jovanovic         rtl::OUString *pStr = new rtl::OUString( rtl::OUString::createFromAscii("a String") );
59cdf0e10cSrcweir 
60*1a7dd8bbSDamjan Jovanovic         rtl::OUString aStrToTest(pStr->pData);
61*1a7dd8bbSDamjan Jovanovic         delete pStr;
62cdf0e10cSrcweir 
63*1a7dd8bbSDamjan Jovanovic         // maybe here should we do something with current memory
64*1a7dd8bbSDamjan Jovanovic         char* pBuffer = (char*) malloc(2 * 8);
65*1a7dd8bbSDamjan Jovanovic         memset(pBuffer, 0, 2 * 8);
66*1a7dd8bbSDamjan Jovanovic         free(pBuffer);
67cdf0e10cSrcweir 
68*1a7dd8bbSDamjan Jovanovic         sal_Bool bResult = aStrToTest.equals(rtl::OUString::createFromAscii("a String"));
69*1a7dd8bbSDamjan Jovanovic         ASSERT_TRUE(bResult == sal_True) << "String must not be empty";
70*1a7dd8bbSDamjan Jovanovic     }
71cdf0e10cSrcweir 
72cdf0e10cSrcweir // -----------------------------------------------------------------------------
73*1a7dd8bbSDamjan Jovanovic class valueOf : public ::testing::Test
74cdf0e10cSrcweir {
75*1a7dd8bbSDamjan Jovanovic protected:
valueOf_float_test_impl(float _nValue)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 
valueOf_float_test(float _nValue)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:
100*1a7dd8bbSDamjan Jovanovic 
valueOf_double_test_impl(double _nValue)101*1a7dd8bbSDamjan Jovanovic     void valueOf_double_test_impl(double _nValue)
102*1a7dd8bbSDamjan Jovanovic         {
103*1a7dd8bbSDamjan Jovanovic             rtl::OUString suValue;
104*1a7dd8bbSDamjan Jovanovic             suValue = rtl::OUString::valueOf( _nValue );
105*1a7dd8bbSDamjan Jovanovic             rtl::OString sValue;
106*1a7dd8bbSDamjan Jovanovic             sValue <<= suValue;
107*1a7dd8bbSDamjan Jovanovic             printf("nDouble := %.20f  sValue := %s\n", _nValue, sValue.getStr());
108*1a7dd8bbSDamjan Jovanovic 
109*1a7dd8bbSDamjan Jovanovic             double nValueATOF = atof( sValue.getStr() );
110*1a7dd8bbSDamjan Jovanovic 
111*1a7dd8bbSDamjan Jovanovic             bool bEqualResult = is_double_equal(_nValue, nValueATOF);
112*1a7dd8bbSDamjan Jovanovic             ASSERT_TRUE(bEqualResult == true) << "Values are not equal.";
113*1a7dd8bbSDamjan Jovanovic         }
114*1a7dd8bbSDamjan Jovanovic 
valueOf_double_test(double _nValue)115*1a7dd8bbSDamjan Jovanovic     void valueOf_double_test(double _nValue)
116*1a7dd8bbSDamjan Jovanovic         {
117*1a7dd8bbSDamjan Jovanovic             valueOf_double_test_impl(_nValue);
118*1a7dd8bbSDamjan Jovanovic 
119*1a7dd8bbSDamjan Jovanovic             // test also the negative part.
120*1a7dd8bbSDamjan Jovanovic             double nNegativeValue = -_nValue;
121*1a7dd8bbSDamjan Jovanovic             valueOf_double_test_impl(nNegativeValue);
122*1a7dd8bbSDamjan Jovanovic         }
123*1a7dd8bbSDamjan Jovanovic }; // class valueOf
124*1a7dd8bbSDamjan Jovanovic 
TEST_F(valueOf,valueOf_float_test_001)125*1a7dd8bbSDamjan Jovanovic     TEST_F(valueOf, valueOf_float_test_001)
126cdf0e10cSrcweir     {
127cdf0e10cSrcweir         // this is demonstration code
128*1a7dd8bbSDamjan Jovanovic         // ASSERT_TRUE(1 == 1) << "a message";
129cdf0e10cSrcweir         float nValue = 3.0f;
130cdf0e10cSrcweir         valueOf_float_test(nValue);
131cdf0e10cSrcweir     }
132cdf0e10cSrcweir 
TEST_F(valueOf,valueOf_float_test_002)133*1a7dd8bbSDamjan Jovanovic     TEST_F(valueOf, valueOf_float_test_002)
134cdf0e10cSrcweir     {
135cdf0e10cSrcweir         float nValue = 3.5f;
136cdf0e10cSrcweir         valueOf_float_test(nValue);
137cdf0e10cSrcweir     }
138cdf0e10cSrcweir 
TEST_F(valueOf,valueOf_float_test_003)139*1a7dd8bbSDamjan Jovanovic     TEST_F(valueOf, valueOf_float_test_003)
140cdf0e10cSrcweir     {
141cdf0e10cSrcweir         float nValue = 3.0625f;
142cdf0e10cSrcweir         valueOf_float_test(nValue);
143cdf0e10cSrcweir     }
144cdf0e10cSrcweir 
TEST_F(valueOf,valueOf_float_test_004)145*1a7dd8bbSDamjan Jovanovic     TEST_F(valueOf, valueOf_float_test_004)
146cdf0e10cSrcweir     {
147cdf0e10cSrcweir         float nValue = 3.502525f;
148cdf0e10cSrcweir         valueOf_float_test(nValue);
149cdf0e10cSrcweir     }
150cdf0e10cSrcweir 
TEST_F(valueOf,valueOf_float_test_005)151*1a7dd8bbSDamjan Jovanovic     TEST_F(valueOf, valueOf_float_test_005)
152cdf0e10cSrcweir     {
153cdf0e10cSrcweir         float nValue = 3.141592f;
154cdf0e10cSrcweir         valueOf_float_test(nValue);
155cdf0e10cSrcweir     }
156cdf0e10cSrcweir 
TEST_F(valueOf,valueOf_float_test_006)157*1a7dd8bbSDamjan Jovanovic     TEST_F(valueOf, valueOf_float_test_006)
158cdf0e10cSrcweir     {
159cdf0e10cSrcweir         float nValue = 3.5025255f;
160cdf0e10cSrcweir         valueOf_float_test(nValue);
161cdf0e10cSrcweir     }
162cdf0e10cSrcweir 
TEST_F(valueOf,valueOf_float_test_007)163*1a7dd8bbSDamjan Jovanovic     TEST_F(valueOf, valueOf_float_test_007)
164cdf0e10cSrcweir     {
165cdf0e10cSrcweir         float nValue = 3.0039062f;
166cdf0e10cSrcweir         valueOf_float_test(nValue);
167cdf0e10cSrcweir     }
168cdf0e10cSrcweir 
169cdf0e10cSrcweir     // valueOf double
TEST_F(valueOf,valueOf_double_test_001)170*1a7dd8bbSDamjan Jovanovic     TEST_F(valueOf, valueOf_double_test_001)
171*1a7dd8bbSDamjan Jovanovic     {
172*1a7dd8bbSDamjan Jovanovic         double nValue = 3.0;
173*1a7dd8bbSDamjan Jovanovic         valueOf_double_test(nValue);
174*1a7dd8bbSDamjan Jovanovic     }
TEST_F(valueOf,valueOf_double_test_002)175*1a7dd8bbSDamjan Jovanovic     TEST_F(valueOf, valueOf_double_test_002)
176*1a7dd8bbSDamjan Jovanovic     {
177*1a7dd8bbSDamjan Jovanovic         double nValue = 3.5;
178*1a7dd8bbSDamjan Jovanovic         valueOf_double_test(nValue);
179*1a7dd8bbSDamjan Jovanovic     }
TEST_F(valueOf,valueOf_double_test_003)180*1a7dd8bbSDamjan Jovanovic     TEST_F(valueOf, valueOf_double_test_003)
181*1a7dd8bbSDamjan Jovanovic     {
182*1a7dd8bbSDamjan Jovanovic         double nValue = 3.0625;
183*1a7dd8bbSDamjan Jovanovic         valueOf_double_test(nValue);
184*1a7dd8bbSDamjan Jovanovic     }
TEST_F(valueOf,valueOf_double_test_004)185*1a7dd8bbSDamjan Jovanovic     TEST_F(valueOf, valueOf_double_test_004)
186*1a7dd8bbSDamjan Jovanovic     {
187*1a7dd8bbSDamjan Jovanovic         double nValue = 3.1415926535;
188*1a7dd8bbSDamjan Jovanovic         valueOf_double_test(nValue);
189*1a7dd8bbSDamjan Jovanovic     }
TEST_F(valueOf,valueOf_double_test_005)190*1a7dd8bbSDamjan Jovanovic     TEST_F(valueOf, valueOf_double_test_005)
191*1a7dd8bbSDamjan Jovanovic     {
192*1a7dd8bbSDamjan Jovanovic         double nValue = 3.141592653589793;
193*1a7dd8bbSDamjan Jovanovic         valueOf_double_test(nValue);
194*1a7dd8bbSDamjan Jovanovic     }
TEST_F(valueOf,valueOf_double_test_006)195*1a7dd8bbSDamjan Jovanovic     TEST_F(valueOf, valueOf_double_test_006)
196*1a7dd8bbSDamjan Jovanovic     {
197*1a7dd8bbSDamjan Jovanovic         double nValue = 3.1415926535897932;
198*1a7dd8bbSDamjan Jovanovic         valueOf_double_test(nValue);
199*1a7dd8bbSDamjan Jovanovic     }
TEST_F(valueOf,valueOf_double_test_007)200*1a7dd8bbSDamjan Jovanovic     TEST_F(valueOf, valueOf_double_test_007)
201*1a7dd8bbSDamjan Jovanovic     {
202*1a7dd8bbSDamjan Jovanovic         double nValue = 3.14159265358979323;
203*1a7dd8bbSDamjan Jovanovic         valueOf_double_test(nValue);
204*1a7dd8bbSDamjan Jovanovic     }
TEST_F(valueOf,valueOf_double_test_008)205*1a7dd8bbSDamjan Jovanovic     TEST_F(valueOf, valueOf_double_test_008)
206*1a7dd8bbSDamjan Jovanovic     {
207*1a7dd8bbSDamjan Jovanovic         double nValue = 3.141592653589793238462643;
208*1a7dd8bbSDamjan Jovanovic         valueOf_double_test(nValue);
209*1a7dd8bbSDamjan Jovanovic     }
210cdf0e10cSrcweir 
211cdf0e10cSrcweir //------------------------------------------------------------------------
212cdf0e10cSrcweir // testing the method toDouble()
213cdf0e10cSrcweir //------------------------------------------------------------------------
214cdf0e10cSrcweir template<class T>
checkPrecisionSize()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:
testPrecision()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:
307cdf0e10cSrcweir     };
308cdf0e10cSrcweir 
TEST_F(toInt,test)309*1a7dd8bbSDamjan Jovanovic     TEST_F(toInt, test) {
310*1a7dd8bbSDamjan Jovanovic         ASSERT_EQ(
311*1a7dd8bbSDamjan Jovanovic             static_cast< sal_Int32 >(-0x76543210),
312*1a7dd8bbSDamjan Jovanovic             (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("-76543210")).
313*1a7dd8bbSDamjan Jovanovic             toInt32(16)));
314*1a7dd8bbSDamjan Jovanovic         ASSERT_EQ(
315*1a7dd8bbSDamjan Jovanovic             static_cast< sal_Int32 >(0xFEDCBA98),
316*1a7dd8bbSDamjan Jovanovic             (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("+FEDCBA98")).
317*1a7dd8bbSDamjan Jovanovic             toInt32(16)));
318*1a7dd8bbSDamjan Jovanovic         ASSERT_EQ(
319*1a7dd8bbSDamjan Jovanovic             static_cast< sal_Int64 >(-SAL_CONST_INT64(0x76543210FEDCBA98)),
320*1a7dd8bbSDamjan Jovanovic             (rtl::OUString(
321*1a7dd8bbSDamjan Jovanovic             RTL_CONSTASCII_USTRINGPARAM("-76543210FEDCBA98")).
322*1a7dd8bbSDamjan Jovanovic             toInt64(16)));
323*1a7dd8bbSDamjan Jovanovic         ASSERT_EQ(
324*1a7dd8bbSDamjan Jovanovic             static_cast< sal_Int64 >(SAL_CONST_INT64(0xFEDCBA9876543210)),
325*1a7dd8bbSDamjan Jovanovic             (rtl::OUString(
326*1a7dd8bbSDamjan Jovanovic             RTL_CONSTASCII_USTRINGPARAM("+FEDCBA9876543210")).
327*1a7dd8bbSDamjan Jovanovic             toInt64(16)));
328*1a7dd8bbSDamjan Jovanovic     }
329*1a7dd8bbSDamjan Jovanovic 
330cdf0e10cSrcweir // -----------------------------------------------------------------------------
331cdf0e10cSrcweir // - toDouble (tests)
332cdf0e10cSrcweir // -----------------------------------------------------------------------------
333*1a7dd8bbSDamjan Jovanovic     class toDouble : public ::testing::Test
334cdf0e10cSrcweir     {
335cdf0e10cSrcweir     public:
toDouble_test_impl(rtl::OString const & _sValue)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 
toDouble_test(rtl::OString const & _sValue)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 
TEST_F(toDouble,toDouble_selftest)360*1a7dd8bbSDamjan Jovanovic     TEST_F(toDouble, toDouble_selftest)
361*1a7dd8bbSDamjan Jovanovic     {
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);
375*1a7dd8bbSDamjan Jovanovic         // 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");
380*1a7dd8bbSDamjan Jovanovic     }
381cdf0e10cSrcweir 
TEST_F(toDouble,toDouble_test_3)382*1a7dd8bbSDamjan Jovanovic     TEST_F(toDouble, toDouble_test_3)
383*1a7dd8bbSDamjan Jovanovic     {
384*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("3");
385*1a7dd8bbSDamjan Jovanovic         toDouble_test(sValue);
386*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toDouble,toDouble_test_3_5)387*1a7dd8bbSDamjan Jovanovic     TEST_F(toDouble, toDouble_test_3_5)
388*1a7dd8bbSDamjan Jovanovic     {
389*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("3.5");
390*1a7dd8bbSDamjan Jovanovic         toDouble_test(sValue);
391*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toDouble,toDouble_test_3_0625)392*1a7dd8bbSDamjan Jovanovic     TEST_F(toDouble, toDouble_test_3_0625)
393*1a7dd8bbSDamjan Jovanovic     {
394*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("3.0625");
395*1a7dd8bbSDamjan Jovanovic         toDouble_test(sValue);
396*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toDouble,toDouble_test_pi)397*1a7dd8bbSDamjan Jovanovic     TEST_F(toDouble, toDouble_test_pi)
398*1a7dd8bbSDamjan Jovanovic     {
399*1a7dd8bbSDamjan Jovanovic         // value from http://www.angio.net/pi/digits/50.txt
400*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("3.141592653589793238462643383279502884197169399375");
401*1a7dd8bbSDamjan Jovanovic         toDouble_test(sValue);
402*1a7dd8bbSDamjan Jovanovic     }
403cdf0e10cSrcweir 
TEST_F(toDouble,toDouble_test_1)404*1a7dd8bbSDamjan Jovanovic     TEST_F(toDouble, toDouble_test_1)
405*1a7dd8bbSDamjan Jovanovic     {
406*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("1");
407*1a7dd8bbSDamjan Jovanovic         toDouble_test(sValue);
408*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toDouble,toDouble_test_10)409*1a7dd8bbSDamjan Jovanovic     TEST_F(toDouble, toDouble_test_10)
410*1a7dd8bbSDamjan Jovanovic     {
411*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("10");
412*1a7dd8bbSDamjan Jovanovic         toDouble_test(sValue);
413*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toDouble,toDouble_test_100)414*1a7dd8bbSDamjan Jovanovic     TEST_F(toDouble, toDouble_test_100)
415*1a7dd8bbSDamjan Jovanovic     {
416*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("100");
417*1a7dd8bbSDamjan Jovanovic         toDouble_test(sValue);
418*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toDouble,toDouble_test_1000)419*1a7dd8bbSDamjan Jovanovic     TEST_F(toDouble, toDouble_test_1000)
420*1a7dd8bbSDamjan Jovanovic     {
421*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("1000");
422*1a7dd8bbSDamjan Jovanovic         toDouble_test(sValue);
423*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toDouble,toDouble_test_10000)424*1a7dd8bbSDamjan Jovanovic     TEST_F(toDouble, toDouble_test_10000)
425*1a7dd8bbSDamjan Jovanovic     {
426*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("10000");
427*1a7dd8bbSDamjan Jovanovic         toDouble_test(sValue);
428*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toDouble,toDouble_test_1e99)429*1a7dd8bbSDamjan Jovanovic     TEST_F(toDouble, toDouble_test_1e99)
430*1a7dd8bbSDamjan Jovanovic     {
431*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("1e99");
432*1a7dd8bbSDamjan Jovanovic         toDouble_test(sValue);
433*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toDouble,toDouble_test_1e_n99)434*1a7dd8bbSDamjan Jovanovic     TEST_F(toDouble, toDouble_test_1e_n99)
435*1a7dd8bbSDamjan Jovanovic     {
436*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("1e-99");
437*1a7dd8bbSDamjan Jovanovic         toDouble_test(sValue);
438*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toDouble,toDouble_test_1e308)439*1a7dd8bbSDamjan Jovanovic     TEST_F(toDouble, toDouble_test_1e308)
440*1a7dd8bbSDamjan Jovanovic     {
441*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("1e308");
442*1a7dd8bbSDamjan Jovanovic         toDouble_test(sValue);
443*1a7dd8bbSDamjan Jovanovic     }
444cdf0e10cSrcweir 
445cdf0e10cSrcweir // -----------------------------------------------------------------------------
446cdf0e10cSrcweir // - toFloat (tests)
447cdf0e10cSrcweir // -----------------------------------------------------------------------------
448*1a7dd8bbSDamjan Jovanovic     class toFloat : public ::testing::Test
449cdf0e10cSrcweir     {
450cdf0e10cSrcweir     public:
toFloat_test_impl(rtl::OString const & _sValue)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 
toFloat_test(rtl::OString const & _sValue)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 
TEST_F(toFloat,toFloat_selftest)475*1a7dd8bbSDamjan Jovanovic     TEST_F(toFloat, toFloat_selftest)
476*1a7dd8bbSDamjan Jovanovic     {
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);
486*1a7dd8bbSDamjan Jovanovic 
487*1a7dd8bbSDamjan Jovanovic         printf("Selftest done.\n");
488*1a7dd8bbSDamjan Jovanovic     }
489cdf0e10cSrcweir 
TEST_F(toFloat,toFloat_test_3)490*1a7dd8bbSDamjan Jovanovic     TEST_F(toFloat, toFloat_test_3)
491*1a7dd8bbSDamjan Jovanovic     {
492*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("3");
493*1a7dd8bbSDamjan Jovanovic         toFloat_test(sValue);
494*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toFloat,toFloat_test_3_5)495*1a7dd8bbSDamjan Jovanovic     TEST_F(toFloat, toFloat_test_3_5)
496*1a7dd8bbSDamjan Jovanovic     {
497*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("3.5");
498*1a7dd8bbSDamjan Jovanovic         toFloat_test(sValue);
499*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toFloat,toFloat_test_3_0625)500*1a7dd8bbSDamjan Jovanovic     TEST_F(toFloat, toFloat_test_3_0625)
501*1a7dd8bbSDamjan Jovanovic     {
502*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("3.0625");
503*1a7dd8bbSDamjan Jovanovic         toFloat_test(sValue);
504*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toFloat,toFloat_test_3_0625_e)505*1a7dd8bbSDamjan Jovanovic     TEST_F(toFloat, toFloat_test_3_0625_e)
506*1a7dd8bbSDamjan Jovanovic     {
507*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("3.0625e-4");
508*1a7dd8bbSDamjan Jovanovic         toFloat_test(sValue);
509*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toFloat,toFloat_test_pi)510*1a7dd8bbSDamjan Jovanovic     TEST_F(toFloat, toFloat_test_pi)
511*1a7dd8bbSDamjan Jovanovic     {
512*1a7dd8bbSDamjan Jovanovic         // value from http://www.angio.net/pi/digits/50.txt
513*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("3.141592653589793238462643383279502884197169399375");
514*1a7dd8bbSDamjan Jovanovic         toFloat_test(sValue);
515*1a7dd8bbSDamjan Jovanovic     }
516cdf0e10cSrcweir 
TEST_F(toFloat,toFloat_test_1)517*1a7dd8bbSDamjan Jovanovic     TEST_F(toFloat, toFloat_test_1)
518*1a7dd8bbSDamjan Jovanovic     {
519*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("1");
520*1a7dd8bbSDamjan Jovanovic         toFloat_test(sValue);
521*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toFloat,toFloat_test_10)522*1a7dd8bbSDamjan Jovanovic     TEST_F(toFloat, toFloat_test_10)
523*1a7dd8bbSDamjan Jovanovic     {
524*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("10");
525*1a7dd8bbSDamjan Jovanovic         toFloat_test(sValue);
526*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toFloat,toFloat_test_100)527*1a7dd8bbSDamjan Jovanovic     TEST_F(toFloat, toFloat_test_100)
528*1a7dd8bbSDamjan Jovanovic     {
529*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("100");
530*1a7dd8bbSDamjan Jovanovic         toFloat_test(sValue);
531*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toFloat,toFloat_test_1000)532*1a7dd8bbSDamjan Jovanovic     TEST_F(toFloat, toFloat_test_1000)
533*1a7dd8bbSDamjan Jovanovic     {
534*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("1000");
535*1a7dd8bbSDamjan Jovanovic         toFloat_test(sValue);
536*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toFloat,toFloat_test_10000)537*1a7dd8bbSDamjan Jovanovic     TEST_F(toFloat, toFloat_test_10000)
538*1a7dd8bbSDamjan Jovanovic     {
539*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("10000");
540*1a7dd8bbSDamjan Jovanovic         toFloat_test(sValue);
541*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toFloat,toFloat_test_mix)542*1a7dd8bbSDamjan Jovanovic     TEST_F(toFloat, toFloat_test_mix)
543*1a7dd8bbSDamjan Jovanovic     {
544*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("456789321455.123456789012");
545*1a7dd8bbSDamjan Jovanovic         toFloat_test(sValue);
546*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toFloat,toFloat_test_1e99)547*1a7dd8bbSDamjan Jovanovic     TEST_F(toFloat, toFloat_test_1e99)
548*1a7dd8bbSDamjan Jovanovic     {
549*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("1e99");
550*1a7dd8bbSDamjan Jovanovic         toFloat_test(sValue);
551*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toFloat,toFloat_test_1e_n99)552*1a7dd8bbSDamjan Jovanovic     TEST_F(toFloat, toFloat_test_1e_n99)
553*1a7dd8bbSDamjan Jovanovic     {
554*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("1e-9");
555*1a7dd8bbSDamjan Jovanovic         toFloat_test(sValue);
556*1a7dd8bbSDamjan Jovanovic     }
TEST_F(toFloat,toFloat_test_1e308)557*1a7dd8bbSDamjan Jovanovic     TEST_F(toFloat, toFloat_test_1e308)
558*1a7dd8bbSDamjan Jovanovic     {
559*1a7dd8bbSDamjan Jovanovic         rtl::OString sValue("1e308");
560*1a7dd8bbSDamjan Jovanovic         toFloat_test(sValue);
561*1a7dd8bbSDamjan Jovanovic     }
562cdf0e10cSrcweir 
563cdf0e10cSrcweir // -----------------------------------------------------------------------------
564cdf0e10cSrcweir // - lastIndexOf (tests)
565cdf0e10cSrcweir // -----------------------------------------------------------------------------
566*1a7dd8bbSDamjan Jovanovic class lastIndexOf : public ::testing::Test
567cdf0e10cSrcweir {
568cdf0e10cSrcweir public:
lastIndexOf_oustring(rtl::OUString const & _suStr,rtl::OUString const & _suSearchStr,sal_Int32 _nExpectedResultPos)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 
lastIndexOf_salunicode(rtl::OUString const & _suStr,sal_Unicode _cuSearchChar,sal_Int32 _nExpectedResultPos)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 
lastIndexOf_oustring_offset(rtl::OUString const & _suStr,rtl::OUString const & _suSearchStr,sal_Int32 _nExpectedResultPos,sal_Int32 _nStartOffset)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 
lastIndexOf_salunicode_offset(rtl::OUString const & _suStr,sal_Unicode _cuSearchChar,sal_Int32 _nExpectedResultPos,sal_Int32 _nStartOffset)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 
TEST_F(lastIndexOf,lastIndexOf_test_oustring_offset_001)602*1a7dd8bbSDamjan Jovanovic     TEST_F(lastIndexOf, lastIndexOf_test_oustring_offset_001)
603*1a7dd8bbSDamjan Jovanovic     {
604*1a7dd8bbSDamjan Jovanovic         // search for sun, start at the end, found (pos==0)
605*1a7dd8bbSDamjan Jovanovic         rtl::OUString aStr = rtl::OUString::createFromAscii("sun java system");
606*1a7dd8bbSDamjan Jovanovic         rtl::OUString aSearchStr = rtl::OUString::createFromAscii("sun");
607*1a7dd8bbSDamjan Jovanovic         lastIndexOf_oustring_offset(aStr, aSearchStr, 0, aStr.getLength());
608*1a7dd8bbSDamjan Jovanovic     }
609cdf0e10cSrcweir 
TEST_F(lastIndexOf,lastIndexOf_test_oustring_offset_002)610*1a7dd8bbSDamjan Jovanovic     TEST_F(lastIndexOf, lastIndexOf_test_oustring_offset_002)
611*1a7dd8bbSDamjan Jovanovic     {
612*1a7dd8bbSDamjan Jovanovic         // search for sun, start at pos = 3, found (pos==0)
613*1a7dd8bbSDamjan Jovanovic         rtl::OUString aStr = rtl::OUString::createFromAscii("sun java system");
614*1a7dd8bbSDamjan Jovanovic         rtl::OUString aSearchStr = rtl::OUString::createFromAscii("sun");
615*1a7dd8bbSDamjan Jovanovic         lastIndexOf_oustring_offset(aStr, aSearchStr, 0, 3);
616*1a7dd8bbSDamjan Jovanovic     }
617cdf0e10cSrcweir 
TEST_F(lastIndexOf,lastIndexOf_test_oustring_offset_003)618*1a7dd8bbSDamjan Jovanovic     TEST_F(lastIndexOf, lastIndexOf_test_oustring_offset_003)
619*1a7dd8bbSDamjan Jovanovic     {
620*1a7dd8bbSDamjan Jovanovic         // search for sun, start at pos = 2, found (pos==-1)
621*1a7dd8bbSDamjan Jovanovic         rtl::OUString aStr = rtl::OUString::createFromAscii("sun java system");
622*1a7dd8bbSDamjan Jovanovic         rtl::OUString aSearchStr = rtl::OUString::createFromAscii("sun");
623*1a7dd8bbSDamjan Jovanovic         lastIndexOf_oustring_offset(aStr, aSearchStr, -1, 2);
624*1a7dd8bbSDamjan Jovanovic     }
625cdf0e10cSrcweir 
TEST_F(lastIndexOf,lastIndexOf_test_oustring_offset_004)626*1a7dd8bbSDamjan Jovanovic     TEST_F(lastIndexOf, lastIndexOf_test_oustring_offset_004)
627*1a7dd8bbSDamjan Jovanovic     {
628*1a7dd8bbSDamjan Jovanovic         // search for sun, start at the end, found (pos==0)
629*1a7dd8bbSDamjan Jovanovic         rtl::OUString aStr = rtl::OUString::createFromAscii("sun java system");
630*1a7dd8bbSDamjan Jovanovic         rtl::OUString aSearchStr = rtl::OUString::createFromAscii("sun");
631*1a7dd8bbSDamjan Jovanovic         lastIndexOf_oustring_offset(aStr, aSearchStr, -1, -1);
632*1a7dd8bbSDamjan Jovanovic     }
633cdf0e10cSrcweir 
TEST_F(lastIndexOf,lastIndexOf_test_oustring_001)634*1a7dd8bbSDamjan Jovanovic     TEST_F(lastIndexOf, lastIndexOf_test_oustring_001)
635*1a7dd8bbSDamjan Jovanovic     {
636*1a7dd8bbSDamjan Jovanovic         // search for sun, found (pos==0)
637*1a7dd8bbSDamjan Jovanovic         rtl::OUString aStr = rtl::OUString::createFromAscii("sun java system");
638*1a7dd8bbSDamjan Jovanovic         rtl::OUString aSearchStr = rtl::OUString::createFromAscii("sun");
639*1a7dd8bbSDamjan Jovanovic         lastIndexOf_oustring(aStr, aSearchStr, 0);
640*1a7dd8bbSDamjan Jovanovic     }
641cdf0e10cSrcweir 
TEST_F(lastIndexOf,lastIndexOf_test_oustring_002)642*1a7dd8bbSDamjan Jovanovic     TEST_F(lastIndexOf, lastIndexOf_test_oustring_002)
643*1a7dd8bbSDamjan Jovanovic     {
644*1a7dd8bbSDamjan Jovanovic         // search for sun, found (pos==4)
645*1a7dd8bbSDamjan Jovanovic         rtl::OUString aStr = rtl::OUString::createFromAscii("the sun java system");
646*1a7dd8bbSDamjan Jovanovic         rtl::OUString aSearchStr = rtl::OUString::createFromAscii("sun");
647*1a7dd8bbSDamjan Jovanovic         lastIndexOf_oustring(aStr, aSearchStr, 4);
648*1a7dd8bbSDamjan Jovanovic     }
649cdf0e10cSrcweir 
TEST_F(lastIndexOf,lastIndexOf_test_oustring_003)650*1a7dd8bbSDamjan Jovanovic     TEST_F(lastIndexOf, lastIndexOf_test_oustring_003)
651*1a7dd8bbSDamjan Jovanovic     {
652*1a7dd8bbSDamjan Jovanovic         // search for sun, found (pos==8)
653*1a7dd8bbSDamjan Jovanovic         rtl::OUString aStr = rtl::OUString::createFromAscii("the sun sun java system");
654*1a7dd8bbSDamjan Jovanovic         rtl::OUString aSearchStr = rtl::OUString::createFromAscii("sun");
655*1a7dd8bbSDamjan Jovanovic         lastIndexOf_oustring(aStr, aSearchStr, 8);
656*1a7dd8bbSDamjan Jovanovic     }
657cdf0e10cSrcweir 
TEST_F(lastIndexOf,lastIndexOf_test_oustring_004)658*1a7dd8bbSDamjan Jovanovic     TEST_F(lastIndexOf, lastIndexOf_test_oustring_004)
659*1a7dd8bbSDamjan Jovanovic     {
660*1a7dd8bbSDamjan Jovanovic         // search for sun, found (pos==8)
661*1a7dd8bbSDamjan Jovanovic         rtl::OUString aStr = rtl::OUString::createFromAscii("the sun sun");
662*1a7dd8bbSDamjan Jovanovic         rtl::OUString aSearchStr = rtl::OUString::createFromAscii("sun");
663*1a7dd8bbSDamjan Jovanovic         lastIndexOf_oustring(aStr, aSearchStr, 8);
664*1a7dd8bbSDamjan Jovanovic     }
665cdf0e10cSrcweir 
TEST_F(lastIndexOf,lastIndexOf_test_oustring_005)666*1a7dd8bbSDamjan Jovanovic     TEST_F(lastIndexOf, lastIndexOf_test_oustring_005)
667*1a7dd8bbSDamjan Jovanovic     {
668*1a7dd8bbSDamjan Jovanovic         // search for sun, found (pos==4)
669*1a7dd8bbSDamjan Jovanovic         rtl::OUString aStr = rtl::OUString::createFromAscii("the sun su");
670*1a7dd8bbSDamjan Jovanovic         rtl::OUString aSearchStr = rtl::OUString::createFromAscii("sun");
671*1a7dd8bbSDamjan Jovanovic         lastIndexOf_oustring(aStr, aSearchStr, 4);
672*1a7dd8bbSDamjan Jovanovic     }
673cdf0e10cSrcweir 
TEST_F(lastIndexOf,lastIndexOf_test_oustring_006)674*1a7dd8bbSDamjan Jovanovic     TEST_F(lastIndexOf, lastIndexOf_test_oustring_006)
675*1a7dd8bbSDamjan Jovanovic     {
676*1a7dd8bbSDamjan Jovanovic         // search for sun, found (pos==-1)
677*1a7dd8bbSDamjan Jovanovic         rtl::OUString aStr = rtl::OUString::createFromAscii("the su su");
678*1a7dd8bbSDamjan Jovanovic         rtl::OUString aSearchStr = rtl::OUString::createFromAscii("sun");
679*1a7dd8bbSDamjan Jovanovic         lastIndexOf_oustring(aStr, aSearchStr, -1);
680*1a7dd8bbSDamjan Jovanovic     }
681cdf0e10cSrcweir 
TEST_F(lastIndexOf,lastIndexOf_test_oustring_007)682*1a7dd8bbSDamjan Jovanovic     TEST_F(lastIndexOf, lastIndexOf_test_oustring_007)
683*1a7dd8bbSDamjan Jovanovic     {
684*1a7dd8bbSDamjan Jovanovic         // search for earth, not found (-1)
685*1a7dd8bbSDamjan Jovanovic         rtl::OUString aStr = rtl::OUString::createFromAscii("the su su");
686*1a7dd8bbSDamjan Jovanovic         rtl::OUString aSearchStr = rtl::OUString::createFromAscii("earth");
687*1a7dd8bbSDamjan Jovanovic         lastIndexOf_oustring(aStr, aSearchStr, -1);
688*1a7dd8bbSDamjan Jovanovic     }
689cdf0e10cSrcweir 
TEST_F(lastIndexOf,lastIndexOf_test_oustring_008)690*1a7dd8bbSDamjan Jovanovic     TEST_F(lastIndexOf, lastIndexOf_test_oustring_008)
691*1a7dd8bbSDamjan Jovanovic     {
692*1a7dd8bbSDamjan Jovanovic         // search for earth, not found (-1)
693*1a7dd8bbSDamjan Jovanovic         rtl::OUString aStr = rtl::OUString();
694*1a7dd8bbSDamjan Jovanovic         rtl::OUString aSearchStr = rtl::OUString::createFromAscii("earth");
695*1a7dd8bbSDamjan Jovanovic         lastIndexOf_oustring(aStr, aSearchStr, -1);
696*1a7dd8bbSDamjan Jovanovic     }
697cdf0e10cSrcweir 
TEST_F(lastIndexOf,lastIndexOf_test_oustring_009)698*1a7dd8bbSDamjan Jovanovic     TEST_F(lastIndexOf, lastIndexOf_test_oustring_009)
699*1a7dd8bbSDamjan Jovanovic     {
700*1a7dd8bbSDamjan Jovanovic         // search for earth, not found (-1)
701*1a7dd8bbSDamjan Jovanovic         rtl::OUString aStr = rtl::OUString();
702*1a7dd8bbSDamjan Jovanovic         rtl::OUString aSearchStr = rtl::OUString();
703*1a7dd8bbSDamjan Jovanovic         lastIndexOf_oustring(aStr, aSearchStr, -1);
704cdf0e10cSrcweir 
705*1a7dd8bbSDamjan Jovanovic     }
706cdf0e10cSrcweir 
TEST_F(lastIndexOf,lastIndexOf_test_salunicode_001)707*1a7dd8bbSDamjan Jovanovic     TEST_F(lastIndexOf, lastIndexOf_test_salunicode_001)
708*1a7dd8bbSDamjan Jovanovic     {
709*1a7dd8bbSDamjan Jovanovic         // search for 's', found (19)
710*1a7dd8bbSDamjan Jovanovic         rtl::OUString aStr = rtl::OUString::createFromAscii("the sun sun java system");
711*1a7dd8bbSDamjan Jovanovic         sal_Unicode suChar = L's';
712*1a7dd8bbSDamjan Jovanovic         lastIndexOf_salunicode(aStr, suChar, 19);
713*1a7dd8bbSDamjan Jovanovic     }
714cdf0e10cSrcweir 
TEST_F(lastIndexOf,lastIndexOf_test_salunicode_002)715*1a7dd8bbSDamjan Jovanovic     TEST_F(lastIndexOf, lastIndexOf_test_salunicode_002)
716*1a7dd8bbSDamjan Jovanovic     {
717*1a7dd8bbSDamjan Jovanovic         // search for 'x', not found (-1)
718*1a7dd8bbSDamjan Jovanovic         rtl::OUString aStr = rtl::OUString::createFromAscii("the sun sun java system");
719*1a7dd8bbSDamjan Jovanovic         sal_Unicode suChar = L'x';
720*1a7dd8bbSDamjan Jovanovic         lastIndexOf_salunicode(aStr, suChar, -1);
721*1a7dd8bbSDamjan Jovanovic     }
722cdf0e10cSrcweir 
TEST_F(lastIndexOf,lastIndexOf_test_salunicode_offset_001)723*1a7dd8bbSDamjan Jovanovic     TEST_F(lastIndexOf, lastIndexOf_test_salunicode_offset_001)
724*1a7dd8bbSDamjan Jovanovic     {
725*1a7dd8bbSDamjan Jovanovic         // search for 's', start from pos last char, found (19)
726*1a7dd8bbSDamjan Jovanovic         rtl::OUString aStr = rtl::OUString::createFromAscii("the sun sun java system");
727*1a7dd8bbSDamjan Jovanovic         sal_Unicode cuChar = L's';
728*1a7dd8bbSDamjan Jovanovic         lastIndexOf_salunicode_offset(aStr, cuChar, 19, aStr.getLength());
729*1a7dd8bbSDamjan Jovanovic     }
TEST_F(lastIndexOf,lastIndexOf_test_salunicode_offset_002)730*1a7dd8bbSDamjan Jovanovic     TEST_F(lastIndexOf, lastIndexOf_test_salunicode_offset_002)
731*1a7dd8bbSDamjan Jovanovic     {
732*1a7dd8bbSDamjan Jovanovic         // search for 's', start pos is last occur from search behind, found (17)
733*1a7dd8bbSDamjan Jovanovic         rtl::OUString aStr = rtl::OUString::createFromAscii("the sun sun java system");
734*1a7dd8bbSDamjan Jovanovic         sal_Unicode cuChar = L's';
735*1a7dd8bbSDamjan Jovanovic         lastIndexOf_salunicode_offset(aStr, cuChar, 17, 19);
736*1a7dd8bbSDamjan Jovanovic     }
TEST_F(lastIndexOf,lastIndexOf_test_salunicode_offset_003)737*1a7dd8bbSDamjan Jovanovic     TEST_F(lastIndexOf, lastIndexOf_test_salunicode_offset_003)
738*1a7dd8bbSDamjan Jovanovic     {
739*1a7dd8bbSDamjan Jovanovic         // search for 't', start pos is 1, found (0)
740*1a7dd8bbSDamjan Jovanovic         rtl::OUString aStr = rtl::OUString::createFromAscii("the sun sun java system");
741*1a7dd8bbSDamjan Jovanovic         sal_Unicode cuChar = L't';
742*1a7dd8bbSDamjan Jovanovic         lastIndexOf_salunicode_offset(aStr, cuChar, 0, 1);
743*1a7dd8bbSDamjan Jovanovic     }
744cdf0e10cSrcweir 
745cdf0e10cSrcweir // -----------------------------------------------------------------------------
746cdf0e10cSrcweir // - getToken (tests)
747cdf0e10cSrcweir // -----------------------------------------------------------------------------
748*1a7dd8bbSDamjan Jovanovic class getToken : public ::testing::Test
749cdf0e10cSrcweir {
750cdf0e10cSrcweir public:
751*1a7dd8bbSDamjan Jovanovic }; // class getToken
752cdf0e10cSrcweir 
TEST_F(getToken,getToken_000)753*1a7dd8bbSDamjan Jovanovic     TEST_F(getToken, getToken_000)
754*1a7dd8bbSDamjan Jovanovic     {
755*1a7dd8bbSDamjan Jovanovic         rtl::OUString suTokenStr;
756cdf0e10cSrcweir 
757*1a7dd8bbSDamjan Jovanovic         sal_Int32 nIndex = 0;
758*1a7dd8bbSDamjan Jovanovic         do
759cdf0e10cSrcweir         {
760*1a7dd8bbSDamjan Jovanovic             rtl::OUString suToken = suTokenStr.getToken( 0, ';', nIndex );
761*1a7dd8bbSDamjan Jovanovic         }
762*1a7dd8bbSDamjan Jovanovic         while ( nIndex >= 0 );
763*1a7dd8bbSDamjan Jovanovic         printf("Index %d\n", nIndex);
764*1a7dd8bbSDamjan Jovanovic         // should not GPF
765*1a7dd8bbSDamjan Jovanovic     }
766cdf0e10cSrcweir 
TEST_F(getToken,getToken_001)767*1a7dd8bbSDamjan Jovanovic     TEST_F(getToken, getToken_001)
768*1a7dd8bbSDamjan Jovanovic     {
769*1a7dd8bbSDamjan Jovanovic         rtl::OUString suTokenStr = rtl::OUString::createFromAscii("a;b");
770cdf0e10cSrcweir 
771*1a7dd8bbSDamjan Jovanovic         sal_Int32 nIndex = 0;
772cdf0e10cSrcweir 
773*1a7dd8bbSDamjan Jovanovic         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 
776*1a7dd8bbSDamjan Jovanovic         /* 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";
779*1a7dd8bbSDamjan Jovanovic     }
780cdf0e10cSrcweir 
TEST_F(getToken,getToken_002)781*1a7dd8bbSDamjan Jovanovic     TEST_F(getToken, getToken_002)
782*1a7dd8bbSDamjan Jovanovic     {
783*1a7dd8bbSDamjan Jovanovic         rtl::OUString suTokenStr = rtl::OUString::createFromAscii("a;b.c");
784cdf0e10cSrcweir 
785*1a7dd8bbSDamjan Jovanovic         sal_Int32 nIndex = 0;
786cdf0e10cSrcweir 
787*1a7dd8bbSDamjan Jovanovic         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 
790*1a7dd8bbSDamjan Jovanovic         /* 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 
793*1a7dd8bbSDamjan Jovanovic         /* 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";
796*1a7dd8bbSDamjan Jovanovic     }
797*1a7dd8bbSDamjan Jovanovic 
TEST_F(getToken,getToken_003)798*1a7dd8bbSDamjan Jovanovic     TEST_F(getToken, getToken_003)
799*1a7dd8bbSDamjan Jovanovic     {
800*1a7dd8bbSDamjan Jovanovic         rtl::OUString suTokenStr = rtl::OUString::createFromAscii("a;;b");
801cdf0e10cSrcweir 
802*1a7dd8bbSDamjan Jovanovic         sal_Int32 nIndex = 0;
803cdf0e10cSrcweir 
804*1a7dd8bbSDamjan Jovanovic         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 
807*1a7dd8bbSDamjan Jovanovic         /* rtl::OUString */ suToken = suTokenStr.getToken( 0, ';', nIndex );
808*1a7dd8bbSDamjan Jovanovic         ASSERT_TRUE(suToken.getLength() == 0) << "Token should be empty";
809cdf0e10cSrcweir 
810*1a7dd8bbSDamjan Jovanovic         /* 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";
813*1a7dd8bbSDamjan Jovanovic     }
814cdf0e10cSrcweir 
TEST_F(getToken,getToken_004)815*1a7dd8bbSDamjan Jovanovic     TEST_F(getToken, getToken_004)
816*1a7dd8bbSDamjan Jovanovic     {
817*1a7dd8bbSDamjan Jovanovic         rtl::OUString suTokenStr = rtl::OUString::createFromAscii("longer.then.ever.");
818cdf0e10cSrcweir 
819*1a7dd8bbSDamjan Jovanovic         sal_Int32 nIndex = 0;
820cdf0e10cSrcweir 
821*1a7dd8bbSDamjan Jovanovic         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 
824*1a7dd8bbSDamjan Jovanovic         /* 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 
827*1a7dd8bbSDamjan Jovanovic         /* 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 
830*1a7dd8bbSDamjan Jovanovic         /* 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";
834*1a7dd8bbSDamjan Jovanovic     }
835cdf0e10cSrcweir 
TEST_F(getToken,getToken_005)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";
842*1a7dd8bbSDamjan Jovanovic     }
843cdf0e10cSrcweir 
844*1a7dd8bbSDamjan Jovanovic class convertToString: public ::testing::Test {
845cdf0e10cSrcweir public:
846cdf0e10cSrcweir };
847cdf0e10cSrcweir 
TEST_F(convertToString,test)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 
TEST_F(construction,construct)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 
TEST_F(construction,intern)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 
TEST_F(indexOfAscii,test)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 
TEST_F(endsWith,test)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 
TEST_F(createFromCodePoints,test)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 
TEST_F(iterateCodePoints,testNotWellFormed)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 
TEST_F(convertFromString,test)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 
main(int argc,char ** argv)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