ReactOS
0.4.16-dev-456-ga97fcf1
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
"
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
}
prev_permutation
_STLP_MOVE_TO_STD_NAMESPACE bool prev_permutation(_BidirectionalIter __first, _BidirectionalIter __last)
Definition:
_algo.c:1947
next_permutation
_STLP_MOVE_TO_STD_NAMESPACE bool next_permutation(_BidirectionalIter __first, _BidirectionalIter __last)
Definition:
_algo.c:1896
PermTest
Definition:
perm_test.cpp:18
PermTest::CPPUNIT_TEST
CPPUNIT_TEST(prevprm1)
PermTest::CPPUNIT_TEST
CPPUNIT_TEST(nextprm1)
PermTest::CPPUNIT_TEST
CPPUNIT_TEST(nextprm2)
PermTest::CPPUNIT_TEST_SUITE
CPPUNIT_TEST_SUITE(PermTest)
PermTest::prevprm2
void prevprm2()
Definition:
perm_test.cpp:93
PermTest::CPPUNIT_TEST
CPPUNIT_TEST(prevprm0)
PermTest::CPPUNIT_TEST
CPPUNIT_TEST(prevprm2)
PermTest::nextprm2
void nextprm2()
Definition:
perm_test.cpp:186
PermTest::prevprm1
void prevprm1()
Definition:
perm_test.cpp:51
PermTest::CPPUNIT_TEST_SUITE_END
CPPUNIT_TEST_SUITE_END()
PermTest::prevprm0
void prevprm0()
Definition:
perm_test.cpp:42
PermTest::CPPUNIT_TEST
CPPUNIT_TEST(nextprm0)
PermTest::nextprm1
void nextprm1()
Definition:
perm_test.cpp:144
PermTest::nextprm0
void nextprm0()
Definition:
perm_test.cpp:135
CPPUNIT_TEST_SUITE_REGISTRATION
#define CPPUNIT_TEST_SUITE_REGISTRATION(X)
Definition:
cppunit_mini.h:193
CPPUNIT_ASSERT
#define CPPUNIT_ASSERT(X)
Definition:
cppunit_mini.h:200
cppunit_proxy.h
v1
GLfloat GLfloat v1
Definition:
glext.h:6062
iota.h
__iota
void __iota(_It __first, _It __last, _Tp __val)
Definition:
iota.h:8
std
Definition:
features.h:417
greater
Definition:
_function.h:49
less
Definition:
_function_base.h:78
sdk
lib
3rdparty
stlport
test
unit
perm_test.cpp
Generated on Mon Jan 13 2025 06:13:21 for ReactOS by
1.9.6