|
1 #include <vector> |
|
2 #include <algorithm> |
|
3 #include <numeric> |
|
4 #include <iterator> |
|
5 #include <functional> |
|
6 |
|
7 #include "iota.h" |
|
8 #include "cppunit/cppunit_proxy.h" |
|
9 |
|
10 #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) |
|
11 using namespace std; |
|
12 #endif |
|
13 |
|
14 // |
|
15 // TestCase class |
|
16 // |
|
17 class PermTest : public CPPUNIT_NS::TestCase |
|
18 { |
|
19 CPPUNIT_TEST_SUITE(PermTest); |
|
20 CPPUNIT_TEST(nextprm0); |
|
21 CPPUNIT_TEST(nextprm1); |
|
22 CPPUNIT_TEST(nextprm2); |
|
23 CPPUNIT_TEST(prevprm0); |
|
24 CPPUNIT_TEST(prevprm1); |
|
25 CPPUNIT_TEST(prevprm2); |
|
26 CPPUNIT_TEST_SUITE_END(); |
|
27 |
|
28 protected: |
|
29 void nextprm0(); |
|
30 void nextprm1(); |
|
31 void nextprm2(); |
|
32 void prevprm0(); |
|
33 void prevprm1(); |
|
34 void prevprm2(); |
|
35 }; |
|
36 |
|
37 CPPUNIT_TEST_SUITE_REGISTRATION(PermTest); |
|
38 |
|
39 // |
|
40 // tests implementation |
|
41 // |
|
42 void PermTest::prevprm0() |
|
43 { |
|
44 int v1[3] = { 0, 1, 2 }; |
|
45 prev_permutation(v1, v1 + 3); |
|
46 |
|
47 CPPUNIT_ASSERT(v1[0]==2); |
|
48 CPPUNIT_ASSERT(v1[1]==1); |
|
49 CPPUNIT_ASSERT(v1[2]==0); |
|
50 } |
|
51 void PermTest::prevprm1() |
|
52 { |
|
53 vector <int> v1(3); |
|
54 __iota(v1.begin(), v1.end(), 0); |
|
55 |
|
56 prev_permutation(v1.begin(), v1.end()); |
|
57 CPPUNIT_ASSERT(v1[0]==2); |
|
58 CPPUNIT_ASSERT(v1[1]==1); |
|
59 CPPUNIT_ASSERT(v1[2]==0); |
|
60 prev_permutation(v1.begin(), v1.end()); |
|
61 CPPUNIT_ASSERT(v1[0]==2); |
|
62 CPPUNIT_ASSERT(v1[1]==0); |
|
63 CPPUNIT_ASSERT(v1[2]==1); |
|
64 prev_permutation(v1.begin(), v1.end()); |
|
65 CPPUNIT_ASSERT(v1[0]==1); |
|
66 CPPUNIT_ASSERT(v1[1]==2); |
|
67 CPPUNIT_ASSERT(v1[2]==0); |
|
68 prev_permutation(v1.begin(), v1.end()); |
|
69 CPPUNIT_ASSERT(v1[0]==1); |
|
70 CPPUNIT_ASSERT(v1[1]==0); |
|
71 CPPUNIT_ASSERT(v1[2]==2); |
|
72 prev_permutation(v1.begin(), v1.end()); |
|
73 CPPUNIT_ASSERT(v1[0]==0); |
|
74 CPPUNIT_ASSERT(v1[1]==2);// |
|
75 CPPUNIT_ASSERT(v1[2]==1); |
|
76 prev_permutation(v1.begin(), v1.end()); |
|
77 CPPUNIT_ASSERT(v1[0]==0); |
|
78 CPPUNIT_ASSERT(v1[1]==1); |
|
79 CPPUNIT_ASSERT(v1[2]==2); |
|
80 prev_permutation(v1.begin(), v1.end()); |
|
81 CPPUNIT_ASSERT(v1[0]==2); |
|
82 CPPUNIT_ASSERT(v1[1]==1); |
|
83 CPPUNIT_ASSERT(v1[2]==0); |
|
84 prev_permutation(v1.begin(), v1.end()); |
|
85 CPPUNIT_ASSERT(v1[0]==2); |
|
86 CPPUNIT_ASSERT(v1[1]==0); |
|
87 CPPUNIT_ASSERT(v1[2]==1); |
|
88 prev_permutation(v1.begin(), v1.end()); |
|
89 CPPUNIT_ASSERT(v1[0]==1); |
|
90 CPPUNIT_ASSERT(v1[1]==2); |
|
91 CPPUNIT_ASSERT(v1[2]==0); |
|
92 } |
|
93 void PermTest::prevprm2() |
|
94 { |
|
95 vector <int> v1(3); |
|
96 __iota(v1.begin(), v1.end(), 0); |
|
97 |
|
98 prev_permutation(v1.begin(), v1.end(), greater<int>()); |
|
99 CPPUNIT_ASSERT(v1[0]==0); |
|
100 CPPUNIT_ASSERT(v1[1]==2); |
|
101 CPPUNIT_ASSERT(v1[2]==1); |
|
102 prev_permutation(v1.begin(), v1.end(), greater<int>()); |
|
103 CPPUNIT_ASSERT(v1[0]==1); |
|
104 CPPUNIT_ASSERT(v1[1]==0); |
|
105 CPPUNIT_ASSERT(v1[2]==2); |
|
106 prev_permutation(v1.begin(), v1.end(), greater<int>()); |
|
107 CPPUNIT_ASSERT(v1[0]==1); |
|
108 CPPUNIT_ASSERT(v1[1]==2); |
|
109 CPPUNIT_ASSERT(v1[2]==0); |
|
110 prev_permutation(v1.begin(), v1.end(), greater<int>()); |
|
111 CPPUNIT_ASSERT(v1[0]==2); |
|
112 CPPUNIT_ASSERT(v1[1]==0); |
|
113 CPPUNIT_ASSERT(v1[2]==1); |
|
114 prev_permutation(v1.begin(), v1.end(), greater<int>()); |
|
115 CPPUNIT_ASSERT(v1[0]==2); |
|
116 CPPUNIT_ASSERT(v1[1]==1); |
|
117 CPPUNIT_ASSERT(v1[2]==0); |
|
118 prev_permutation(v1.begin(), v1.end(), greater<int>()); |
|
119 CPPUNIT_ASSERT(v1[0]==0); |
|
120 CPPUNIT_ASSERT(v1[1]==1); |
|
121 CPPUNIT_ASSERT(v1[2]==2); |
|
122 prev_permutation(v1.begin(), v1.end(), greater<int>()); |
|
123 CPPUNIT_ASSERT(v1[0]==0); |
|
124 CPPUNIT_ASSERT(v1[1]==2); |
|
125 CPPUNIT_ASSERT(v1[2]==1); |
|
126 prev_permutation(v1.begin(), v1.end(), greater<int>()); |
|
127 CPPUNIT_ASSERT(v1[0]==1); |
|
128 CPPUNIT_ASSERT(v1[1]==0); |
|
129 CPPUNIT_ASSERT(v1[2]==2); |
|
130 prev_permutation(v1.begin(), v1.end(), greater<int>()); |
|
131 CPPUNIT_ASSERT(v1[0]==1); |
|
132 CPPUNIT_ASSERT(v1[1]==2); |
|
133 CPPUNIT_ASSERT(v1[2]==0); |
|
134 } |
|
135 void PermTest::nextprm0() |
|
136 { |
|
137 int v1[3] = { 0, 1, 2 }; |
|
138 next_permutation(v1, v1 + 3); |
|
139 |
|
140 CPPUNIT_ASSERT(v1[0]==0); |
|
141 CPPUNIT_ASSERT(v1[1]==2); |
|
142 CPPUNIT_ASSERT(v1[2]==1); |
|
143 } |
|
144 void PermTest::nextprm1() |
|
145 { |
|
146 vector <int> v1(3); |
|
147 __iota(v1.begin(), v1.end(), 0); |
|
148 |
|
149 next_permutation(v1.begin(), v1.end()); |
|
150 CPPUNIT_ASSERT(v1[0]==0); |
|
151 CPPUNIT_ASSERT(v1[1]==2); |
|
152 CPPUNIT_ASSERT(v1[2]==1); |
|
153 next_permutation(v1.begin(), v1.end()); |
|
154 CPPUNIT_ASSERT(v1[0]==1); |
|
155 CPPUNIT_ASSERT(v1[1]==0); |
|
156 CPPUNIT_ASSERT(v1[2]==2); |
|
157 next_permutation(v1.begin(), v1.end()); |
|
158 CPPUNIT_ASSERT(v1[0]==1); |
|
159 CPPUNIT_ASSERT(v1[1]==2); |
|
160 CPPUNIT_ASSERT(v1[2]==0); |
|
161 next_permutation(v1.begin(), v1.end()); |
|
162 CPPUNIT_ASSERT(v1[0]==2); |
|
163 CPPUNIT_ASSERT(v1[1]==0); |
|
164 CPPUNIT_ASSERT(v1[2]==1); |
|
165 next_permutation(v1.begin(), v1.end()); |
|
166 CPPUNIT_ASSERT(v1[0]==2); |
|
167 CPPUNIT_ASSERT(v1[1]==1); |
|
168 CPPUNIT_ASSERT(v1[2]==0); |
|
169 next_permutation(v1.begin(), v1.end()); |
|
170 CPPUNIT_ASSERT(v1[0]==0); |
|
171 CPPUNIT_ASSERT(v1[1]==1); |
|
172 CPPUNIT_ASSERT(v1[2]==2); |
|
173 next_permutation(v1.begin(), v1.end()); |
|
174 CPPUNIT_ASSERT(v1[0]==0); |
|
175 CPPUNIT_ASSERT(v1[1]==2); |
|
176 CPPUNIT_ASSERT(v1[2]==1); |
|
177 next_permutation(v1.begin(), v1.end()); |
|
178 CPPUNIT_ASSERT(v1[0]==1); |
|
179 CPPUNIT_ASSERT(v1[1]==0); |
|
180 CPPUNIT_ASSERT(v1[2]==2); |
|
181 next_permutation(v1.begin(), v1.end()); |
|
182 CPPUNIT_ASSERT(v1[0]==1); |
|
183 CPPUNIT_ASSERT(v1[1]==2); |
|
184 CPPUNIT_ASSERT(v1[2]==0); |
|
185 } |
|
186 void PermTest::nextprm2() |
|
187 { |
|
188 vector <char> v1(3); |
|
189 __iota(v1.begin(), v1.end(), 'A'); |
|
190 |
|
191 next_permutation(v1.begin(), v1.end(), less<char>()); |
|
192 CPPUNIT_ASSERT(v1[0]=='A'); |
|
193 CPPUNIT_ASSERT(v1[1]=='C'); |
|
194 CPPUNIT_ASSERT(v1[2]=='B'); |
|
195 next_permutation(v1.begin(), v1.end(), less<char>()); |
|
196 CPPUNIT_ASSERT(v1[0]=='B'); |
|
197 CPPUNIT_ASSERT(v1[1]=='A'); |
|
198 CPPUNIT_ASSERT(v1[2]=='C'); |
|
199 next_permutation(v1.begin(), v1.end(), less<char>()); |
|
200 CPPUNIT_ASSERT(v1[0]=='B'); |
|
201 CPPUNIT_ASSERT(v1[1]=='C'); |
|
202 CPPUNIT_ASSERT(v1[2]=='A'); |
|
203 next_permutation(v1.begin(), v1.end(), less<char>()); |
|
204 CPPUNIT_ASSERT(v1[0]=='C'); |
|
205 CPPUNIT_ASSERT(v1[1]=='A'); |
|
206 CPPUNIT_ASSERT(v1[2]=='B'); |
|
207 next_permutation(v1.begin(), v1.end(), less<char>()); |
|
208 CPPUNIT_ASSERT(v1[0]=='C'); |
|
209 CPPUNIT_ASSERT(v1[1]=='B'); |
|
210 CPPUNIT_ASSERT(v1[2]=='A'); |
|
211 next_permutation(v1.begin(), v1.end(), less<char>()); |
|
212 CPPUNIT_ASSERT(v1[0]=='A'); |
|
213 CPPUNIT_ASSERT(v1[1]=='B'); |
|
214 CPPUNIT_ASSERT(v1[2]=='C'); |
|
215 next_permutation(v1.begin(), v1.end(), less<char>()); |
|
216 CPPUNIT_ASSERT(v1[0]=='A'); |
|
217 CPPUNIT_ASSERT(v1[1]=='C'); |
|
218 CPPUNIT_ASSERT(v1[2]=='B'); |
|
219 next_permutation(v1.begin(), v1.end(), less<char>()); |
|
220 CPPUNIT_ASSERT(v1[0]=='B'); |
|
221 CPPUNIT_ASSERT(v1[1]=='A'); |
|
222 CPPUNIT_ASSERT(v1[2]=='C'); |
|
223 next_permutation(v1.begin(), v1.end(), less<char>()); |
|
224 CPPUNIT_ASSERT(v1[0]=='B'); |
|
225 CPPUNIT_ASSERT(v1[1]=='C'); |
|
226 CPPUNIT_ASSERT(v1[2]=='A'); |
|
227 |
|
228 } |