|
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 } |