Guest User

Untitled

a guest
Jun 20th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.66 KB | None | 0 0
  1. #include "algorithm.hpp"
  2.  
  3. #include <boost/test/minimal.hpp>
  4.  
  5. #include <boost/lambda/lambda.hpp>
  6. namespace bll = boost::lambda;
  7.  
  8. #include <vector>
  9. #include <deque>
  10. #include <iterator>
  11.  
  12. int test_main( int, char** )
  13. {
  14. int const a[] = {
  15. 1, 9, 8, 5, 0, 6, 1, 7
  16. };
  17. std::size_t const n = sizeof(a) / sizeof(a[0]);
  18.  
  19. // all_of, any_of, none_of
  20. BOOST_CHECK( etude:: all_of( a, a+n, etude::less_than(10) ) );
  21. BOOST_CHECK( etude:: any_of( a, a+n, etude::less_than(5) ) );
  22. BOOST_CHECK( etude::none_of( a, a+n, etude::less_than(0) ) );
  23.  
  24. BOOST_CHECK( !etude:: all_of( a, a+n, etude::less_than(5) ) );
  25. BOOST_CHECK( !etude:: any_of( a, a+n, etude::less_than(0) ) );
  26. BOOST_CHECK( !etude::none_of( a, a+n, etude::less_than(1) ) );
  27.  
  28. // find_if_not
  29. BOOST_CHECK( etude::find_if_not( a, a+n, bll::_1 % 2 == 1 ) == a + 2 ); // 8
  30.  
  31. // is_permutation
  32. {
  33. int b[n];
  34. std::copy( a, a+n, b );
  35. std::random_shuffle( b, b+n );
  36.  
  37. BOOST_CHECK( etude::is_permutation( a, a+n, b ) );
  38.  
  39. b[0] = 10;
  40. std::random_shuffle( b, b+n );
  41. BOOST_CHECK( !etude::is_permutation( a, a+n, b ) );
  42. }
  43.  
  44. // copy_n
  45. {
  46. std::vector<int> v;
  47. etude::copy_n( a, 4, std::back_inserter(v) );
  48. BOOST_CHECK( v.size() == 4 );
  49. BOOST_CHECK( std::equal( a, a+4, v.begin() ) );
  50. }
  51. // copy_if
  52. {
  53. std::vector<int> v;
  54. etude::copy_if( a, a+n, std::back_inserter(v), etude::less_than(5) );
  55. BOOST_CHECK( v.size() == 3 );
  56. BOOST_CHECK( v[0] == 1 );
  57. BOOST_CHECK( v[1] == 0 );
  58. BOOST_CHECK( v[2] == 1 );
  59. }
  60. // is_partitioned
  61. BOOST_CHECK( !etude::is_partitioned( a, a+n, etude::less_than(5) ) );
  62. BOOST_CHECK( etude::is_partitioned( a, a+n, etude::not1( etude::equals_to(7) ) ) );
  63. BOOST_CHECK( etude::is_partitioned( a, a+n, etude::greater_than(10) ) ); // none
  64. BOOST_CHECK( etude::is_partitioned( a, a+n, bll::_1 >= 0 ) ); // all
  65.  
  66. // patition_copy && partition_point
  67. {
  68. std::deque<int> x;
  69. etude::partition_copy( a, a+n, std::front_inserter(x), std::back_inserter(x),
  70. bll::_1 % 2 == 0 ); // 偶数を先頭に、奇数を後方に。
  71.  
  72. BOOST_CHECK( x.size() == n );
  73. BOOST_CHECK( x[0] == 6 );
  74. BOOST_CHECK( x[1] == 0 );
  75. BOOST_CHECK( x[2] == 8 );
  76. BOOST_CHECK( x[3] == 1 );
  77. BOOST_CHECK( x[4] == 9 );
  78. BOOST_CHECK( x[5] == 5 );
  79. BOOST_CHECK( x[6] == 1 );
  80. BOOST_CHECK( x[7] == 7 );
  81.  
  82. BOOST_CHECK( etude::partition_point( x.begin(), x.end(), bll::_1 % 2 == 0 )
  83. == x.begin() + 3 ); // x[2] は偶数、 x[3] は奇数。
  84. }
  85.  
  86. // is_sorted
  87. {
  88. std::vector<int> v( a, a+n );
  89. std::sort( v.begin(), v.end() );
  90.  
  91. // is_sorted
  92. BOOST_CHECK( !etude::is_sorted( a, a+n ) );
  93. BOOST_CHECK( etude::is_sorted( v.begin(), v.end() ) );
  94. BOOST_CHECK( !etude::is_sorted( v.begin(), v.end(), std::greater<int>() ) );
  95. BOOST_CHECK( etude::is_sorted( v.rbegin(), v.rend(), std::greater<int>() ) );
  96.  
  97. // is_sorted_until
  98. BOOST_CHECK( etude::is_sorted_until( a, a+n ) == a + 2 ); // 1, 9 まで
  99. BOOST_CHECK( etude::is_sorted_until( a, a+n, std::greater<int>() ) == a + 1 ); // 1 まで
  100. BOOST_CHECK( etude::is_sorted_until( v.begin(), v.end() ) == v.end() ); // 全部
  101. BOOST_CHECK( etude::is_sorted_until( v.rbegin(), v.rend(), std::greater<int>() ) == v.rend() ); // 全部
  102. }
  103.  
  104. // minmax
  105. {
  106. std::pair<int, int> p = etude::minmax( 1, 2 );
  107. BOOST_CHECK( p.first == 1 && p.second == 2 );
  108. p = etude::minmax( 2, 1 );
  109. BOOST_CHECK( p.first == 1 && p.second == 2 );
  110. p = etude::minmax( 23, 42, std::greater<int>() );
  111. BOOST_CHECK( p.first == 42 && p.second == 23 );
  112. p = etude::minmax( 42, 23, std::greater<int>() );
  113. BOOST_CHECK( p.first == 42 && p.second == 23 );
  114. }
  115.  
  116. return 0;
  117. }
Add Comment
Please, Sign In to add comment