ReactOS  0.4.14-dev-98-gb0d4763
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)
11 using namespace std;
12 #endif
13 
14 //
15 // TestCase class
16 //
17 class PermTest : public CPPUNIT_NS::TestCase
18 {
20  CPPUNIT_TEST(nextprm0);
21  CPPUNIT_TEST(nextprm1);
22  CPPUNIT_TEST(nextprm2);
23  CPPUNIT_TEST(prevprm0);
24  CPPUNIT_TEST(prevprm1);
25  CPPUNIT_TEST(prevprm2);
27 
28 protected:
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 };
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 }
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
void __iota(_It __first, _It __last, _Tp __val)
Definition: iota.h:8
#define CPPUNIT_TEST_SUITE(X)
Definition: cppunit_mini.h:142
#define CPPUNIT_TEST(X)
Definition: cppunit_mini.h:182
Definition: features.h:417
CPPUNIT_TEST_SUITE_REGISTRATION(PermTest)
#define CPPUNIT_TEST_SUITE_END()
Definition: cppunit_mini.h:191
void nextprm0()
Definition: perm_test.cpp:135
#define CPPUNIT_ASSERT(X)
Definition: cppunit_mini.h:200
void prevprm1()
Definition: perm_test.cpp:51
void prevprm2()
Definition: perm_test.cpp:93
void prevprm0()
Definition: perm_test.cpp:42
void nextprm1()
Definition: perm_test.cpp:144
_STLP_MOVE_TO_STD_NAMESPACE bool next_permutation(_BidirectionalIter __first, _BidirectionalIter __last)
Definition: _algo.c:1896
void nextprm2()
Definition: perm_test.cpp:186
GLfloat GLfloat v1
Definition: glext.h:6062