rotate_copy.pass.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. //===----------------------------------------------------------------------===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is dual licensed under the MIT and the University of Illinois Open
  6. // Source Licenses. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. // <algorithm>
  10. // template<ForwardIterator InIter, OutputIterator<auto, InIter::reference> OutIter>
  11. // OutIter
  12. // rotate_copy(InIter first, InIter middle, InIter last, OutIter result);
  13. #include <algorithm>
  14. #include <cassert>
  15. #include "test_iterators.h"
  16. template <class InIter, class OutIter>
  17. void
  18. test()
  19. {
  20. int ia[] = {0, 1, 2, 3};
  21. const unsigned sa = sizeof(ia)/sizeof(ia[0]);
  22. int ib[sa] = {0};
  23. OutIter r = std::rotate_copy(InIter(ia), InIter(ia), InIter(ia), OutIter(ib));
  24. assert(base(r) == ib);
  25. r = std::rotate_copy(InIter(ia), InIter(ia), InIter(ia+1), OutIter(ib));
  26. assert(base(r) == ib+1);
  27. assert(ib[0] == 0);
  28. r = std::rotate_copy(InIter(ia), InIter(ia+1), InIter(ia+1), OutIter(ib));
  29. assert(base(r) == ib+1);
  30. assert(ib[0] == 0);
  31. r = std::rotate_copy(InIter(ia), InIter(ia), InIter(ia+2), OutIter(ib));
  32. assert(base(r) == ib+2);
  33. assert(ib[0] == 0);
  34. assert(ib[1] == 1);
  35. r = std::rotate_copy(InIter(ia), InIter(ia+1), InIter(ia+2), OutIter(ib));
  36. assert(base(r) == ib+2);
  37. assert(ib[0] == 1);
  38. assert(ib[1] == 0);
  39. r = std::rotate_copy(InIter(ia), InIter(ia+2), InIter(ia+2), OutIter(ib));
  40. assert(base(r) == ib+2);
  41. assert(ib[0] == 0);
  42. assert(ib[1] == 1);
  43. r = std::rotate_copy(InIter(ia), InIter(ia), InIter(ia+3), OutIter(ib));
  44. assert(base(r) == ib+3);
  45. assert(ib[0] == 0);
  46. assert(ib[1] == 1);
  47. assert(ib[2] == 2);
  48. r = std::rotate_copy(InIter(ia), InIter(ia+1), InIter(ia+3), OutIter(ib));
  49. assert(base(r) == ib+3);
  50. assert(ib[0] == 1);
  51. assert(ib[1] == 2);
  52. assert(ib[2] == 0);
  53. r = std::rotate_copy(InIter(ia), InIter(ia+2), InIter(ia+3), OutIter(ib));
  54. assert(base(r) == ib+3);
  55. assert(ib[0] == 2);
  56. assert(ib[1] == 0);
  57. assert(ib[2] == 1);
  58. r = std::rotate_copy(InIter(ia), InIter(ia+3), InIter(ia+3), OutIter(ib));
  59. assert(base(r) == ib+3);
  60. assert(ib[0] == 0);
  61. assert(ib[1] == 1);
  62. assert(ib[2] == 2);
  63. r = std::rotate_copy(InIter(ia), InIter(ia), InIter(ia+4), OutIter(ib));
  64. assert(base(r) == ib+4);
  65. assert(ib[0] == 0);
  66. assert(ib[1] == 1);
  67. assert(ib[2] == 2);
  68. assert(ib[3] == 3);
  69. r = std::rotate_copy(InIter(ia), InIter(ia+1), InIter(ia+4), OutIter(ib));
  70. assert(base(r) == ib+4);
  71. assert(ib[0] == 1);
  72. assert(ib[1] == 2);
  73. assert(ib[2] == 3);
  74. assert(ib[3] == 0);
  75. r = std::rotate_copy(InIter(ia), InIter(ia+2), InIter(ia+4), OutIter(ib));
  76. assert(base(r) == ib+4);
  77. assert(ib[0] == 2);
  78. assert(ib[1] == 3);
  79. assert(ib[2] == 0);
  80. assert(ib[3] == 1);
  81. r = std::rotate_copy(InIter(ia), InIter(ia+3), InIter(ia+4), OutIter(ib));
  82. assert(base(r) == ib+4);
  83. assert(ib[0] == 3);
  84. assert(ib[1] == 0);
  85. assert(ib[2] == 1);
  86. assert(ib[3] == 2);
  87. r = std::rotate_copy(InIter(ia), InIter(ia+4), InIter(ia+4), OutIter(ib));
  88. assert(base(r) == ib+4);
  89. assert(ib[0] == 0);
  90. assert(ib[1] == 1);
  91. assert(ib[2] == 2);
  92. assert(ib[3] == 3);
  93. }
  94. int main()
  95. {
  96. test<bidirectional_iterator<const int*>, output_iterator<int*> >();
  97. test<bidirectional_iterator<const int*>, forward_iterator<int*> >();
  98. test<bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
  99. test<bidirectional_iterator<const int*>, random_access_iterator<int*> >();
  100. test<bidirectional_iterator<const int*>, int*>();
  101. test<random_access_iterator<const int*>, output_iterator<int*> >();
  102. test<random_access_iterator<const int*>, forward_iterator<int*> >();
  103. test<random_access_iterator<const int*>, bidirectional_iterator<int*> >();
  104. test<random_access_iterator<const int*>, random_access_iterator<int*> >();
  105. test<random_access_iterator<const int*>, int*>();
  106. test<const int*, output_iterator<int*> >();
  107. test<const int*, forward_iterator<int*> >();
  108. test<const int*, bidirectional_iterator<int*> >();
  109. test<const int*, random_access_iterator<int*> >();
  110. test<const int*, int*>();
  111. }