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
odd(int a_)46 static bool odd(int a_)
47 {
48 return (a_ % 2) != 0;
49 }
50 //
51 // tests implementation
52 //
53
reverse1()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
revcopy1()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
replif1()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
replcpy1()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
replace0()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
replace1()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
repcpif1()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
remove1()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
remif1()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
remcopy1()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
remcpif1()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 }
246