reverse_copy.pass.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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<BidirectionalIterator InIter, OutputIterator<auto, InIter::reference> OutIter>
  11. // OutIter
  12. // reverse_copy(InIter first, 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. const int ia[] = {0};
  21. const unsigned sa = sizeof(ia)/sizeof(ia[0]);
  22. int ja[sa] = {-1};
  23. OutIter r = std::reverse_copy(InIter(ia), InIter(ia), OutIter(ja));
  24. assert(base(r) == ja);
  25. assert(ja[0] == -1);
  26. r = std::reverse_copy(InIter(ia), InIter(ia+sa), OutIter(ja));
  27. assert(ja[0] == 0);
  28. const int ib[] = {0, 1};
  29. const unsigned sb = sizeof(ib)/sizeof(ib[0]);
  30. int jb[sb] = {-1};
  31. r = std::reverse_copy(InIter(ib), InIter(ib+sb), OutIter(jb));
  32. assert(base(r) == jb+sb);
  33. assert(jb[0] == 1);
  34. assert(jb[1] == 0);
  35. const int ic[] = {0, 1, 2};
  36. const unsigned sc = sizeof(ic)/sizeof(ic[0]);
  37. int jc[sc] = {-1};
  38. r = std::reverse_copy(InIter(ic), InIter(ic+sc), OutIter(jc));
  39. assert(base(r) == jc+sc);
  40. assert(jc[0] == 2);
  41. assert(jc[1] == 1);
  42. assert(jc[2] == 0);
  43. int id[] = {0, 1, 2, 3};
  44. const unsigned sd = sizeof(id)/sizeof(id[0]);
  45. int jd[sd] = {-1};
  46. r = std::reverse_copy(InIter(id), InIter(id+sd), OutIter(jd));
  47. assert(base(r) == jd+sd);
  48. assert(jd[0] == 3);
  49. assert(jd[1] == 2);
  50. assert(jd[2] == 1);
  51. assert(jd[3] == 0);
  52. }
  53. int main()
  54. {
  55. test<bidirectional_iterator<const int*>, output_iterator<int*> >();
  56. test<bidirectional_iterator<const int*>, forward_iterator<int*> >();
  57. test<bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
  58. test<bidirectional_iterator<const int*>, random_access_iterator<int*> >();
  59. test<bidirectional_iterator<const int*>, int*>();
  60. test<random_access_iterator<const int*>, output_iterator<int*> >();
  61. test<random_access_iterator<const int*>, forward_iterator<int*> >();
  62. test<random_access_iterator<const int*>, bidirectional_iterator<int*> >();
  63. test<random_access_iterator<const int*>, random_access_iterator<int*> >();
  64. test<random_access_iterator<const int*>, int*>();
  65. test<const int*, output_iterator<int*> >();
  66. test<const int*, forward_iterator<int*> >();
  67. test<const int*, bidirectional_iterator<int*> >();
  68. test<const int*, random_access_iterator<int*> >();
  69. test<const int*, int*>();
  70. }