diff --git a/iterator_adaptor_test.cpp b/iterator_adaptor_test.cpp index 629aac0..af9aea3 100644 --- a/iterator_adaptor_test.cpp +++ b/iterator_adaptor_test.cpp @@ -9,6 +9,7 @@ // See http://www.boost.org for most recent version including documentation. // Revision History +// 30 Nov 01 Added permutation_iterator.(Toon Knapen) // 19 Nov 01 Added generator_iterator. (Jens Maurer) // 04 Nov 01 Updated with respect to change in named parameters. // (Jeremy Siek) @@ -50,6 +51,7 @@ #include #include +#include #include #include @@ -57,6 +59,7 @@ #include #include #include +#include #include #include #include @@ -404,6 +407,29 @@ main() assert(*gen == 3); } + { + // check permutation_iterator + typedef std::vector< int > element_range_type; + typedef std::list< int > index_type; + + static const int element_range_size = 10; + static const int index_size = 4; + + element_range_type elements( element_range_size ); + std::iota( elements.begin(), elements.end(), 0 ); + + index_type indices( index_size ); + std::iota( indices.begin(), indices.end(), element_range_size - index_size ); + std::reverse( indices.begin(), indices.end() ); + + typedef boost::permutation_iterator_generator< element_range_type::iterator, index_type::iterator >::type permutation_type; + permutation_type begin = boost::make_permutation_iterator( elements.begin(), indices.begin() ); + permutation_type end = boost::make_permutation_iterator( elements.begin(), indices.end() ); + + int expected_outcome[] = { 9, 8, 7, 6 }; + assert( std::equal( begin, end, expected_outcome ) ); + } + std::cout << "test successful " << std::endl; return 0; }