1111
1212using namespace gfx ;
1313
14+ BOOST_AUTO_TEST_CASE ( simple0 ) {
15+ std::vector<int > a;
16+
17+ timsort (a.begin (), a.end (), std::less<int >());
18+
19+ BOOST_CHECK_EQUAL ( a.size (), 0 );
20+ }
21+
22+ BOOST_AUTO_TEST_CASE ( simple1 ) {
23+ std::vector<int > a;
24+
25+ a.push_back (42 );
26+
27+ timsort (a.begin (), a.end (), std::less<int >());
28+
29+ BOOST_CHECK_EQUAL ( a.size (), 1 );
30+ BOOST_CHECK_EQUAL ( a[0 ], 42 );
31+ }
32+
33+ BOOST_AUTO_TEST_CASE ( simple2 ) {
34+ std::vector<int > a;
35+
36+ a.push_back (10 );
37+ a.push_back (20 );
38+
39+ timsort (a.begin (), a.end (), std::less<int >());
40+
41+ BOOST_CHECK_EQUAL ( a.size (), 2 );
42+ BOOST_CHECK_EQUAL ( a[0 ], 10 );
43+ BOOST_CHECK_EQUAL ( a[1 ], 20 );
44+
45+ a.clear ();
46+ a.push_back (20 );
47+ a.push_back (10 );
48+
49+ timsort (a.begin (), a.end (), std::less<int >());
50+
51+ BOOST_CHECK_EQUAL ( a.size (), 2 );
52+ BOOST_CHECK_EQUAL ( a[0 ], 10 );
53+ BOOST_CHECK_EQUAL ( a[1 ], 20 );
54+ }
55+
1456BOOST_AUTO_TEST_CASE ( simple10 ) {
1557 std::vector<int > a;
1658 a.push_back (60 );
@@ -65,6 +107,7 @@ BOOST_AUTO_TEST_CASE( shuffle30 ) {
65107
66108 timsort (a.begin (), a.end (), std::less<int >());
67109
110+ BOOST_CHECK_EQUAL (a.size (), size);
68111 for (int i = 0 ; i < size; ++i) {
69112 BOOST_CHECK_EQUAL ( a[i], (i+1 ) * 10 );
70113 }
@@ -82,6 +125,7 @@ BOOST_AUTO_TEST_CASE( shuffle31 ) {
82125
83126 timsort (a.begin (), a.end (), std::less<int >());
84127
128+ BOOST_CHECK_EQUAL (a.size (), size);
85129 for (int i = 0 ; i < size; ++i) {
86130 BOOST_CHECK_EQUAL ( a[i], (i+1 ) * 10 );
87131 }
@@ -98,6 +142,7 @@ BOOST_AUTO_TEST_CASE( shuffle32 ) {
98142
99143 timsort (a.begin (), a.end (), std::less<int >());
100144
145+ BOOST_CHECK_EQUAL (a.size (), size);
101146 for (int i = 0 ; i < size; ++i) {
102147 BOOST_CHECK_EQUAL ( a[i], (i+1 ) * 10 );
103148 }
@@ -114,13 +159,33 @@ BOOST_AUTO_TEST_CASE( shuffle128 ) {
114159
115160 timsort (a.begin (), a.end (), std::less<int >());
116161
162+ BOOST_CHECK_EQUAL (a.size (), size);
117163 for (int i = 0 ; i < size; ++i) {
118164 BOOST_CHECK_EQUAL ( a[i], (i+1 ) * 10 );
119165 }
120166}
121167
168+ BOOST_AUTO_TEST_CASE ( shuffle1023 ) {
169+ const int size = 1023 ; // odd number of elements
170+
171+ std::vector<int > a;
172+ for (int i = 0 ; i < size; ++i) {
173+ a.push_back ((i+1 ) * 10 );
174+ }
175+
176+ for (int n = 0 ; n < 100 ; ++n) {
177+ std::random_shuffle (a.begin (), a.end ());
178+
179+ timsort (a.begin (), a.end (), std::less<int >());
180+
181+ for (int i = 0 ; i < size; ++i) {
182+ BOOST_CHECK_EQUAL ( a[i], (i+1 ) * 10 );
183+ }
184+ }
185+ }
186+
122187BOOST_AUTO_TEST_CASE ( shuffle1024 ) {
123- const int size = 1024 ;
188+ const int size = 1024 ; // even number of elements
124189
125190 std::vector<int > a;
126191 for (int i = 0 ; i < size; ++i) {
@@ -138,6 +203,44 @@ BOOST_AUTO_TEST_CASE( shuffle1024 ) {
138203 }
139204}
140205
206+ BOOST_AUTO_TEST_CASE ( partial_shuffle1023 ) {
207+ const int size = 1023 ;
208+
209+ std::vector<int > a;
210+ for (int i = 0 ; i < size; ++i) {
211+ a.push_back ((i+1 ) * 10 );
212+ }
213+
214+ for (int n = 0 ; n < 100 ; ++n) {
215+ std::random_shuffle (a.begin (), a.begin () + (size / 2 ));
216+
217+ timsort (a.begin (), a.end (), std::less<int >());
218+
219+ for (int i = 0 ; i < size; ++i) {
220+ BOOST_CHECK_EQUAL ( a[i], (i+1 ) * 10 );
221+ }
222+ }
223+ }
224+
225+ BOOST_AUTO_TEST_CASE ( partial_shuffle1024 ) {
226+ const int size = 1024 ;
227+
228+ std::vector<int > a;
229+ for (int i = 0 ; i < size; ++i) {
230+ a.push_back ((i+1 ) * 10 );
231+ }
232+
233+ for (int n = 0 ; n < 100 ; ++n) {
234+ std::random_shuffle (a.begin (), a.begin () + (size / 2 ));
235+
236+ timsort (a.begin (), a.end (), std::less<int >());
237+
238+ for (int i = 0 ; i < size; ++i) {
239+ BOOST_CHECK_EQUAL ( a[i], (i+1 ) * 10 );
240+ }
241+ }
242+ }
243+
141244BOOST_AUTO_TEST_CASE ( shuffle1024r ) {
142245 const int size = 1024 ;
143246
@@ -158,6 +261,44 @@ BOOST_AUTO_TEST_CASE( shuffle1024r ) {
158261 }
159262}
160263
264+ BOOST_AUTO_TEST_CASE ( partial_reversed1023 ) {
265+ const int size = 1023 ;
266+
267+ std::vector<int > a;
268+ for (int i = 0 ; i < size; ++i) {
269+ a.push_back ((i+1 ) * 10 );
270+ }
271+
272+ for (int n = 0 ; n < 100 ; ++n) {
273+ std::reverse (a.begin (), a.begin () + (size / 2 )); // partial reversed
274+
275+ timsort (a.begin (), a.end (), std::less<int >());
276+
277+ for (int i = 0 ; i < size; ++i) {
278+ BOOST_CHECK_EQUAL ( a[i], (i+1 ) * 10 );
279+ }
280+ }
281+ }
282+
283+ BOOST_AUTO_TEST_CASE ( partial_reversed1024 ) {
284+ const int size = 1024 ;
285+
286+ std::vector<int > a;
287+ for (int i = 0 ; i < size; ++i) {
288+ a.push_back ((i+1 ) * 10 );
289+ }
290+
291+ for (int n = 0 ; n < 100 ; ++n) {
292+ std::reverse (a.begin (), a.begin () + (size / 2 )); // partial reversed
293+
294+ timsort (a.begin (), a.end (), std::less<int >());
295+
296+ for (int i = 0 ; i < size; ++i) {
297+ BOOST_CHECK_EQUAL ( a[i], (i+1 ) * 10 );
298+ }
299+ }
300+ }
301+
161302BOOST_AUTO_TEST_CASE ( c_array ) {
162303 int a[] = { 7 , 1 , 5 , 3 , 9 };
163304
0 commit comments