1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24
25 // MARKER(update_precomp.py): autogen include statement, do not remove
26 #include "precompiled_sal.hxx"
27 // autogenerated file with codegen.pl
28 // There exist some more test code in sal/qa/rtl_strings/rtl_OString.cxx
29 #include <rtl/string.hxx>
30
31 #include "gtest/gtest.h"
32 #include "valueequal.hxx"
33
34 namespace rtl_OString
35 {
36
37 class valueOf : public ::testing::Test
38 {
39 protected:
valueOf_float_test_impl(float _nValue)40 void valueOf_float_test_impl(float _nValue)
41 {
42 rtl::OString sValue;
43 sValue = rtl::OString::valueOf( _nValue );
44 printf("nFloat := %.9f sValue := %s\n", _nValue, sValue.getStr());
45
46 float nValueATOF = static_cast<float>(atof( sValue.getStr() ));
47
48 bool bEqualResult = is_float_equal(_nValue, nValueATOF);
49 ASSERT_TRUE(bEqualResult == true) << "Values are not equal.";
50 }
51
valueOf_float_test(float _nValue)52 void valueOf_float_test(float _nValue)
53 {
54 valueOf_float_test_impl(_nValue);
55
56 // test also the negative part.
57 float nNegativeValue = -_nValue;
58 valueOf_float_test_impl(nNegativeValue);
59 }
60
61 public:
62 // initialise your test code values here.
SetUp()63 void SetUp()
64 {
65 }
66
TearDown()67 void TearDown()
68 {
69 }
70
71 protected:
72
valueOf_double_test_impl(double _nValue)73 void valueOf_double_test_impl(double _nValue)
74 {
75 rtl::OString sValue;
76 sValue = rtl::OString::valueOf( _nValue );
77 printf("nDouble := %.20f sValue := %s\n", _nValue, sValue.getStr());
78
79 double nValueATOF = atof( sValue.getStr() );
80
81 bool bEqualResult = is_double_equal(_nValue, nValueATOF);
82 ASSERT_TRUE(bEqualResult == true) << "Values are not equal.";
83 }
84
valueOf_double_test(double _nValue)85 void valueOf_double_test(double _nValue)
86 {
87 valueOf_double_test_impl(_nValue);
88
89 // test also the negative part.
90 double nNegativeValue = -_nValue;
91 valueOf_double_test_impl(nNegativeValue);
92 }
93 }; // class valueOf
94
TEST_F(valueOf,valueOf_float_test_001)95 TEST_F(valueOf, valueOf_float_test_001)
96 {
97 // this is demonstration code
98 // ASSERT_TRUE(1 == 1) << "a message";
99 float nValue = 3.0f;
100 valueOf_float_test(nValue);
101 }
102
TEST_F(valueOf,valueOf_float_test_002)103 TEST_F(valueOf, valueOf_float_test_002)
104 {
105 float nValue = 3.5f;
106 valueOf_float_test(nValue);
107 }
108
TEST_F(valueOf,valueOf_float_test_003)109 TEST_F(valueOf, valueOf_float_test_003)
110 {
111 float nValue = 3.0625f;
112 valueOf_float_test(nValue);
113 }
114
TEST_F(valueOf,valueOf_float_test_004)115 TEST_F(valueOf, valueOf_float_test_004)
116 {
117 float nValue = 3.502525f;
118 valueOf_float_test(nValue);
119 }
120
TEST_F(valueOf,valueOf_float_test_005)121 TEST_F(valueOf, valueOf_float_test_005)
122 {
123 float nValue = 3.141592f;
124 valueOf_float_test(nValue);
125 }
126
TEST_F(valueOf,valueOf_float_test_006)127 TEST_F(valueOf, valueOf_float_test_006)
128 {
129 float nValue = 3.5025255f;
130 valueOf_float_test(nValue);
131 }
132
TEST_F(valueOf,valueOf_float_test_007)133 TEST_F(valueOf, valueOf_float_test_007)
134 {
135 float nValue = 3.0039062f;
136 valueOf_float_test(nValue);
137 }
138
TEST_F(valueOf,valueOf_double_test_001)139 TEST_F(valueOf, valueOf_double_test_001)
140 {
141 double nValue = 3.0;
142 valueOf_double_test(nValue);
143 }
TEST_F(valueOf,valueOf_double_test_002)144 TEST_F(valueOf, valueOf_double_test_002)
145 {
146 double nValue = 3.5;
147 valueOf_double_test(nValue);
148 }
TEST_F(valueOf,valueOf_double_test_003)149 TEST_F(valueOf, valueOf_double_test_003)
150 {
151 double nValue = 3.0625;
152 valueOf_double_test(nValue);
153 }
TEST_F(valueOf,valueOf_double_test_004)154 TEST_F(valueOf, valueOf_double_test_004)
155 {
156 double nValue = 3.1415926535;
157 valueOf_double_test(nValue);
158 }
TEST_F(valueOf,valueOf_double_test_005)159 TEST_F(valueOf, valueOf_double_test_005)
160 {
161 double nValue = 3.141592653589793;
162 valueOf_double_test(nValue);
163 }
TEST_F(valueOf,valueOf_double_test_006)164 TEST_F(valueOf, valueOf_double_test_006)
165 {
166 double nValue = 3.1415926535897932;
167 valueOf_double_test(nValue);
168 }
TEST_F(valueOf,valueOf_double_test_007)169 TEST_F(valueOf, valueOf_double_test_007)
170 {
171 double nValue = 3.14159265358979323;
172 valueOf_double_test(nValue);
173 }
TEST_F(valueOf,valueOf_double_test_008)174 TEST_F(valueOf, valueOf_double_test_008)
175 {
176 double nValue = 3.141592653589793238462643;
177 valueOf_double_test(nValue);
178 }
179
180
181 // -----------------------------------------------------------------------------
182 // - toDouble (tests)
183 // -----------------------------------------------------------------------------
184 class toDouble : public ::testing::Test
185 {
186
187 public:
188
toDouble()189 toDouble()
190 {
191 // testPrecision a;
192 }
193
194
195
196 // initialise your test code values here.
SetUp()197 void SetUp()
198 {
199 }
200
TearDown()201 void TearDown()
202 {
203 }
204
toDouble_test_impl(rtl::OString const & _sValue)205 void toDouble_test_impl(rtl::OString const& _sValue)
206 {
207 double nValueATOF = atof( _sValue.getStr() );
208
209 // rtl::OUString suValue = rtl::OUString::createFromAscii( _sValue.getStr() );
210 double nValueToDouble = _sValue.toDouble();
211
212 bool bEqualResult = is_double_equal(nValueToDouble, nValueATOF);
213 ASSERT_TRUE(bEqualResult == true) << "Values are not equal.";
214 }
215
toDouble_test(rtl::OString const & _sValue)216 void toDouble_test(rtl::OString const& _sValue)
217 {
218 toDouble_test_impl(_sValue);
219
220 // test also the negativ part.
221 rtl::OString sNegativValue("-");
222 sNegativValue += _sValue;
223 toDouble_test_impl(sNegativValue);
224 }
225 }; // class toDouble
226
TEST_F(toDouble,toDouble_selftest)227 TEST_F(toDouble, toDouble_selftest)
228 {
229 printf("Start selftest:\n");
230 ASSERT_TRUE (is_double_equal(1.0, 1.01) == false);
231 ASSERT_TRUE (is_double_equal(1.0, 1.001) == false);
232 ASSERT_TRUE (is_double_equal(1.0, 1.0001) == false);
233 ASSERT_TRUE (is_double_equal(1.0, 1.00001) == false);
234 ASSERT_TRUE (is_double_equal(1.0, 1.000001) == false);
235 ASSERT_TRUE (is_double_equal(1.0, 1.0000001) == false);
236 ASSERT_TRUE (is_double_equal(1.0, 1.00000001) == false);
237 ASSERT_TRUE (is_double_equal(1.0, 1.000000001) == false);
238 ASSERT_TRUE (is_double_equal(1.0, 1.0000000001) == false);
239 ASSERT_TRUE (is_double_equal(1.0, 1.00000000001) == false);
240 ASSERT_TRUE (is_double_equal(1.0, 1.000000000001) == false);
241 ASSERT_TRUE (is_double_equal(1.0, 1.0000000000001) == false);
242 // we check til 14 values after comma
243 ASSERT_TRUE (is_double_equal(1.0, 1.00000000000001) == true);
244 ASSERT_TRUE (is_double_equal(1.0, 1.000000000000001) == true);
245 ASSERT_TRUE (is_double_equal(1.0, 1.0000000000000001) == true);
246 printf("Selftest done.\n");
247 }
248
TEST_F(toDouble,toDouble_test_3)249 TEST_F(toDouble, toDouble_test_3)
250 {
251 rtl::OString sValue("3");
252 toDouble_test(sValue);
253 }
TEST_F(toDouble,toDouble_test_3_5)254 TEST_F(toDouble, toDouble_test_3_5)
255 {
256 rtl::OString sValue("3.5");
257 toDouble_test(sValue);
258 }
TEST_F(toDouble,toDouble_test_3_0625)259 TEST_F(toDouble, toDouble_test_3_0625)
260 {
261 rtl::OString sValue("3.0625");
262 toDouble_test(sValue);
263 }
TEST_F(toDouble,toDouble_test_pi)264 TEST_F(toDouble, toDouble_test_pi)
265 {
266 // value from http://www.angio.net/pi/digits/50.txt
267 rtl::OString sValue("3.141592653589793238462643383279502884197169399375");
268 toDouble_test(sValue);
269 }
270
TEST_F(toDouble,toDouble_test_1)271 TEST_F(toDouble, toDouble_test_1)
272 {
273 rtl::OString sValue("1");
274 toDouble_test(sValue);
275 }
TEST_F(toDouble,toDouble_test_10)276 TEST_F(toDouble, toDouble_test_10)
277 {
278 rtl::OString sValue("10");
279 toDouble_test(sValue);
280 }
TEST_F(toDouble,toDouble_test_100)281 TEST_F(toDouble, toDouble_test_100)
282 {
283 rtl::OString sValue("100");
284 toDouble_test(sValue);
285 }
TEST_F(toDouble,toDouble_test_1000)286 TEST_F(toDouble, toDouble_test_1000)
287 {
288 rtl::OString sValue("1000");
289 toDouble_test(sValue);
290 }
TEST_F(toDouble,toDouble_test_10000)291 TEST_F(toDouble, toDouble_test_10000)
292 {
293 rtl::OString sValue("10000");
294 toDouble_test(sValue);
295 }
TEST_F(toDouble,toDouble_test_1e99)296 TEST_F(toDouble, toDouble_test_1e99)
297 {
298 rtl::OString sValue("1e99");
299 toDouble_test(sValue);
300 }
TEST_F(toDouble,toDouble_test_1e_n99)301 TEST_F(toDouble, toDouble_test_1e_n99)
302 {
303 rtl::OString sValue("1e-99");
304 toDouble_test(sValue);
305 }
TEST_F(toDouble,toDouble_test_1e308)306 TEST_F(toDouble, toDouble_test_1e308)
307 {
308 rtl::OString sValue("1e308");
309 toDouble_test(sValue);
310 }
311
312 // -----------------------------------------------------------------------------
313 // - getToken (tests)
314 // -----------------------------------------------------------------------------
315 class getToken : public ::testing::Test
316 {
317
318 public:
319
320 // initialise your test code values here.
SetUp()321 void SetUp()
322 {
323 }
324
TearDown()325 void TearDown()
326 {
327 }
328 }; // class getToken
329
330
TEST_F(getToken,getToken_000)331 TEST_F(getToken, getToken_000)
332 {
333 rtl::OString sTokenStr;
334
335 sal_Int32 nIndex = 0;
336 do
337 {
338 rtl::OString sToken = sTokenStr.getToken( 0, ';', nIndex );
339 }
340 while ( nIndex >= 0 );
341 // printf("Index %d\n", nIndex);
342 // should not GPF
343 }
344
TEST_F(getToken,getToken_001)345 TEST_F(getToken, getToken_001)
346 {
347 rtl::OString sTokenStr = "a;b";
348
349 sal_Int32 nIndex = 0;
350
351 rtl::OString sToken = sTokenStr.getToken( 0, ';', nIndex );
352 ASSERT_TRUE(sToken.equals("a") == sal_True) << "Token should be a 'a'";
353
354 /* rtl::OString */ sToken = sTokenStr.getToken( 0, ';', nIndex );
355 ASSERT_TRUE(sToken.equals("b") == sal_True) << "Token should be a 'b'";
356 ASSERT_TRUE(nIndex == -1) << "index should be negative";
357 }
358
TEST_F(getToken,getToken_002)359 TEST_F(getToken, getToken_002)
360 {
361 rtl::OString sTokenStr = "a;b.c";
362
363 sal_Int32 nIndex = 0;
364
365 rtl::OString sToken = sTokenStr.getToken( 0, ';', nIndex );
366 ASSERT_TRUE(sToken.equals("a") == sal_True) << "Token should be a 'a'";
367
368 /* rtl::OString */ sToken = sTokenStr.getToken( 0, '.', nIndex );
369 ASSERT_TRUE(sToken.equals("b") == sal_True) << "Token should be a 'b'";
370
371 /* rtl::OString */ sToken = sTokenStr.getToken( 0, '.', nIndex );
372 ASSERT_TRUE(sToken.equals("c") == sal_True) << "Token should be a 'c'";
373 ASSERT_TRUE(nIndex == -1) << "index should be negative";
374 }
375
TEST_F(getToken,getToken_003)376 TEST_F(getToken, getToken_003)
377 {
378 rtl::OString sTokenStr = "a;;b";
379
380 sal_Int32 nIndex = 0;
381
382 rtl::OString sToken = sTokenStr.getToken( 0, ';', nIndex );
383 ASSERT_TRUE(sToken.equals("a") == sal_True) << "Token should be a 'a'";
384
385 /* rtl::OString */ sToken = sTokenStr.getToken( 0, ';', nIndex );
386 ASSERT_TRUE(sToken.getLength() == 0) << "Token should be empty";
387
388 /* rtl::OString */ sToken = sTokenStr.getToken( 0, ';', nIndex );
389 ASSERT_TRUE(sToken.equals("b") == sal_True) << "Token should be a 'b'";
390 ASSERT_TRUE(nIndex == -1) << "index should be negative";
391 }
392
TEST_F(getToken,getToken_004)393 TEST_F(getToken, getToken_004)
394 {
395 rtl::OString sTokenStr = "longer.then.ever.";
396
397 sal_Int32 nIndex = 0;
398
399 rtl::OString sToken = sTokenStr.getToken( 0, '.', nIndex );
400 ASSERT_TRUE(sToken.equals("longer") == sal_True) << "Token should be 'longer'";
401
402 /* rtl::OString */ sToken = sTokenStr.getToken( 0, '.', nIndex );
403 ASSERT_TRUE(sToken.equals("then") == sal_True) << "Token should be 'then'";
404
405 /* rtl::OString */ sToken = sTokenStr.getToken( 0, '.', nIndex );
406 ASSERT_TRUE(sToken.equals("ever") == sal_True) << "Token should be 'ever'";
407
408 /* rtl::OString */ sToken = sTokenStr.getToken( 0, '.', nIndex );
409 ASSERT_TRUE(sToken.getLength() == 0) << "Token should be empty";
410
411 ASSERT_TRUE(nIndex == -1) << "index should be negative";
412 }
413
414 // -----------------------------------------------------------------------------
415 // testing the method replaceAt( sal_Int32 index, sal_Int32 count,
416 // const OString& newStr )
417 // -----------------------------------------------------------------------------
418
419 // Developer note: Mindy Liu, 2004-04-23
420 // stollen from sal/qa/rtl_strings/rtl_OString.cxx
421
422 class replaceAt : public ::testing::Test
423 {
424
425 public:
426 // initialise your test code values here.
SetUp()427 void SetUp()
428 {
429 }
430
TearDown()431 void TearDown()
432 {
433 }
check_replaceAt(const rtl::OString * expVal,const rtl::OString * input,const rtl::OString * newStr,sal_Int32 index,sal_Int32 count)434 sal_Bool check_replaceAt( const rtl::OString* expVal, const rtl::OString* input,
435 const rtl::OString* newStr, sal_Int32 index, sal_Int32 count)
436 {
437 ::rtl::OString aStr1;
438 aStr1= input->replaceAt( index, count, *newStr );
439
440 printf("the result OString is %s#\n", aStr1.getStr() );
441
442 sal_Bool bRes = ( expVal->compareTo(aStr1) == 0 );
443 return bRes;
444 }
445 }; // class replaceAt
446
TEST_F(replaceAt,replaceAt_001)447 TEST_F(replaceAt, replaceAt_001)
448 {
449 sal_Bool bRes = check_replaceAt(new rtl::OString("Java@Sun"),
450 new rtl::OString("Sun java"), new rtl::OString("Java@Sun"), 0, 8 );
451 ASSERT_TRUE(bRes == sal_True) << "string differs, replace whole string";
452 }
453
TEST_F(replaceAt,replaceAt_002)454 TEST_F(replaceAt, replaceAt_002)
455 {
456 sal_Bool bRes = check_replaceAt(new rtl::OString("Sun Java desktop system"),
457 new rtl::OString("Sun "), new rtl::OString("Java desktop system"), 10, 8 );
458 ASSERT_TRUE(bRes == sal_True) << "index > length of input string";
459 }
460
TEST_F(replaceAt,replaceAt_003)461 TEST_F(replaceAt, replaceAt_003)
462 {
463 sal_Bool bRes = check_replaceAt(new rtl::OString("SuJava desktop system"),
464 new rtl::OString("Sun "), new rtl::OString("Java desktop system"), 2, 64 );
465 ASSERT_TRUE(bRes == sal_True) << "larger count";
466 }
467
TEST_F(replaceAt,replaceAt_004)468 TEST_F(replaceAt, replaceAt_004)
469 {
470
471 sal_Bool bRes = check_replaceAt(new rtl::OString("Java desktop system"),
472 new rtl::OString("Sun "), new rtl::OString("Java desktop system"), -4, 8 );
473 ASSERT_TRUE(bRes == sal_True) << "navigate index";
474 }
TEST_F(replaceAt,replaceAt_005)475 TEST_F(replaceAt, replaceAt_005)
476 {
477
478 sal_Bool bRes = check_replaceAt(new rtl::OString("Sun Jesktop System"),
479 new rtl::OString("Sun Java Desktop System"), new rtl::OString(""), 5, 5 );
480 ASSERT_TRUE(bRes == sal_True) << "replace with null string";
481 }
482
483
484 } // namespace rtl_OString
485
486
main(int argc,char ** argv)487 int main(int argc, char **argv)
488 {
489 ::testing::InitGoogleTest(&argc, argv);
490 return RUN_ALL_TESTS();
491 }
492