Imported Upstream version 58.1
[platform/upstream/icu.git] / source / test / intltest / v32test.cpp
1 // Copyright (C) 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /********************************************************************
4  * COPYRIGHT:
5  * Copyright (c) 2002-2007, International Business Machines Corporation and
6  * others. All Rights Reserved.
7  ********************************************************************/
8
9 //
10 //   regextst.cpp
11 //
12 //      ICU Regular Expressions test, part of intltest.
13 //
14
15 #include "intltest.h"
16
17 #include "v32test.h"
18 #include "uvectr32.h"
19 #include "uvector.h"
20 #include "util.h"
21 #include <stdlib.h>
22 #include <stdio.h>
23
24
25 //---------------------------------------------------------------------------
26 //
27 //  Test class boilerplate
28 //
29 //---------------------------------------------------------------------------
30 UVector32Test::UVector32Test() 
31 {
32 }
33
34
35 UVector32Test::~UVector32Test()
36 {
37 }
38
39
40
41 void UVector32Test::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
42 {
43     if (exec) logln("TestSuite UVector32Test: ");
44     switch (index) {
45
46         case 0: name = "UVector32_API";
47             if (exec) UVector32_API(); 
48             break;
49         default: name = ""; 
50             break; //needed to end loop
51     }
52 }
53
54
55 //---------------------------------------------------------------------------
56 //
57 //   Error Checking / Reporting macros used in all of the tests.
58 //
59 //---------------------------------------------------------------------------
60 #define TEST_CHECK_STATUS(status) \
61     if (U_FAILURE(status)) {\
62         errln("UVector32Test failure at line %d.  status=%s\n", __LINE__, u_errorName(status));\
63         return;\
64     }
65
66 #define TEST_ASSERT(expr) \
67     if ((expr)==FALSE) {\
68         errln("UVector32Test failure at line %d.\n", __LINE__);\
69     }
70
71 //---------------------------------------------------------------------------
72 //
73 //      UVector32_API      Check for basic functionality of UVector32.
74 //
75 //---------------------------------------------------------------------------
76 void UVector32Test::UVector32_API() {
77
78     UErrorCode  status = U_ZERO_ERROR;
79     UVector32     *a;
80     UVector32     *b;
81
82     a = new UVector32(status);
83     TEST_CHECK_STATUS(status);
84     delete a;
85
86     status = U_ZERO_ERROR;
87     a = new UVector32(2000, status);
88     TEST_CHECK_STATUS(status);
89     delete a;
90
91     //
92     //  assign()
93     //
94     status = U_ZERO_ERROR;
95     a = new UVector32(status);
96     a->addElement(10, status);
97     a->addElement(20, status);
98     a->addElement(30, status);
99     b = new UVector32(status);
100     b->assign(*a, status);
101     TEST_ASSERT(b->size() == 3);
102     TEST_ASSERT(b->elementAti(1) == 20);
103     TEST_CHECK_STATUS(status);
104     delete a;
105     delete b;
106
107     //
108     //  operator == and != and equals()
109     //
110     status = U_ZERO_ERROR;
111     a = new UVector32(status);
112     a->addElement(10, status);
113     a->addElement(20, status);
114     a->addElement(30, status);
115     b = new UVector32(status);
116     TEST_ASSERT(*b != *a);
117     TEST_ASSERT(!(*b == *a));
118     TEST_ASSERT(!b->equals(*a));
119     b->assign(*a, status);
120     TEST_ASSERT(*b == *a);
121     TEST_ASSERT(!(*b != *a));
122     TEST_ASSERT(b->equals(*a));
123     b->addElement(666, status);
124     TEST_ASSERT(*b != *a);
125     TEST_ASSERT(!(*b == *a));
126     TEST_ASSERT(!b->equals(*a));
127     TEST_CHECK_STATUS(status);
128     delete b;
129     delete a;
130
131     //
132     //  addElement().   Covered by above tests.
133     //
134
135     //
136     // setElementAt()
137     //
138     status = U_ZERO_ERROR;
139     a = new UVector32(status);
140     a->addElement(10, status);
141     a->addElement(20, status);
142     a->addElement(30, status);
143     a->setElementAt(666, 1);
144     TEST_ASSERT(a->elementAti(0) == 10);
145     TEST_ASSERT(a->elementAti(1) == 666);
146     TEST_ASSERT(a->size() == 3);
147     TEST_CHECK_STATUS(status);
148     delete a;
149
150     //
151     // insertElementAt()
152     //
153     status = U_ZERO_ERROR;
154     a = new UVector32(status);
155     a->addElement(10, status);
156     a->addElement(20, status);
157     a->addElement(30, status);
158     a->insertElementAt(666, 1, status);
159     TEST_ASSERT(a->elementAti(0) == 10);
160     TEST_ASSERT(a->elementAti(1) == 666);
161     TEST_ASSERT(a->elementAti(2) == 20);
162     TEST_ASSERT(a->elementAti(3) == 30);
163     TEST_ASSERT(a->size() == 4);
164     TEST_CHECK_STATUS(status);
165     delete a;
166
167     //
168     //  elementAti()    covered by above tests
169     //
170
171     //
172     //  lastElementi
173     //
174     status = U_ZERO_ERROR;
175     a = new UVector32(status);
176     a->addElement(10, status);
177     a->addElement(20, status);
178     a->addElement(30, status);
179     TEST_ASSERT(a->lastElementi() == 30);
180     TEST_CHECK_STATUS(status);
181     delete a;
182
183
184     //
185     //  indexOf
186     //
187     status = U_ZERO_ERROR;
188     a = new UVector32(status);
189     a->addElement(10, status);
190     a->addElement(20, status);
191     a->addElement(30, status);
192     TEST_ASSERT(a->indexOf(30, 0) == 2);
193     TEST_ASSERT(a->indexOf(40, 0) == -1);
194     TEST_ASSERT(a->indexOf(10, 0) == 0);
195     TEST_ASSERT(a->indexOf(10, 1) == -1);
196     TEST_CHECK_STATUS(status);
197     delete a;
198
199     
200     //
201     //  contains
202     //
203     status = U_ZERO_ERROR;
204     a = new UVector32(status);
205     a->addElement(10, status);
206     a->addElement(20, status);
207     a->addElement(30, status);
208     TEST_ASSERT(a->contains(10) == TRUE);
209     TEST_ASSERT(a->contains(11) == FALSE);
210     TEST_ASSERT(a->contains(20) == TRUE);
211     TEST_ASSERT(a->contains(-10) == FALSE);
212     TEST_CHECK_STATUS(status);
213     delete a;
214
215
216     //
217     //  containsAll
218     //
219     status = U_ZERO_ERROR;
220     a = new UVector32(status);
221     a->addElement(10, status);
222     a->addElement(20, status);
223     a->addElement(30, status);
224     b = new UVector32(status);
225     TEST_ASSERT(a->containsAll(*b) == TRUE);
226     b->addElement(2, status);
227     TEST_ASSERT(a->containsAll(*b) == FALSE);
228     b->setElementAt(10, 0);
229     TEST_ASSERT(a->containsAll(*b) == TRUE);
230     TEST_ASSERT(b->containsAll(*a) == FALSE);
231     b->addElement(30, status);
232     b->addElement(20, status);
233     TEST_ASSERT(a->containsAll(*b) == TRUE);
234     TEST_ASSERT(b->containsAll(*a) == TRUE);
235     b->addElement(2, status);
236     TEST_ASSERT(a->containsAll(*b) == FALSE);
237     TEST_ASSERT(b->containsAll(*a) == TRUE);
238     TEST_CHECK_STATUS(status);
239     delete a;
240     delete b;
241
242     //
243     //  removeAll
244     //
245     status = U_ZERO_ERROR;
246     a = new UVector32(status);
247     a->addElement(10, status);
248     a->addElement(20, status);
249     a->addElement(30, status);
250     b = new UVector32(status);
251     a->removeAll(*b);
252     TEST_ASSERT(a->size() == 3);
253     b->addElement(20, status);
254     a->removeAll(*b);
255     TEST_ASSERT(a->size() == 2);
256     TEST_ASSERT(a->contains(10)==TRUE);
257     TEST_ASSERT(a->contains(30)==TRUE);
258     b->addElement(10, status);
259     a->removeAll(*b);
260     TEST_ASSERT(a->size() == 1);
261     TEST_ASSERT(a->contains(30) == TRUE);
262     TEST_CHECK_STATUS(status);
263     delete a;
264     delete b;
265
266     //
267     // retainAll
268     //
269     status = U_ZERO_ERROR;
270     a = new UVector32(status);
271     a->addElement(10, status);
272     a->addElement(20, status);
273     a->addElement(30, status);
274     b = new UVector32(status);
275     b->addElement(10, status);
276     b->addElement(20, status);
277     b->addElement(30, status);
278     b->addElement(15, status);
279     a->retainAll(*b);
280     TEST_ASSERT(a->size() == 3);
281     b->removeElementAt(1);
282     a->retainAll(*b);
283     TEST_ASSERT(a->contains(20) == FALSE);
284     TEST_ASSERT(a->size() == 2);
285     b->removeAllElements();
286     TEST_ASSERT(b->size() == 0);
287     a->retainAll(*b);
288     TEST_ASSERT(a->size() == 0);
289     TEST_CHECK_STATUS(status);
290     delete a;
291     delete b;
292
293     //
294     //  removeElementAt   Tested above.
295     //
296
297     //
298     //  removeAllElments   Tested above
299     //
300
301     //
302     //  size()   tested above
303     //
304
305     //
306     //  isEmpty
307     //
308     status = U_ZERO_ERROR;
309     a = new UVector32(status);
310     TEST_ASSERT(a->isEmpty() == TRUE);
311     a->addElement(10, status);
312     TEST_ASSERT(a->isEmpty() == FALSE);
313     a->addElement(20, status);
314     a->removeElementAt(0);
315     TEST_ASSERT(a->isEmpty() == FALSE);
316     a->removeElementAt(0);
317     TEST_ASSERT(a->isEmpty() == TRUE);
318     TEST_CHECK_STATUS(status);
319     delete a;
320
321
322     //
323     // ensureCapacity, expandCapacity
324     //
325     status = U_ZERO_ERROR;
326     a = new UVector32(status);
327     TEST_ASSERT(a->isEmpty() == TRUE);
328     a->addElement(10, status);
329     TEST_ASSERT(a->ensureCapacity(5000, status)== TRUE);
330     TEST_ASSERT(a->expandCapacity(20000, status) == TRUE);
331     TEST_CHECK_STATUS(status);
332     delete a;
333     
334     //
335     // setSize
336     //
337     status = U_ZERO_ERROR;
338     a = new UVector32(status);
339     a->addElement(10, status);
340     a->addElement(20, status);
341     a->addElement(30, status);
342     a->setSize(100);
343     TEST_ASSERT(a->size() == 100);
344     TEST_ASSERT(a->elementAti(0) == 10);
345     TEST_ASSERT(a->elementAti(1) == 20);
346     TEST_ASSERT(a->elementAti(2) == 30);
347     TEST_ASSERT(a->elementAti(3) == 0);
348     a->setElementAt(666, 99);
349     a->setElementAt(777, 100);
350     TEST_ASSERT(a->elementAti(99) == 666);
351     TEST_ASSERT(a->elementAti(100) == 0);
352     a->setSize(2);
353     TEST_ASSERT(a->elementAti(1) == 20);
354     TEST_ASSERT(a->elementAti(2) == 0);
355     TEST_ASSERT(a->size() == 2);
356     a->setSize(0);
357     TEST_ASSERT(a->empty() == TRUE);
358     TEST_ASSERT(a->size() == 0);
359
360     TEST_CHECK_STATUS(status);
361     delete a;
362
363     //
364     // containsNone
365     //
366     status = U_ZERO_ERROR;
367     a = new UVector32(status);
368     a->addElement(10, status);
369     a->addElement(20, status);
370     a->addElement(30, status);
371     b = new UVector32(status);
372     TEST_ASSERT(a->containsNone(*b) == TRUE);
373     b->addElement(5, status);
374     TEST_ASSERT(a->containsNone(*b) == TRUE);
375     b->addElement(30, status);
376     TEST_ASSERT(a->containsNone(*b) == FALSE);
377
378     TEST_CHECK_STATUS(status);
379     delete a;
380     delete b;
381
382     //
383     // sortedInsert
384     //
385     status = U_ZERO_ERROR;
386     a = new UVector32(status);
387     a->sortedInsert(30, status);
388     a->sortedInsert(20, status);
389     a->sortedInsert(10, status);
390     TEST_ASSERT(a->elementAti(0) == 10);
391     TEST_ASSERT(a->elementAti(1) == 20);
392     TEST_ASSERT(a->elementAti(2) == 30);
393
394     TEST_CHECK_STATUS(status);
395     delete a;
396
397     //
398     // getBuffer
399     //
400     status = U_ZERO_ERROR;
401     a = new UVector32(status);
402     a->addElement(10, status);
403     a->addElement(20, status);
404     int32_t *buf = a->getBuffer();
405     TEST_ASSERT(buf[0] == 10);
406     TEST_ASSERT(buf[1] == 20);
407     a->setSize(20000);
408     int32_t *resizedBuf;
409     resizedBuf = a->getBuffer();
410     //TEST_ASSERT(buf != resizedBuf); // The buffer might have been realloc'd
411     TEST_ASSERT(resizedBuf[0] == 10);
412     TEST_ASSERT(resizedBuf[1] == 20);
413
414     TEST_CHECK_STATUS(status);
415     delete a;
416
417
418     //
419     //  empty
420     //
421     status = U_ZERO_ERROR;
422     a = new UVector32(status);
423     TEST_ASSERT(a->empty() == TRUE);
424     a->addElement(10, status);
425     TEST_ASSERT(a->empty() == FALSE);
426     a->addElement(20, status);
427     a->removeElementAt(0);
428     TEST_ASSERT(a->empty() == FALSE);
429     a->removeElementAt(0);
430     TEST_ASSERT(a->empty() == TRUE);
431     TEST_CHECK_STATUS(status);
432     delete a;
433
434
435     //
436     //  peeki
437     //
438     status = U_ZERO_ERROR;
439     a = new UVector32(status);
440     a->addElement(10, status);
441     TEST_ASSERT(a->peeki() == 10);
442     a->addElement(20, status);
443     TEST_ASSERT(a->peeki() == 20);
444     a->addElement(30, status);
445     TEST_ASSERT(a->peeki() == 30);
446     TEST_CHECK_STATUS(status);
447     delete a;
448
449
450     //
451     // popi
452     //
453     status = U_ZERO_ERROR;
454     a = new UVector32(status);
455     a->addElement(10, status);
456     a->addElement(20, status);
457     a->addElement(30, status);
458     TEST_ASSERT(a->popi() == 30);
459     TEST_ASSERT(a->popi() == 20);
460     TEST_ASSERT(a->popi() == 10);
461     TEST_ASSERT(a->popi() == 0);
462     TEST_ASSERT(a->isEmpty());
463     TEST_CHECK_STATUS(status);
464     delete a;
465
466     //
467     // push
468     //
469     status = U_ZERO_ERROR;
470     a = new UVector32(status);
471     TEST_ASSERT(a->push(10, status) == 10);
472     TEST_ASSERT(a->push(20, status) == 20);
473     TEST_ASSERT(a->push(30, status) == 30);
474     TEST_ASSERT(a->size() == 3);
475     TEST_ASSERT(a->popi() == 30);
476     TEST_ASSERT(a->popi() == 20);
477     TEST_ASSERT(a->popi() == 10);
478     TEST_ASSERT(a->isEmpty());
479     TEST_CHECK_STATUS(status);
480     delete a;
481
482
483     //
484     // reserveBlock
485     //
486     status = U_ZERO_ERROR;
487     a = new UVector32(status);
488     a->ensureCapacity(1000, status);
489
490     // TODO:
491
492     TEST_CHECK_STATUS(status);
493     delete a;
494
495 }
496
497