]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/25_algorithms/rotate/dr488.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 25_algorithms / rotate / dr488.cc
1 // Copyright (C) 2015-2019 Free Software Foundation, Inc.
2 //
3 // This file is part of the GNU ISO C++ Library. This library is free
4 // software; you can redistribute it and/or modify it under the
5 // terms of the GNU General Public License as published by the
6 // Free Software Foundation; either version 3, or (at your option)
7 // any later version.
8
9 // This library is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
13
14 // You should have received a copy of the GNU General Public License along
15 // with this library; see the file COPYING3. If not see
16 // <http://www.gnu.org/licenses/>.
17
18 // { dg-do run { target c++11 } }
19
20 #include <algorithm>
21 #include <iterator>
22 #include <forward_list>
23 #include <list>
24 #include <vector>
25 #include <testsuite_hooks.h>
26
27 template<typename Container>
28 void
29 test(Container& c)
30 {
31 int size = std::distance(c.begin(), c.end());
32 for (int i=0; i < size; ++i)
33 {
34 auto first = c.begin(), middle = std::next(first, i), last = c.end();
35 auto r = std::rotate(first, middle, last);
36 auto expected = std::next(first, std::distance(middle, last));
37 VERIFY( r == expected );
38 }
39 }
40
41 void
42 test01()
43 {
44 // test random access iterators
45 std::vector<int> v{ 0, 1, 2, 3, 4 };
46 test(v);
47 v.push_back(5);
48 test(v);
49 }
50
51 void
52 test02()
53 {
54 // test bidirectional iterators
55 std::list<int> l{ 0, 1, 2, 3, 4 };
56 test(l);
57 l.push_back(5);
58 test(l);
59 }
60
61 void
62 test03()
63 {
64 // test forward iterators
65 std::forward_list<int> l{ 0, 1, 2, 3, 4 };
66 test(l);
67 l.push_front(5);
68 test(l);
69 }
70
71 int
72 main()
73 {
74 test01();
75 test02();
76 test03();
77 }