OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / ndk / tests / device / test-gnustl-full / unit / rm_cp_test.cpp
1 #include <vector>
2 #include <algorithm>
3
4 #include "cppunit/cppunit_proxy.h"
5
6 #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
7 using namespace std;
8 #endif
9
10 //
11 // TestCase class
12 //
13 class RmCpTest : public CPPUNIT_NS::TestCase
14 {
15   CPPUNIT_TEST_SUITE(RmCpTest);
16   CPPUNIT_TEST(remcopy1);
17   CPPUNIT_TEST(remcpif1);
18   CPPUNIT_TEST(remif1);
19   CPPUNIT_TEST(remove1);
20   CPPUNIT_TEST(repcpif1);
21   CPPUNIT_TEST(replace0);
22   CPPUNIT_TEST(replace1);
23   CPPUNIT_TEST(replcpy1);
24   CPPUNIT_TEST(replif1);
25   CPPUNIT_TEST(revcopy1);
26   CPPUNIT_TEST(reverse1);
27   CPPUNIT_TEST_SUITE_END();
28
29 protected:
30   void remcopy1();
31   void remcpif1();
32   void remif1();
33   void remove1();
34   void repcpif1();
35   void replace0();
36   void replace1();
37   void replcpy1();
38   void replif1();
39   void revcopy1();
40   void reverse1();
41
42 };
43
44 CPPUNIT_TEST_SUITE_REGISTRATION(RmCpTest);
45
46 static bool odd(int a_)
47 {
48   return (a_ % 2) != 0;
49 }
50 //
51 // tests implementation
52 //
53
54 void RmCpTest::reverse1()
55 {
56   int numbers[6] = { 0, 1, 2, 3, 4, 5 };
57
58   reverse(numbers, numbers + 6);
59   CPPUNIT_ASSERT(numbers[0]==5);
60   CPPUNIT_ASSERT(numbers[1]==4);
61   CPPUNIT_ASSERT(numbers[2]==3);
62   CPPUNIT_ASSERT(numbers[3]==2);
63   CPPUNIT_ASSERT(numbers[4]==1);
64   CPPUNIT_ASSERT(numbers[5]==0);
65 }
66
67 void RmCpTest::revcopy1()
68 {
69   int numbers[6] = { 0, 1, 2, 3, 4, 5 };
70
71   int result[6];
72   reverse_copy((int*)numbers, (int*)numbers + 6, (int*)result);
73   // 5 4 3 2 1 0
74   CPPUNIT_ASSERT(result[0]==5);
75   CPPUNIT_ASSERT(result[1]==4);
76   CPPUNIT_ASSERT(result[2]==3);
77   CPPUNIT_ASSERT(result[3]==2);
78   CPPUNIT_ASSERT(result[4]==1);
79   CPPUNIT_ASSERT(result[5]==0);
80 }
81
82 void RmCpTest::replif1()
83 {
84   vector <int> v1(10);
85   for (int i = 0; (size_t)i < v1.size(); ++i)
86     v1[i] = i % 5;
87
88   replace_if(v1.begin(), v1.end(), odd, 42);
89
90   // 0 42 2 42 4 0 42 2 42 4
91   CPPUNIT_ASSERT(v1[0]==0);
92   CPPUNIT_ASSERT(v1[1]==42);
93   CPPUNIT_ASSERT(v1[2]==2);
94   CPPUNIT_ASSERT(v1[3]==42);
95   CPPUNIT_ASSERT(v1[4]==4);
96   CPPUNIT_ASSERT(v1[5]==0);
97   CPPUNIT_ASSERT(v1[6]==42);
98   CPPUNIT_ASSERT(v1[7]==2);
99   CPPUNIT_ASSERT(v1[8]==42);
100   CPPUNIT_ASSERT(v1[9]==4);
101 }
102
103 void RmCpTest::replcpy1()
104 {
105   int numbers[6] = { 0, 1, 2, 0, 1, 2 };
106   int result[6] = { 0, 0, 0, 0, 0, 0 };
107
108   replace_copy((int*)numbers, (int*)numbers + 6, (int*)result, 2, 42);
109   CPPUNIT_ASSERT(result[0]==0);
110   CPPUNIT_ASSERT(result[1]==1);
111   CPPUNIT_ASSERT(result[2]==42);
112   CPPUNIT_ASSERT(result[3]==0);
113   CPPUNIT_ASSERT(result[4]==1);
114   CPPUNIT_ASSERT(result[5]==42);
115 }
116
117 void RmCpTest::replace0()
118 {
119   int numbers[6] = { 0, 1, 2, 0, 1, 2 };
120
121   replace(numbers, numbers + 6, 2, 42);
122
123   // 0 1 42 0 1 42
124   CPPUNIT_ASSERT(numbers[0]==0);
125   CPPUNIT_ASSERT(numbers[1]==1);
126   CPPUNIT_ASSERT(numbers[2]==42);
127   CPPUNIT_ASSERT(numbers[3]==0);
128   CPPUNIT_ASSERT(numbers[4]==1);
129   CPPUNIT_ASSERT(numbers[5]==42);
130 }
131
132 void RmCpTest::replace1()
133 {
134   vector <int> v1(10);
135   for (int i = 0; (size_t)i < v1.size(); ++i)
136     v1[i] = i % 5;
137   replace(v1.begin(), v1.end(), 2, 42);
138
139   // 0 1 2 3 4 0 1 2 3 4
140   // 0 1 42 3 4 0 1 42 3 4
141   CPPUNIT_ASSERT(v1[0]==0);
142   CPPUNIT_ASSERT(v1[1]==1);
143   CPPUNIT_ASSERT(v1[2]==42);
144   CPPUNIT_ASSERT(v1[3]==3);
145   CPPUNIT_ASSERT(v1[4]==4);
146   CPPUNIT_ASSERT(v1[5]==0);
147   CPPUNIT_ASSERT(v1[6]==1);
148   CPPUNIT_ASSERT(v1[7]==42);
149   CPPUNIT_ASSERT(v1[8]==3);
150   CPPUNIT_ASSERT(v1[9]==4);
151 }
152
153 void RmCpTest::repcpif1()
154 {
155   vector <int> v1(10);
156   for (int i = 0; (size_t)i < v1.size(); ++i)
157     v1[i] = i % 5;
158   vector <int> v2(v1.size());
159
160   // 0 1 2 3 4 0 1 2 3 4
161   // 0 1 2 3 4 0 1 2 3 4
162   // 0 42 2 42 4 0 42 2 42 4
163   replace_copy_if(v1.begin(), v1.end(), v2.begin(), odd, 42);
164   CPPUNIT_ASSERT(v1[0]==0);
165   CPPUNIT_ASSERT(v1[1]==1);
166   CPPUNIT_ASSERT(v1[2]==2);
167   CPPUNIT_ASSERT(v1[3]==3);
168   CPPUNIT_ASSERT(v1[4]==4);
169   CPPUNIT_ASSERT(v1[5]==0);
170   CPPUNIT_ASSERT(v1[6]==1);
171   CPPUNIT_ASSERT(v1[7]==2);
172   CPPUNIT_ASSERT(v1[8]==3);
173   CPPUNIT_ASSERT(v1[9]==4);
174
175   CPPUNIT_ASSERT(v2[0]==0);
176   CPPUNIT_ASSERT(v2[1]==42);
177   CPPUNIT_ASSERT(v2[2]==2);
178   CPPUNIT_ASSERT(v2[3]==42);
179   CPPUNIT_ASSERT(v2[4]==4);
180   CPPUNIT_ASSERT(v2[5]==0);
181   CPPUNIT_ASSERT(v2[6]==42);
182   CPPUNIT_ASSERT(v2[7]==2);
183   CPPUNIT_ASSERT(v2[8]==42);
184   CPPUNIT_ASSERT(v2[9]==4);
185 }
186
187 void RmCpTest::remove1()
188 {
189   int numbers[6] = { 1, 2, 3, 1, 2, 3 };
190   remove((int*)numbers, (int*)numbers + 6, 1);
191
192   // 2 3 2 3 2 3
193   CPPUNIT_ASSERT(numbers[0]==2);
194   CPPUNIT_ASSERT(numbers[1]==3);
195   CPPUNIT_ASSERT(numbers[2]==2);
196   CPPUNIT_ASSERT(numbers[3]==3);
197   CPPUNIT_ASSERT(numbers[4]==2);
198   CPPUNIT_ASSERT(numbers[5]==3);
199 }
200
201 void RmCpTest::remif1()
202 {
203   int numbers[6] = { 0, 0, 1, 1, 2, 2 };
204
205   remove_if((int*)numbers, (int*)numbers + 6, odd);
206
207   // 0 0 2 2 2 2
208   CPPUNIT_ASSERT(numbers[0]==0);
209   CPPUNIT_ASSERT(numbers[1]==0);
210   CPPUNIT_ASSERT(numbers[2]==2);
211   CPPUNIT_ASSERT(numbers[3]==2);
212   CPPUNIT_ASSERT(numbers[4]==2);
213   CPPUNIT_ASSERT(numbers[5]==2);
214 }
215
216 void RmCpTest::remcopy1()
217 {
218   int numbers[6] = { 1, 2, 3, 1, 2, 3 };
219   int result[6] = { 0, 0, 0, 0, 0, 0 };
220
221   remove_copy((int*)numbers, (int*)numbers + 6, (int*)result, 2);
222
223   CPPUNIT_ASSERT(result[0]==1);
224   CPPUNIT_ASSERT(result[1]==3);
225   CPPUNIT_ASSERT(result[2]==1);
226   CPPUNIT_ASSERT(result[3]==3);
227   CPPUNIT_ASSERT(result[4]==0);
228   CPPUNIT_ASSERT(result[5]==0);
229 }
230
231 void RmCpTest::remcpif1()
232 {
233   int numbers[6] = { 1, 2, 3, 1, 2, 3 };
234   int result[6] = { 0, 0, 0, 0, 0, 0 };
235
236   remove_copy_if((int*)numbers, (int*)numbers + 6, (int*)result, odd);
237
238   // 2 2 0 0 0 0
239   CPPUNIT_ASSERT(result[0]==2);
240   CPPUNIT_ASSERT(result[1]==2);
241   CPPUNIT_ASSERT(result[2]==0);
242   CPPUNIT_ASSERT(result[3]==0);
243   CPPUNIT_ASSERT(result[4]==0);
244   CPPUNIT_ASSERT(result[5]==0);
245 }