push_front.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. // Range v3 library
  2. //
  3. // Copyright Eric Niebler 2014-present
  4. //
  5. // Use, modification and distribution is subject to the
  6. // Boost Software License, Version 1.0. (See accompanying
  7. // file LICENSE_1_0.txt or copy at
  8. // http://www.boost.org/LICENSE_1_0.txt)
  9. #include <list>
  10. #include <vector>
  11. #include <range/v3/core.hpp>
  12. #include <range/v3/view/iota.hpp>
  13. #include <range/v3/view/take.hpp>
  14. #include <range/v3/view/for_each.hpp>
  15. #include <range/v3/action/push_front.hpp>
  16. #include "../simple_test.hpp"
  17. #include "../test_utils.hpp"
  18. int main()
  19. {
  20. using namespace ranges;
  21. {
  22. std::vector<int> v;
  23. push_front(v, {1,2,3});
  24. ::check_equal(v, {1,2,3});
  25. push_front(v, views::iota(10) | views::take(3));
  26. ::check_equal(v, {10,11,12,1,2,3});
  27. push_front(v, views::iota(10) | views::take(3));
  28. ::check_equal(v, {10,11,12,10,11,12,1,2,3});
  29. int rg[] = {9,8,7};
  30. push_front(v, rg);
  31. ::check_equal(v, {9,8,7,10,11,12,10,11,12,1,2,3});
  32. push_front(v, rg);
  33. ::check_equal(v, {9,8,7,9,8,7,10,11,12,10,11,12,1,2,3});
  34. std::list<int> s;
  35. push_front(s,
  36. views::ints|views::take(10)|views::for_each([](int i){return yield_if(i%2==0,i);}));
  37. ::check_equal(s, {0,2,4,6,8});
  38. push_front(s, -2);
  39. ::check_equal(s, {-2,0,2,4,6,8});
  40. }
  41. {
  42. std::vector<int> v;
  43. v = std::move(v) | push_front({1,2,3});
  44. ::check_equal(v, {1,2,3});
  45. v = std::move(v) | push_front(views::iota(10) | views::take(3));
  46. ::check_equal(v, {10,11,12,1,2,3});
  47. v = std::move(v) | push_front(views::iota(10) | views::take(3));
  48. ::check_equal(v, {10,11,12,10,11,12,1,2,3});
  49. int rg[] = {9,8,7};
  50. v = std::move(v) | push_front(rg);
  51. ::check_equal(v, {9,8,7,10,11,12,10,11,12,1,2,3});
  52. v = std::move(v) | push_front(rg);
  53. ::check_equal(v, {9,8,7,9,8,7,10,11,12,10,11,12,1,2,3});
  54. std::list<int> s;
  55. s = std::move(s) | push_front(
  56. views::ints|views::take(10)|views::for_each([](int i){return yield_if(i%2==0,i);}));
  57. ::check_equal(s, {0,2,4,6,8});
  58. s = std::move(s) | push_front(-2);
  59. ::check_equal(s, {-2,0,2,4,6,8});
  60. }
  61. {
  62. std::vector<int> v;
  63. v |= push_front({1,2,3});
  64. ::check_equal(v, {1,2,3});
  65. v |= push_front(views::iota(10) | views::take(3));
  66. ::check_equal(v, {10,11,12,1,2,3});
  67. v |= push_front(views::iota(10) | views::take(3));
  68. ::check_equal(v, {10,11,12,10,11,12,1,2,3});
  69. int rg[] = {9,8,7};
  70. v |= push_front(rg);
  71. ::check_equal(v, {9,8,7,10,11,12,10,11,12,1,2,3});
  72. v |= push_front(rg);
  73. ::check_equal(v, {9,8,7,9,8,7,10,11,12,10,11,12,1,2,3});
  74. std::list<int> s;
  75. s |= push_front(
  76. views::ints|views::take(10)|views::for_each([](int i){return yield_if(i%2==0,i);}));
  77. ::check_equal(s, {0,2,4,6,8});
  78. s |= push_front(-2);
  79. ::check_equal(s, {-2,0,2,4,6,8});
  80. }
  81. return ::test_result();
  82. }