ReactOS 0.4.15-dev-7968-g24a56f8
perm_test.cpp
Go to the documentation of this file.
1#include <vector>
2#include <algorithm>
3#include <numeric>
4#include <iterator>
5#include <functional>
6
7#include "iota.h"
9
10#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
11using namespace std;
12#endif
13
14//
15// TestCase class
16//
17class PermTest : public CPPUNIT_NS::TestCase
18{
27
28protected:
29 void nextprm0();
30 void nextprm1();
31 void nextprm2();
32 void prevprm0();
33 void prevprm1();
34 void prevprm2();
35};
36
38
39//
40// tests implementation
41//
43{
44 int v1[3] = { 0, 1, 2 };
46
47 CPPUNIT_ASSERT(v1[0]==2);
48 CPPUNIT_ASSERT(v1[1]==1);
49 CPPUNIT_ASSERT(v1[2]==0);
50}
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}
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}
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}
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}
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}
_STLP_MOVE_TO_STD_NAMESPACE bool prev_permutation(_BidirectionalIter __first, _BidirectionalIter __last)
Definition: _algo.c:1947
_STLP_MOVE_TO_STD_NAMESPACE bool next_permutation(_BidirectionalIter __first, _BidirectionalIter __last)
Definition: _algo.c:1896
CPPUNIT_TEST(prevprm1)
CPPUNIT_TEST(nextprm1)
CPPUNIT_TEST(nextprm2)
CPPUNIT_TEST_SUITE(PermTest)
void prevprm2()
Definition: perm_test.cpp:93
CPPUNIT_TEST(prevprm0)
CPPUNIT_TEST(prevprm2)
void nextprm2()
Definition: perm_test.cpp:186
void prevprm1()
Definition: perm_test.cpp:51
CPPUNIT_TEST_SUITE_END()
void prevprm0()
Definition: perm_test.cpp:42
CPPUNIT_TEST(nextprm0)
void nextprm1()
Definition: perm_test.cpp:144
void nextprm0()
Definition: perm_test.cpp:135
#define CPPUNIT_TEST_SUITE_REGISTRATION(X)
Definition: cppunit_mini.h:193
#define CPPUNIT_ASSERT(X)
Definition: cppunit_mini.h:200
GLfloat GLfloat v1
Definition: glext.h:6062
void __iota(_It __first, _It __last, _Tp __val)
Definition: iota.h:8
Definition: features.h:417