xref: /haiku/src/tests/kits/support/bstring/StringSearchTest.cpp (revision 93aeb8c3bc3f13cb1f282e3e749258a23790d947)
1 #include "StringSearchTest.h"
2 #include "cppunit/TestCaller.h"
3 #include <String.h>
4 #include <stdio.h>
5 
6 StringSearchTest::StringSearchTest(std::string name) :
7 		BTestCase(name)
8 {
9 }
10 
11 
12 
13 StringSearchTest::~StringSearchTest()
14 {
15 }
16 
17 
18 void
19 StringSearchTest::PerformTest(void)
20 {
21 	BString *string1, *string2;
22 	int32 i;
23 
24 	//FindFirst(BString&)
25 	NextSubTest();
26 	string1 = new BString("last but not least");
27 	string2 = new BString("st");
28 	i = string1->FindFirst(*string2);
29 	CPPUNIT_ASSERT(i == 2);
30 	delete string1;
31 	delete string2;
32 
33 	NextSubTest();
34 	string1 = new BString;
35 	string2 = new BString("some text");
36 	i = string1->FindFirst(*string2);
37 	CPPUNIT_ASSERT(i == B_ERROR);
38 	delete string1;
39 	delete string2;
40 
41 	//FindFirst(char*)
42 	NextSubTest();
43 	string1 = new BString("last but not least");
44 	i = string1->FindFirst("st");
45 	CPPUNIT_ASSERT(i == 2);
46 	delete string1;
47 
48 	NextSubTest();
49 	string1 = new BString;
50 	i = string1->FindFirst("some text");
51 	CPPUNIT_ASSERT(i == B_ERROR);
52 	delete string1;
53 
54 #ifndef TEST_R5
55 //	Commented, since crashes R5
56 	NextSubTest();
57 	string1 = new BString("string");
58 	i = string1->FindFirst((char*)NULL);
59 	CPPUNIT_ASSERT(i == B_BAD_VALUE);
60 	delete string1;
61 #endif
62 
63 	//FindFirst(BString&, int32)
64 	NextSubTest();
65 	string1 = new BString("abc abc abc");
66 	string2 = new BString("abc");
67 	i = string1->FindFirst(*string2, 5);
68 	CPPUNIT_ASSERT(i == 8);
69 	delete string1;
70 	delete string2;
71 
72 	NextSubTest();
73 	string1 = new BString("abc abc abc");
74 	string2 = new BString("abc");
75 	i = string1->FindFirst(*string2, 200);
76 	CPPUNIT_ASSERT(i == B_ERROR);
77 	delete string1;
78 	delete string2;
79 
80 	NextSubTest();
81 	string1 = new BString("abc abc abc");
82 	string2 = new BString("abc");
83 	i = string1->FindFirst(*string2, -10);
84 	CPPUNIT_ASSERT(i == B_ERROR);
85 	delete string1;
86 	delete string2;
87 
88 	//FindFirst(const char*, int32)
89 	NextSubTest();
90 	string1 = new BString("abc abc abc");
91 	i = string1->FindFirst("abc", 2);
92 	CPPUNIT_ASSERT(i == 4);
93 	delete string1;
94 
95 	NextSubTest();
96 	string1 = new BString("abc abc abc");
97 	i = string1->FindFirst("abc", 200);
98 	CPPUNIT_ASSERT(i == B_ERROR);
99 	delete string1;
100 
101 	NextSubTest();
102 	string1 = new BString("abc abc abc");
103 	i = string1->FindFirst("abc", -10);
104 	CPPUNIT_ASSERT(i == B_ERROR);
105 	delete string1;
106 
107 #ifndef TEST_R5
108 	//Commented since crashes R5
109 	NextSubTest();
110 	string1 = new BString("abc abc abc");
111 	i = string1->FindFirst((char*)NULL, 3);
112 	CPPUNIT_ASSERT(i == B_BAD_VALUE);
113 	delete string1;
114 #endif
115 
116 	//FindFirst(char)
117 	NextSubTest();
118 	string1 = new BString("abcd abcd");
119 	i = string1->FindFirst('c');
120 	CPPUNIT_ASSERT(i == 2);
121 	delete string1;
122 
123 	NextSubTest();
124 	string1 = new BString("abcd abcd");
125 	i = string1->FindFirst('e');
126 	CPPUNIT_ASSERT(i == B_ERROR);
127 	delete string1;
128 
129 	//FindFirst(char, int32)
130 	NextSubTest();
131 	string1 = new BString("abc abc abc");
132 	i = string1->FindFirst("b", 3);
133 	CPPUNIT_ASSERT(i == 5);
134 	delete string1;
135 
136 	NextSubTest();
137 	string1 = new BString("abcd abcd");
138 	i = string1->FindFirst('e', 3);
139 	CPPUNIT_ASSERT(i == B_ERROR);
140 	delete string1;
141 
142 	NextSubTest();
143 	string1 = new BString("abc abc abc");
144 	i = string1->FindFirst("a", 9);
145 	CPPUNIT_ASSERT(i == B_ERROR);
146 	delete string1;
147 
148 	//FindLast(BString&)
149 	NextSubTest();
150 	string1 = new BString("last but not least");
151 	string2 = new BString("st");
152 	i = string1->FindLast(*string2);
153 	CPPUNIT_ASSERT(i == 16);
154 	delete string1;
155 	delete string2;
156 
157 	NextSubTest();
158 	string1 = new BString;
159 	string2 = new BString("some text");
160 	i = string1->FindLast(*string2);
161 	CPPUNIT_ASSERT(i == B_ERROR);
162 	delete string1;
163 	delete string2;
164 
165 	//FindLast(char*)
166 	NextSubTest();
167 	string1 = new BString("last but not least");
168 	i = string1->FindLast("st");
169 	CPPUNIT_ASSERT(i == 16);
170 	delete string1;
171 
172 	NextSubTest();
173 	string1 = new BString;
174 	i = string1->FindLast("some text");
175 	CPPUNIT_ASSERT(i == B_ERROR);
176 	delete string1;
177 
178 #ifndef TEST_R5
179 	//Commented since crashes R5
180 	NextSubTest();
181 	string1 = new BString("string");
182 	i = string1->FindLast((char*)NULL);
183 	CPPUNIT_ASSERT(i == B_BAD_VALUE);
184 	delete string1;
185 #endif
186 
187 	//FindLast(BString&, int32)
188 	NextSubTest();
189 	string1 = new BString("abcabcabc");
190 	string2 = new BString("abc");
191 	i = string1->FindLast(*string2, 7);
192 	CPPUNIT_ASSERT(i == 3);
193 	delete string1;
194 	delete string2;
195 
196 	NextSubTest();
197 	string1 = new BString("abc abc abc");
198 	string2 = new BString("abc");
199 	i = string1->FindLast(*string2, -10);
200 	CPPUNIT_ASSERT(i == B_ERROR);
201 	delete string1;
202 	delete string2;
203 
204 	//FindLast(const char*, int32)
205 	NextSubTest();
206 	string1 = new BString("abc abc abc");
207 	i = string1->FindLast("abc", 9);
208 	CPPUNIT_ASSERT(i == 4);
209 	delete string1;
210 
211 	NextSubTest();
212 	string1 = new BString("abc abc abc");
213 	i = string1->FindLast("abc", -10);
214 	CPPUNIT_ASSERT(i == B_ERROR);
215 	delete string1;
216 
217 #ifndef TEST_R5
218 	//Commented since crashes r5
219 	NextSubTest();
220 	string1 = new BString("abc abc abc");
221 	i = string1->FindLast((char*)NULL, 3);
222 	CPPUNIT_ASSERT(i == B_BAD_VALUE);
223 	delete string1;
224 #endif
225 
226 	//FindLast(char)
227 	NextSubTest();
228 	string1 = new BString("abcd abcd");
229 	i = string1->FindLast('c');
230 	CPPUNIT_ASSERT(i == 7);
231 	delete string1;
232 
233 	NextSubTest();
234 	string1 = new BString("abcd abcd");
235 	i = string1->FindLast('e');
236 	CPPUNIT_ASSERT(i == B_ERROR);
237 	delete string1;
238 
239 	//FindLast(char, int32)
240 	NextSubTest();
241 	string1 = new BString("abc abc abc");
242 	i = string1->FindLast("b", 5);
243 	CPPUNIT_ASSERT(i == 1);
244 	delete string1;
245 
246 	NextSubTest();
247 	string1 = new BString("abcd abcd");
248 	i = string1->FindLast('e', 3);
249 	CPPUNIT_ASSERT(i == B_ERROR);
250 	delete string1;
251 
252 	NextSubTest();
253 	string1 = new BString("abc abc abc");
254 	i = string1->FindLast("a", 0);
255 	CPPUNIT_ASSERT(i == B_ERROR);
256 	delete string1;
257 
258 	//IFindFirst(BString&)
259 	NextSubTest();
260 	string1 = new BString("last but not least");
261 	string2 = new BString("st");
262 	i = string1->IFindFirst(*string2);
263 	CPPUNIT_ASSERT(i == 2);
264 	delete string1;
265 	delete string2;
266 
267 	NextSubTest();
268 	string1 = new BString("last but not least");
269 	string2 = new BString("ST");
270 	i = string1->IFindFirst(*string2);
271 	CPPUNIT_ASSERT(i == 2);
272 	delete string1;
273 	delete string2;
274 
275 	NextSubTest();
276 	string1 = new BString;
277 	string2 = new BString("some text");
278 	i = string1->IFindFirst(*string2);
279 	CPPUNIT_ASSERT(i == B_ERROR);
280 	delete string1;
281 	delete string2;
282 
283 	NextSubTest();
284 	string1 = new BString("string");
285 	string2 = new BString;
286 	i = string1->IFindFirst(*string2);
287 	CPPUNIT_ASSERT(i == 0);
288 	delete string1;
289 	delete string2;
290 
291 	//IFindFirst(const char*)
292 	NextSubTest();
293 	string1 = new BString("last but not least");
294 	i = string1->IFindFirst("st");
295 	CPPUNIT_ASSERT(i == 2);
296 	delete string1;
297 
298 	NextSubTest();
299 	string1 = new BString("LAST BUT NOT least");
300 	i = string1->IFindFirst("st");
301 	CPPUNIT_ASSERT(i == 2);
302 	delete string1;
303 
304 	NextSubTest();
305 	string1 = new BString;
306 	i = string1->IFindFirst("some text");
307 	CPPUNIT_ASSERT(i == B_ERROR);
308 	delete string1;
309 
310 #ifndef TEST_R5
311 	//Commented, since crashes R5
312 	NextSubTest();
313 	string1 = new BString("string");
314 	i = string1->IFindFirst((char*)NULL);
315 	CPPUNIT_ASSERT(i == B_BAD_VALUE);
316 	delete string1;
317 #endif
318 
319 	//IFindFirst(BString&, int32)
320 	NextSubTest();
321 	string1 = new BString("abc abc abc");
322 	string2 = new BString("abc");
323 	i = string1->IFindFirst(*string2, 5);
324 	CPPUNIT_ASSERT(i == 8);
325 	delete string1;
326 	delete string2;
327 
328 	NextSubTest();
329 	string1 = new BString("abc abc abc");
330 	string2 = new BString("AbC");
331 	i = string1->IFindFirst(*string2, 5);
332 	CPPUNIT_ASSERT(i == 8);
333 	delete string1;
334 	delete string2;
335 
336 	NextSubTest();
337 	string1 = new BString("abc abc abc");
338 	string2 = new BString("abc");
339 	i = string1->IFindFirst(*string2, 200);
340 	CPPUNIT_ASSERT(i == B_ERROR);
341 	delete string1;
342 	delete string2;
343 
344 	NextSubTest();
345 	string1 = new BString("abc abc abc");
346 	string2 = new BString("abc");
347 	i = string1->IFindFirst(*string2, -10);
348 	CPPUNIT_ASSERT(i == B_ERROR);
349 	delete string1;
350 	delete string2;
351 
352 	//IFindFirst(const char*, int32)
353 	NextSubTest();
354 	string1 = new BString("abc abc abc");
355 	i = string1->IFindFirst("abc", 2);
356 	CPPUNIT_ASSERT(i == 4);
357 	delete string1;
358 
359 	NextSubTest();
360 	string1 = new BString("AbC ABC abC");
361 	i = string1->IFindFirst("abc", 2);
362 	CPPUNIT_ASSERT(i == 4);
363 	delete string1;
364 
365 	NextSubTest();
366 	string1 = new BString("abc abc abc");
367 	i = string1->IFindFirst("abc", 200);
368 	CPPUNIT_ASSERT(i == B_ERROR);
369 	delete string1;
370 
371 	NextSubTest();
372 	string1 = new BString("abc abc abc");
373 	i = string1->IFindFirst("abc", -10);
374 	CPPUNIT_ASSERT(i == B_ERROR);
375 	delete string1;
376 
377 #ifndef TEST_R5
378 	//IFindLast(BString&)
379 	NextSubTest();
380 	string1 = new BString("last but not least");
381 	string2 = new BString("st");
382 	i = string1->IFindLast(*string2);
383 	CPPUNIT_ASSERT(i == 16);
384 	delete string1;
385 	delete string2;
386 
387 	NextSubTest();
388 	string1 = new BString("laSt but NOT leaSt");
389 	string2 = new BString("sT");
390 	i = string1->IFindLast(*string2);
391 	CPPUNIT_ASSERT(i == 16);
392 	delete string1;
393 	delete string2;
394 #endif
395 
396 	NextSubTest();
397 	string1 = new BString;
398 	string2 = new BString("some text");
399 	i = string1->IFindLast(*string2);
400 	CPPUNIT_ASSERT(i == B_ERROR);
401 	delete string1;
402 	delete string2;
403 
404 	//IFindLast(const char*)
405 	NextSubTest();
406 	string1 = new BString("last but not least");
407 	i = string1->IFindLast("st");
408 	CPPUNIT_ASSERT(i == 16);
409 	delete string1;
410 
411 #ifndef TEST_R5
412 	NextSubTest();
413 	string1 = new BString("laSt but NOT leaSt");
414 	i = string1->IFindLast("ST");
415 	CPPUNIT_ASSERT(i == 16);
416 	delete string1;
417 #endif
418 
419 	NextSubTest();
420 	string1 = new BString;
421 	i = string1->IFindLast("some text");
422 	CPPUNIT_ASSERT(i == B_ERROR);
423 	delete string1;
424 
425 #ifndef TEST_R5
426 	//Commented since crashes R5
427 	NextSubTest();
428 	string1 = new BString("string");
429 	i = string1->IFindLast((char*)NULL);
430 	CPPUNIT_ASSERT(i == B_BAD_VALUE);
431 	delete string1;
432 #endif
433 
434 	//FindLast(BString&, int32)
435 	NextSubTest();
436 	string1 = new BString("abcabcabc");
437 	string2 = new BString("abc");
438 	i = string1->IFindLast(*string2, 7);
439 	CPPUNIT_ASSERT(i == 3);
440 	delete string1;
441 	delete string2;
442 
443 	NextSubTest();
444 	string1 = new BString("abcabcabc");
445 	string2 = new BString("AbC");
446 	i = string1->IFindLast(*string2, 7);
447 	CPPUNIT_ASSERT(i == 3);
448 	delete string1;
449 	delete string2;
450 
451 	NextSubTest();
452 	string1 = new BString("abc abc abc");
453 	string2 = new BString("abc");
454 	i = string1->IFindLast(*string2, -10);
455 	CPPUNIT_ASSERT(i == B_ERROR);
456 	delete string1;
457 	delete string2;
458 
459 	//IFindLast(const char*, int32)
460 //#ifndef TEST_R5
461 	NextSubTest();
462 	string1 = new BString("abc abc abc");
463 	i = string1->IFindLast("abc", 9);
464 	CPPUNIT_ASSERT(i == 4);
465 	delete string1;
466 //#endif
467 #ifndef TEST_R5
468 	NextSubTest();
469 	string1 = new BString("ABc abC aBC");
470 	i = string1->IFindLast("aBc", 9);
471 	CPPUNIT_ASSERT(i == 4);
472 	delete string1;
473 #endif
474 	NextSubTest();
475 	string1 = new BString("abc abc abc");
476 	i = string1->IFindLast("abc", -10);
477 	CPPUNIT_ASSERT(i == B_ERROR);
478 	delete string1;
479 
480 	NextSubTest();
481 	string1 = new BString("abc def ghi");
482 	i = string1->IFindLast("abc",4);
483 	CPPUNIT_ASSERT(i == 0);
484 	delete string1;
485 }
486 
487 
488 CppUnit::Test *StringSearchTest::suite(void)
489 {
490 	typedef CppUnit::TestCaller<StringSearchTest>
491 		StringSearchTestCaller;
492 
493 	return(new StringSearchTestCaller("BString::Search Test", &StringSearchTest::PerformTest));
494 }
495