$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r83347 - in branches/release: boost/algorithm boost/algorithm/cxx11 boost/algorithm/searching boost/algorithm/searching/detail boost/algorithm/string boost/algorithm/string/detail libs/algorithm/doc libs/algorithm/test libs/algorithm/test/search_test_data
From: marshall_at_[hidden]
Date: 2013-03-07 10:37:09
Author: marshall
Date: 2013-03-07 10:37:08 EST (Thu, 07 Mar 2013)
New Revision: 83347
URL: http://svn.boost.org/trac/boost/changeset/83347
Log:
Merge Algorithm changes to release; hex code cleanups; gather iterator requirements; copy_while and copy_until interface changes
Properties modified: 
   branches/release/boost/algorithm/   (props changed)
   branches/release/boost/algorithm/clamp.hpp   (props changed)
   branches/release/boost/algorithm/cxx11/all_of.hpp   (props changed)
   branches/release/boost/algorithm/cxx11/any_of.hpp   (props changed)
   branches/release/boost/algorithm/cxx11/copy_if.hpp   (contents, props changed)
   branches/release/boost/algorithm/cxx11/copy_n.hpp   (props changed)
   branches/release/boost/algorithm/cxx11/find_if_not.hpp   (props changed)
   branches/release/boost/algorithm/cxx11/iota.hpp   (props changed)
   branches/release/boost/algorithm/cxx11/is_partitioned.hpp   (props changed)
   branches/release/boost/algorithm/cxx11/is_permutation.hpp   (props changed)
   branches/release/boost/algorithm/cxx11/is_sorted.hpp   (props changed)
   branches/release/boost/algorithm/cxx11/none_of.hpp   (props changed)
   branches/release/boost/algorithm/cxx11/one_of.hpp   (props changed)
   branches/release/boost/algorithm/cxx11/partition_copy.hpp   (props changed)
   branches/release/boost/algorithm/cxx11/partition_point.hpp   (props changed)
   branches/release/boost/algorithm/hex.hpp   (contents, props changed)
   branches/release/boost/algorithm/minmax_element.hpp   (props changed)
   branches/release/boost/algorithm/searching/   (props changed)
   branches/release/boost/algorithm/searching/boyer_moore.hpp   (props changed)
   branches/release/boost/algorithm/searching/boyer_moore_horspool.hpp   (props changed)
   branches/release/boost/algorithm/searching/detail/bm_traits.hpp   (props changed)
   branches/release/boost/algorithm/searching/detail/debugging.hpp   (props changed)
   branches/release/boost/algorithm/searching/knuth_morris_pratt.hpp   (props changed)
   branches/release/boost/algorithm/string/   (props changed)
   branches/release/boost/algorithm/string/detail/case_conv.hpp   (props changed)
   branches/release/boost/algorithm/string/detail/classification.hpp   (props changed)
   branches/release/boost/algorithm/string/find.hpp   (props changed)
   branches/release/libs/algorithm/doc/   (props changed)
   branches/release/libs/algorithm/doc/Jamfile.v2   (props changed)
   branches/release/libs/algorithm/doc/algorithm.qbk   (props changed)
   branches/release/libs/algorithm/doc/all_of.qbk   (props changed)
   branches/release/libs/algorithm/doc/any_of.qbk   (props changed)
   branches/release/libs/algorithm/doc/boyer_moore.qbk   (props changed)
   branches/release/libs/algorithm/doc/boyer_moore_horspool.qbk   (props changed)
   branches/release/libs/algorithm/doc/clamp-hpp.qbk   (props changed)
   branches/release/libs/algorithm/doc/hex.qbk   (props changed)
   branches/release/libs/algorithm/doc/is_partitioned.qbk   (props changed)
   branches/release/libs/algorithm/doc/knuth_morris_pratt.qbk   (props changed)
   branches/release/libs/algorithm/doc/none_of.qbk   (props changed)
   branches/release/libs/algorithm/doc/one_of.qbk   (props changed)
   branches/release/libs/algorithm/doc/ordered-hpp.qbk   (props changed)
   branches/release/libs/algorithm/doc/partition_point.qbk   (props changed)
   branches/release/libs/algorithm/test/   (props changed)
   branches/release/libs/algorithm/test/Jamfile.v2   (props changed)
   branches/release/libs/algorithm/test/all_of_test.cpp   (props changed)
   branches/release/libs/algorithm/test/any_of_test.cpp   (props changed)
   branches/release/libs/algorithm/test/clamp_test.cpp   (props changed)
   branches/release/libs/algorithm/test/copy_if_test1.cpp   (contents, props changed)
   branches/release/libs/algorithm/test/copy_n_test1.cpp   (props changed)
   branches/release/libs/algorithm/test/empty_search_test.cpp   (props changed)
   branches/release/libs/algorithm/test/find_if_not_test1.cpp   (props changed)
   branches/release/libs/algorithm/test/hex_fail1.cpp   (props changed)
   branches/release/libs/algorithm/test/hex_test1.cpp   (props changed)
   branches/release/libs/algorithm/test/hex_test2.cpp   (props changed)
   branches/release/libs/algorithm/test/hex_test3.cpp   (props changed)
   branches/release/libs/algorithm/test/hex_test4.cpp   (props changed)
   branches/release/libs/algorithm/test/iota_test1.cpp   (props changed)
   branches/release/libs/algorithm/test/is_partitioned_test1.cpp   (props changed)
   branches/release/libs/algorithm/test/is_permutation_test1.cpp   (props changed)
   branches/release/libs/algorithm/test/none_of_test.cpp   (props changed)
   branches/release/libs/algorithm/test/one_of_test.cpp   (props changed)
   branches/release/libs/algorithm/test/ordered_test.cpp   (props changed)
   branches/release/libs/algorithm/test/partition_copy_test1.cpp   (props changed)
   branches/release/libs/algorithm/test/partition_point_test1.cpp   (props changed)
   branches/release/libs/algorithm/test/search_fail1.cpp   (props changed)
   branches/release/libs/algorithm/test/search_fail2.cpp   (props changed)
   branches/release/libs/algorithm/test/search_fail3.cpp   (props changed)
   branches/release/libs/algorithm/test/search_test1.cpp   (props changed)
   branches/release/libs/algorithm/test/search_test2.cpp   (contents, props changed)
   branches/release/libs/algorithm/test/search_test3.cpp   (contents, props changed)
   branches/release/libs/algorithm/test/search_test_data/0001.corpus   (props changed)
   branches/release/libs/algorithm/test/search_test_data/0001b.pat   (props changed)
   branches/release/libs/algorithm/test/search_test_data/0001e.pat   (props changed)
   branches/release/libs/algorithm/test/search_test_data/0001f.pat   (props changed)
   branches/release/libs/algorithm/test/search_test_data/0001n.pat   (props changed)
   branches/release/libs/algorithm/test/search_test_data/0002b.pat   (props changed)
   branches/release/libs/algorithm/test/search_test_data/0002e.pat   (props changed)
   branches/release/libs/algorithm/test/search_test_data/0002f.pat   (props changed)
   branches/release/libs/algorithm/test/search_test_data/0002n.pat   (props changed)
Text files modified: 
   branches/release/boost/algorithm/cxx11/copy_if.hpp     |    21 ++++---                                 
   branches/release/boost/algorithm/gather.hpp            |    19 +++---                                  
   branches/release/boost/algorithm/hex.hpp               |    32 ++++-------                             
   branches/release/libs/algorithm/doc/gather.qbk         |    18 +++---                                  
   branches/release/libs/algorithm/test/copy_if_test1.cpp |   101 ++++++++++++++++++++++++++++++++++++++- 
   branches/release/libs/algorithm/test/gather_test1.cpp  |     4 -                                       
   branches/release/libs/algorithm/test/search_test2.cpp  |     1                                         
   branches/release/libs/algorithm/test/search_test3.cpp  |     1                                         
   8 files changed, 142 insertions(+), 55 deletions(-)
Modified: branches/release/boost/algorithm/cxx11/copy_if.hpp
==============================================================================
--- branches/release/boost/algorithm/cxx11/copy_if.hpp	(original)
+++ branches/release/boost/algorithm/cxx11/copy_if.hpp	2013-03-07 10:37:08 EST (Thu, 07 Mar 2013)
@@ -63,7 +63,7 @@
 /// \fn copy_while ( InputIterator first, InputIterator last, OutputIterator result, Predicate p )
 /// \brief Copies all the elements at the start of the input range that
 ///     satisfy the predicate to the output range.
-/// \return The updated output iterator
+/// \return The updated input and output iterators
 /// 
 /// \param first    The start of the input sequence
 /// \param last     One past the end of the input sequence
@@ -71,25 +71,26 @@
 /// \param p        A predicate for testing the elements of the range
 ///
 template<typename InputIterator, typename OutputIterator, typename Predicate> 
-OutputIterator copy_while ( InputIterator first, InputIterator last, 
-                                OutputIterator result, Predicate p )
+std::pair<InputIterator, OutputIterator>
+copy_while ( InputIterator first, InputIterator last, OutputIterator result, Predicate p )
 {
     for ( ; first != last && p(*first); ++first )
         *result++ = *first;
-    return result;
+    return std::make_pair(first, result);
 }
 
 /// \fn copy_while ( const Range &r, OutputIterator result, Predicate p )
 /// \brief Copies all the elements at the start of the input range that
 ///     satisfy the predicate to the output range.
-/// \return The updated output iterator
+/// \return The updated input and output iterators
 /// 
 /// \param r        The input range
 /// \param result   An output iterator to write the results into
 /// \param p        A predicate for testing the elements of the range
 ///
 template<typename Range, typename OutputIterator, typename Predicate>
-OutputIterator copy_while ( const Range &r, OutputIterator result, Predicate p )
+std::pair<typename boost::range_iterator<const Range>::type, OutputIterator> 
+copy_while ( const Range &r, OutputIterator result, Predicate p )
 {
     return boost::algorithm::copy_while (boost::begin (r), boost::end(r), result, p);
 }
@@ -106,11 +107,12 @@
 /// \param p        A predicate for testing the elements of the range
 ///
 template<typename InputIterator, typename OutputIterator, typename Predicate> 
-OutputIterator copy_until ( InputIterator first, InputIterator last, OutputIterator result, Predicate p )
+std::pair<InputIterator, OutputIterator>
+copy_until ( InputIterator first, InputIterator last, OutputIterator result, Predicate p )
 {
     for ( ; first != last && !p(*first); ++first )
         *result++ = *first;
-    return result;
+    return std::make_pair(first, result);
 }
 
 /// \fn copy_until ( const Range &r, OutputIterator result, Predicate p )
@@ -123,7 +125,8 @@
 /// \param p        A predicate for testing the elements of the range
 ///
 template<typename Range, typename OutputIterator, typename Predicate>
-OutputIterator copy_until ( const Range &r, OutputIterator result, Predicate p )
+std::pair<typename boost::range_iterator<const Range>::type, OutputIterator> 
+copy_until ( const Range &r, OutputIterator result, Predicate p )
 {
     return boost::algorithm::copy_until (boost::begin (r), boost::end(r), result, p);
 }
Modified: branches/release/boost/algorithm/gather.hpp
==============================================================================
--- branches/release/boost/algorithm/gather.hpp	(original)
+++ branches/release/boost/algorithm/gather.hpp	2013-03-07 10:37:08 EST (Thu, 07 Mar 2013)
@@ -18,7 +18,7 @@
 */
 
 #ifndef BOOST_ALGORITHM_GATHER_HPP
-#define ADOBE_ALGORITHM_GATHER_HPP
+#define BOOST_ALGORITHM_GATHER_HPP
 
 #include <algorithm>                // for std::stable_partition
 #include <functional>
@@ -80,9 +80,10 @@
 */
 
 template <
-    typename ForwardIterator,  // Iter models ForwardIterator
-    typename Pred>  // Pred models UnaryPredicate
-std::pair<ForwardIterator,ForwardIterator> gather ( ForwardIterator first, ForwardIterator last, ForwardIterator pivot, Pred pred )
+    typename BidirectionalIterator,  // Iter models BidirectionalIterator
+    typename Pred>                   // Pred models UnaryPredicate
+std::pair<BidirectionalIterator, BidirectionalIterator> gather 
+        ( BidirectionalIterator first, BidirectionalIterator last, BidirectionalIterator pivot, Pred pred )
 {
 //  The first call partitions everything up to (but not including) the pivot element,
 //  while the second call partitions the rest of the sequence.
@@ -99,14 +100,14 @@
 */
 
 template <
-    typename ForwardRange,    //
+    typename BidirectionalRange,    //
     typename Pred>                  // Pred models UnaryPredicate
 std::pair<
-    typename boost::range_iterator<ForwardRange>::type,
-    typename boost::range_iterator<ForwardRange>::type>
+    typename boost::range_iterator<const BidirectionalRange>::type,
+    typename boost::range_iterator<const BidirectionalRange>::type>
 gather (
-    ForwardRange &range,
-    typename boost::range_iterator<ForwardRange>::type pivot,
+    const BidirectionalRange &range,
+    typename boost::range_iterator<const BidirectionalRange>::type pivot,
     Pred pred )
 {
     return boost::algorithm::gather ( boost::begin ( range ), boost::end ( range ), pivot, pred );
Modified: branches/release/boost/algorithm/hex.hpp
==============================================================================
--- branches/release/boost/algorithm/hex.hpp	(original)
+++ branches/release/boost/algorithm/hex.hpp	2013-03-07 10:37:08 EST (Thu, 07 Mar 2013)
@@ -10,12 +10,6 @@
 /*
     General problem - turn a sequence of integral types into a sequence of hexadecimal characters.
     - and back.
-
-TO DO:
-    1. these should really only work on integral types. (see the >> and << operations)
-        -- this is done, I think.
-    2. The 'value_type_or_char' struct is really a hack.
-        -- but it's a better hack now that it works with back_insert_iterators
 */
 
 /// \file  hex.hpp
@@ -42,11 +36,11 @@
 /*! 
     \struct hex_decode_error 
     \brief  Base exception class for all hex decoding errors 
-    
+*/ /*!
     \struct non_hex_input    
     \brief  Thrown when a non-hex value (0-9, A-F) encountered when decoding.
                 Contains the offending character
-    
+*/ /*!    
     \struct not_enough_input 
     \brief  Thrown when the input sequence unexpectedly ends
     
@@ -69,18 +63,16 @@
         return std::copy ( res, res + num_hex_digits, out );
         }
 
-// this needs to be in an un-named namespace because it is not a template
-// and might get included in several compilation units. This could cause
-// multiple definition errors at link time.
-    namespace {
-    unsigned hex_char_to_int ( char c ) {
-        if ( c >= '0' && c <= '9' ) return c - '0';
-        if ( c >= 'A' && c <= 'F' ) return c - 'A' + 10;
-        if ( c >= 'a' && c <= 'f' ) return c - 'a' + 10;
-        BOOST_THROW_EXCEPTION (non_hex_input() << bad_char (c));
-        return 0;     // keep dumb compilers happy
+    template <typename T>
+    unsigned char hex_char_to_int ( T val ) {
+        char c = static_cast<char> ( val );
+        unsigned retval = 0;
+        if      ( c >= '0' && c <= '9' ) retval = c - '0';
+        else if ( c >= 'A' && c <= 'F' ) retval = c - 'A' + 10;
+        else if ( c >= 'a' && c <= 'f' ) retval = c - 'a' + 10;
+        else BOOST_THROW_EXCEPTION (non_hex_input() << bad_char (c));
+        return retval;
         }
-    }    
 
 //  My own iterator_traits class.
 //  It is here so that I can "reach inside" some kinds of output iterators
@@ -134,7 +126,7 @@
         for ( std::size_t i = 0; i < 2 * sizeof ( T ); ++i, ++first ) {
             if ( pred ( first, last )) 
                 BOOST_THROW_EXCEPTION (not_enough_input ());
-            res = ( 16 * res ) + hex_char_to_int (static_cast<char> (*first));
+            res = ( 16 * res ) + hex_char_to_int (*first);
             }
         
         *out = res;
Modified: branches/release/libs/algorithm/doc/gather.qbk
==============================================================================
--- branches/release/libs/algorithm/doc/gather.qbk	(original)
+++ branches/release/libs/algorithm/doc/gather.qbk	2013-03-07 10:37:08 EST (Thu, 07 Mar 2013)
@@ -22,13 +22,13 @@
 ``
 namespace boost { namespace algorithm {
 
-template <typename ForwardIterator, typename Pred>
-std::pair<ForwardIterator,ForwardIterator> 
-gather ( ForwardIterator first, ForwardIterator last, ForwardIterator pivot, Pred pred );
-
-template <typename ForwardRange, typename Pred>
-std::pair<typename boost::range_iterator<ForwardRange>::type, typename boost::range_iterator<ForwardRange>::type>
-gather ( ForwardRange &range, typename boost::range_iterator<ForwardRange>::type pivot, Pred pred );
+template <typename BidirectionalIterator, typename Pred>
+std::pair<BidirectionalIterator,BidirectionalIterator> 
+gather ( BidirectionalIterator first, BidirectionalIterator last, BidirectionalIterator pivot, Pred pred );
+
+template <typename BidirectionalRange, typename Pred>
+std::pair<typename boost::range_iterator<const BidirectionalRange>::type, typename boost::range_iterator<const BidirectionalRange>::type>
+gather ( const BidirectionalRange &range, typename boost::range_iterator<const BidirectionalRange>::type pivot, Pred pred );
 
 }}
 ``
@@ -53,11 +53,11 @@
 
 [heading Iterator Requirements]
 
-`gather` work on all iterators except input or output iterators.
+`gather` work on bidirectional iterators or better. This requirement comes from the usage of `stable_partition`, which requires bidirectional iterators. Some standard libraries (libstdc++ and libc++, for example) have implementations of `stable_partition` that work with forward iterators. If that is the case, then `gather` will work with forward iterators as well.
 
 [heading Storage Requirements]
 
-`gather` uses stable_partition, which will attempt to allocate temporary memory, but will work in-situ if there is none available.
+`gather` uses `stable_partition`, which will attempt to allocate temporary memory, but will work in-situ if there is none available.
 
 [heading Complexity]
 
Modified: branches/release/libs/algorithm/test/copy_if_test1.cpp
==============================================================================
--- branches/release/libs/algorithm/test/copy_if_test1.cpp	(original)
+++ branches/release/libs/algorithm/test/copy_if_test1.cpp	2013-03-07 10:37:08 EST (Thu, 07 Mar 2013)
@@ -20,6 +20,7 @@
 #include <list>
 
 #include <boost/algorithm/cxx11/all_of.hpp>
+#include <boost/algorithm/cxx11/none_of.hpp>
 
 namespace ba = boost::algorithm;
 // namespace ba = boost;
@@ -30,7 +31,7 @@
 bool is_odd   ( int v ) { return v % 2 == 1; }
 
 template <typename Container>
-void test_sequence ( Container const &c ) {
+void test_copy_if ( Container const &c ) {
 
     typedef typename Container::value_type value_type;
     std::vector<value_type> v;
@@ -48,13 +49,13 @@
     v.clear ();
     ba::copy_if ( c.begin (), c.end (), back_inserter ( v ), is_true);
     BOOST_CHECK ( v.size () == c.size ());
-    BOOST_CHECK ( std::equal ( c.begin (), c.end (), v.begin ()));
+    BOOST_CHECK ( std::equal ( v.begin (), v.end (), c.begin ()));
 
     v.clear ();
     ba::copy_if ( c, back_inserter ( v ), is_true);
     BOOST_CHECK ( v.size () == c.size ());
     BOOST_CHECK ( v.size () == c.size ());
-    BOOST_CHECK ( std::equal ( c.begin (), c.end (), v.begin ()));
+    BOOST_CHECK ( std::equal ( v.begin (), v.end (), c.begin ()));
 
 //  Some of the elements
     v.clear ();
@@ -69,16 +70,106 @@
     }
 
 
+template <typename Container>
+void test_copy_while ( Container const &c ) {
+
+    typedef typename Container::value_type value_type;
+    typename Container::const_iterator it;
+    std::vector<value_type> v;
+    
+//  None of the elements
+    v.clear ();
+    ba::copy_while ( c.begin (), c.end (), back_inserter ( v ), is_false);
+    BOOST_CHECK ( v.size () == 0 );
+    
+    v.clear ();
+    ba::copy_while ( c, back_inserter ( v ), is_false);
+    BOOST_CHECK ( v.size () == 0 );
+
+//  All the elements
+    v.clear ();
+    ba::copy_while ( c.begin (), c.end (), back_inserter ( v ), is_true);
+    BOOST_CHECK ( v.size () == c.size ());
+    BOOST_CHECK ( std::equal ( v.begin (), v.end (), c.begin ()));
+
+    v.clear ();
+    ba::copy_while ( c, back_inserter ( v ), is_true);
+    BOOST_CHECK ( v.size () == c.size ());
+    BOOST_CHECK ( std::equal ( v.begin (), v.end (), c.begin ()));
+
+//  Some of the elements
+    v.clear ();
+    it = ba::copy_while ( c.begin (), c.end (), back_inserter ( v ), is_even ).first;
+    BOOST_CHECK ( v.size () == (size_t) std::distance ( c.begin (), it ));
+    BOOST_CHECK ( it == c.end () || !is_even ( *it ));
+    BOOST_CHECK ( ba::all_of ( v.begin (), v.end (), is_even ));
+    BOOST_CHECK ( std::equal ( v.begin (), v.end (), c.begin ()));
+
+    v.clear ();
+    it = ba::copy_while ( c, back_inserter ( v ), is_even ).first;
+    BOOST_CHECK ( v.size () == (size_t) std::distance ( c.begin (), it ));
+    BOOST_CHECK ( it == c.end () || !is_even ( *it ));
+    BOOST_CHECK ( ba::all_of ( v.begin (), v.end (), is_even ));
+    BOOST_CHECK ( std::equal ( v.begin (), v.end (), c.begin ()));
+    }
+
+template <typename Container>
+void test_copy_until ( Container const &c ) {
+
+    typedef typename Container::value_type value_type;
+    typename Container::const_iterator it;
+    std::vector<value_type> v;
+    
+//  None of the elements
+    v.clear ();
+    ba::copy_until ( c.begin (), c.end (), back_inserter ( v ), is_true);
+    BOOST_CHECK ( v.size () == 0 );
+
+    v.clear ();
+    ba::copy_until ( c, back_inserter ( v ), is_true);
+    BOOST_CHECK ( v.size () == 0 );
+
+//  All the elements
+    v.clear ();
+    ba::copy_until ( c.begin (), c.end (), back_inserter ( v ), is_false);
+    BOOST_CHECK ( v.size () == c.size ());
+    BOOST_CHECK ( std::equal ( v.begin (), v.end (), c.begin ()));
+
+    v.clear ();
+    ba::copy_until ( c, back_inserter ( v ), is_false);
+    BOOST_CHECK ( v.size () == c.size ());
+    BOOST_CHECK ( std::equal ( v.begin (), v.end (), c.begin ()));
+
+//  Some of the elements
+    v.clear ();
+    it = ba::copy_until ( c.begin (), c.end (), back_inserter ( v ), is_even ).first;
+    BOOST_CHECK ( v.size () == (size_t) std::distance ( c.begin (), it ));
+    BOOST_CHECK ( it == c.end () || is_even ( *it ));
+    BOOST_CHECK ( ba::none_of ( v.begin (), v.end (), is_even ));
+    BOOST_CHECK ( std::equal ( v.begin (), v.end (), c.begin ()));
+
+    v.clear ();
+    it = ba::copy_until ( c, back_inserter ( v ), is_even ).first;
+    BOOST_CHECK ( v.size () == (size_t) std::distance ( c.begin (), it ));
+    BOOST_CHECK ( it == c.end () || is_even ( *it ));
+    BOOST_CHECK ( ba::none_of ( v.begin (), v.end (), is_even ));
+    BOOST_CHECK ( std::equal ( v.begin (), v.end (), c.begin ()));
+    }
+    
 void test_sequence1 () {
     std::vector<int> v;
     for ( int i = 5; i < 15; ++i )
         v.push_back ( i );
-    test_sequence  ( v );
+    test_copy_if ( v );
+    test_copy_while ( v );
+    test_copy_until ( v );
     
     std::list<int> l;
     for ( int i = 25; i > 15; --i )
         l.push_back ( i );
-    test_sequence  ( l );   
+    test_copy_if ( l );
+    test_copy_while ( l );
+    test_copy_until ( l );
     }
 
 
Modified: branches/release/libs/algorithm/test/gather_test1.cpp
==============================================================================
--- branches/release/libs/algorithm/test/gather_test1.cpp	(original)
+++ branches/release/libs/algorithm/test/gather_test1.cpp	2013-03-07 10:37:08 EST (Thu, 07 Mar 2013)
@@ -55,14 +55,12 @@
 template <typename Container, typename Predicate>
 void test_iterator_types ( const Container &c, Predicate comp, std::size_t offset ) {
     typedef std::vector<typename Container::value_type> vec;
-    typedef forward_iterator<typename vec::iterator> FI;
+
     typedef bidirectional_iterator<typename vec::iterator> BDI;
     typedef random_access_iterator<typename vec::iterator> RAI;
     
     vec v;
     v.assign ( c.begin (), c.end ());
-    test_iterators ( FI  ( v.begin ()), FI  ( v.end ()), comp, offset );
-    v.assign ( c.begin (), c.end ());
     test_iterators ( BDI ( v.begin ()), BDI ( v.end ()), comp, offset );
     v.assign ( c.begin (), c.end ());
     test_iterators ( RAI ( v.begin ()), RAI ( v.end ()), comp, offset );
Modified: branches/release/libs/algorithm/test/search_test2.cpp
==============================================================================
--- branches/release/libs/algorithm/test/search_test2.cpp	(original)
+++ branches/release/libs/algorithm/test/search_test2.cpp	2013-03-07 10:37:08 EST (Thu, 07 Mar 2013)
@@ -14,6 +14,7 @@
 #define BOOST_TEST_MAIN
 #include <boost/test/unit_test.hpp>
 
+#include <ctime>        // for clock_t
 #include <iostream>
 #include <fstream>
 #include <iomanip>
Modified: branches/release/libs/algorithm/test/search_test3.cpp
==============================================================================
--- branches/release/libs/algorithm/test/search_test3.cpp	(original)
+++ branches/release/libs/algorithm/test/search_test3.cpp	2013-03-07 10:37:08 EST (Thu, 07 Mar 2013)
@@ -14,6 +14,7 @@
 #define BOOST_TEST_MAIN
 #include <boost/test/unit_test.hpp>
 
+#include <ctime>        // for clock_t
 #include <iostream>
 #include <fstream>
 #include <iomanip>