pop_back.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /*=============================================================================
  2. Copyright (c) 2001-2011 Joel de Guzman
  3. Distributed under the Boost Software License, Version 1.0. (See accompanying
  4. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  5. ==============================================================================*/
  6. #include <boost/detail/lightweight_test.hpp>
  7. #include <boost/fusion/container/vector/vector.hpp>
  8. #include <boost/fusion/container/list/list.hpp>
  9. #include <boost/fusion/adapted/mpl.hpp>
  10. #include <boost/fusion/sequence/io/out.hpp>
  11. #include <boost/fusion/sequence/comparison/equal_to.hpp>
  12. #include <boost/fusion/container/generation/make_vector.hpp>
  13. #include <boost/fusion/container/generation/make_list.hpp>
  14. #include <boost/fusion/algorithm/transformation/pop_back.hpp>
  15. #include <boost/fusion/algorithm/transformation/push_back.hpp>
  16. #include <boost/fusion/algorithm/query/find.hpp>
  17. #include <boost/fusion/include/back.hpp>
  18. #include <boost/fusion/include/array.hpp>
  19. #include <boost/array.hpp>
  20. #include <boost/mpl/vector_c.hpp>
  21. int
  22. main()
  23. {
  24. using namespace boost::fusion;
  25. std::cout << tuple_open('[');
  26. std::cout << tuple_close(']');
  27. std::cout << tuple_delimiter(", ");
  28. /// Testing pop_back
  29. {
  30. char const* s = "Ruby";
  31. typedef vector<int, char, double, char const*> vector_type;
  32. vector_type t1(1, 'x', 3.3, s);
  33. {
  34. std::cout << pop_back(t1) << std::endl;
  35. BOOST_TEST((pop_back(t1) == make_vector(1, 'x', 3.3)));
  36. }
  37. }
  38. {
  39. typedef boost::mpl::vector_c<int, 1, 2, 3, 4, 5> mpl_vec;
  40. std::cout << boost::fusion::pop_back(mpl_vec()) << std::endl;
  41. BOOST_TEST((boost::fusion::pop_back(mpl_vec()) == make_vector(1, 2, 3, 4)));
  42. }
  43. {
  44. list<int, int> l(1, 2);
  45. std::cout << pop_back(l) << std::endl;
  46. BOOST_TEST((pop_back(l) == make_list(1)));
  47. }
  48. { // make sure empty sequences are OK
  49. list<int> l(1);
  50. std::cout << pop_back(l) << std::endl;
  51. BOOST_TEST((pop_back(l) == make_list()));
  52. }
  53. {
  54. single_view<int> sv(1);
  55. std::cout << pop_back(sv) << std::endl;
  56. // Compile check only
  57. (void)(begin(pop_back(sv)) == end(sv));
  58. (void)(end(pop_back(sv)) == begin(sv));
  59. }
  60. // $$$ JDG: TODO add compile fail facility $$$
  61. //~ { // compile fail check (Disabled for now)
  62. //~ list<> l;
  63. //~ std::cout << pop_back(l) << std::endl;
  64. //~ }
  65. #ifndef BOOST_NO_CXX11_AUTO_DECLARATIONS
  66. {
  67. auto vec = make_vector(1, 3.14, "hello");
  68. // Compile check only
  69. auto popv = pop_back(vec);
  70. std::cout << popv << std::endl;
  71. auto push = push_back(vec, 42);
  72. auto pop = pop_back(vec);
  73. auto i1 = find<int>(popv);
  74. auto i2 = find<double>(pop);
  75. (void)push;
  76. BOOST_TEST(i1 != end(pop));
  77. BOOST_TEST(i2 != end(pop));
  78. BOOST_TEST(i1 != i2);
  79. }
  80. #endif
  81. {
  82. boost::array<std::size_t, 2> a = {{ 10, 50 }};
  83. BOOST_TEST(back(pop_back(a)) == 10);
  84. }
  85. return boost::report_errors();
  86. }