Changeset 63935


Ignore:
Timestamp:
Jul 12, 2010, 9:52:28 PM (8 years ago)
Author:
Neil Groves
Message:

[range] - fix erroneous change to uniqued test case.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libs/range/test/adaptor_test/uniqued.cpp

    r63904 r63935  
    1616#include <boost/assign.hpp>
    1717#include <boost/range/algorithm_ext.hpp>
    18 #include <boost/range/sub_range.hpp>
    1918
    2019#include <algorithm>
     
    2322#include <vector>
    2423
    25 #include <functional>
    2624namespace boost
    2725{
    28     namespace range3
    29     {
    30         namespace concept
    31         {
    32             template<class Range>
    33             class PopFrontSubRange
    34             {
    35             public:
    36                 void constraints()
    37                 {
    38                     Range copied_range(*m_range);
    39                     BOOST_DEDUCED_TYPENAME range_value<Range>::type v = copied_range.front();
    40                     copied_range.pop_front();
    41                 }
    42             private:
    43                 Range* m_range;
    44             };
    45 
    46             template<class Range>
    47             class PopBackSubRange
    48             {
    49             public:
    50                 void constraints()
    51                 {
    52                     Range copied_range(*m_range);
    53                     BOOST_DEDUCED_TYPENAME range_value<Range>::type v = copied_range.back();
    54                     copied_range.pop_back();
    55                 }
    56             private:
    57                 Range* m_range;
    58             };
    59         } // namespace concept
    60         namespace adaptor
    61         {
    62             template<class Range, class Pred>
    63             class adjacent_filter_adaptor
    64                 : private boost::sub_range<Range>
    65                 , private Pred
    66             {
    67             public:
    68                 typedef boost::sub_range<Range> range_t;
    69                 typedef Pred pred_t;
    70                 typedef typename range_t::value_type value_type;
    71                 using range_t::reference;
    72                 using range_t::const_reference;
    73                 using range_t::empty;
    74                 using range_t::front;
    75                 using range_t::back;
    76 
    77                 adjacent_filter_adaptor(Range& rng, Pred pred)
    78                 : range_t(rng)
    79                 , pred_t(pred)
    80                 {
    81                 }
    82 
    83                 void pop_front()
    84                 {
    85                     BOOST_ASSERT( !empty() );
    86                     const value_type& old_front = front();
    87                     range_t::pop_front();
    88                     while (!empty() && !pred_t::operator()(front(), old_front))
    89                         range_t::pop_front();
    90                 }
    91 
    92                 void pop_back()
    93                 {
    94                     BOOST_ASSERT( !empty() );
    95                     const value_type& old_back = back();
    96                     range_t::pop_back();
    97                     while (!empty() && !pred_t::operator()(old_back, back()))
    98                         range_t::pop_back();
    99                 }
    100             };
    101 
    102             template<class Range>
    103             class unique_adaptor
    104                 : public adjacent_filter_adaptor<Range, std::not_equal_to< typename range_value<Range>::type > >
    105             {
    106                 typedef adjacent_filter_adaptor<Range, std::not_equal_to< typename range_value<Range>::type > > base_t;
    107             public:
    108                 typedef std::not_equal_to< typename range_value<Range>::type > pred_t;
    109                 explicit unique_adaptor(Range& rng) : base_t(rng, pred_t()) {}
    110             };
    111         }
    112     }
    113 
    11426    namespace
    11527    {
    11628        template< class Container >
    117         void new_uniqued_adaptor_test(Container& c)
    118         {
    119             std::vector<int> test_result1;
    120             boost::range3::adaptor::unique_adaptor<Container> rng(c);
    121             while (!rng.empty())
    122             {
    123                 test_result1.push_back(rng.front());
    124                 rng.pop_front();
    125             }
    126 
    127             std::vector<int> test_result2;
    128             boost::push_back(test_result2, adaptors::unique(c));
    129 
    130             BOOST_CHECK_EQUAL_COLLECTIONS(
    131                 test_result1.begin(), test_result1.end(),
    132                 test_result2.begin(), test_result2.end()
    133                 );
    134         }
    135 
    136         template< class Container >
    13729        void uniqued_test_impl( Container& c )
    13830        {
    139             new_uniqued_adaptor_test(c);
    140 
    14131            using namespace boost::adaptors;
    14232
Note: See TracChangeset for help on using the changeset viewer.