From ef69c73e899b3f53578449129bd1d4db78a8495c Mon Sep 17 00:00:00 2001 From: Jeremy Siek Date: Sun, 11 Jan 2004 15:45:16 +0000 Subject: [PATCH] added some concept checks [SVN r21593] --- test/filter_iterator_test.cpp | 102 ++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) diff --git a/test/filter_iterator_test.cpp b/test/filter_iterator_test.cpp index edf3ccf..95f7fb0 100644 --- a/test/filter_iterator_test.cpp +++ b/test/filter_iterator_test.cpp @@ -8,6 +8,10 @@ #include #include #include +#include +#include +#include +#include #include #include @@ -24,9 +28,106 @@ struct one_or_four template struct undefined; +template struct see_type; + // Test filter iterator int main() { + // Concept checks + // Adapting old-style iterators + { + typedef boost::filter_iterator > Iter; + boost::function_requires< boost::InputIteratorConcept >(); + boost::function_requires< boost_concepts::ReadableIteratorConcept >(); + boost::function_requires< boost_concepts::SinglePassIteratorConcept >(); + } + { + typedef boost::filter_iterator > Iter; + boost::function_requires< boost::InputIteratorConcept >(); + boost::function_requires< boost::OutputIteratorConcept >(); + boost::function_requires< boost_concepts::ReadableIteratorConcept >(); + boost::function_requires< boost_concepts::WritableIteratorConcept >(); + boost::function_requires< boost_concepts::SinglePassIteratorConcept >(); + } + { + typedef boost::filter_iterator > Iter; + boost::function_requires< boost::ForwardIteratorConcept >(); + boost::function_requires< boost_concepts::ReadableIteratorConcept >(); + boost::function_requires< boost_concepts::ForwardTraversalConcept >(); + } + { + typedef boost::filter_iterator > Iter; + boost::function_requires< boost::Mutable_ForwardIteratorConcept >(); + boost::function_requires< boost_concepts::ReadableIteratorConcept >(); + boost::function_requires< boost_concepts::WritableIteratorConcept >(); + boost::function_requires< boost_concepts::ForwardTraversalConcept >(); + } + // Adapting new-style iterators + { + typedef boost::iterator_archetype< + const dummyT + , boost::iterator_archetypes::readable_iterator_t + , boost::single_pass_traversal_tag + > Iter; + boost::function_requires< boost::InputIteratorConcept >(); + boost::function_requires< boost_concepts::ReadableIteratorConcept >(); + boost::function_requires< boost_concepts::SinglePassIteratorConcept >(); + } + { + typedef boost::iterator_archetype< + dummyT + , boost::iterator_archetypes::readable_writable_iterator_t + , boost::single_pass_traversal_tag + > Iter; + boost::function_requires< boost::InputIteratorConcept >(); + boost::function_requires< boost::OutputIteratorConcept >(); + boost::function_requires< boost_concepts::ReadableIteratorConcept >(); + boost::function_requires< boost_concepts::WritableIteratorConcept >(); + boost::function_requires< boost_concepts::SinglePassIteratorConcept >(); + } + { + typedef boost::iterator_archetype< + const dummyT + , boost::iterator_archetypes::readable_iterator_t + , boost::forward_traversal_tag + > Iter; + boost::function_requires< boost::InputIteratorConcept >(); + boost::function_requires< boost_concepts::ReadableIteratorConcept >(); + boost::function_requires< boost_concepts::ForwardTraversalConcept >(); + } + { + typedef boost::iterator_archetype< + dummyT + , boost::iterator_archetypes::readable_writable_iterator_t + , boost::forward_traversal_tag + > Iter; + boost::function_requires< boost_concepts::ReadableIteratorConcept >(); + boost::function_requires< boost_concepts::WritableIteratorConcept >(); + boost::function_requires< boost_concepts::ForwardTraversalConcept >(); + } + { + typedef boost::iterator_archetype< + dummyT + , boost::iterator_archetypes::readable_lvalue_iterator_t + , boost::forward_traversal_tag + > Iter; + boost::function_requires< boost::ForwardIteratorConcept >(); + boost::function_requires< boost_concepts::ReadableLvalueIteratorConcept >(); + boost::function_requires< boost_concepts::ForwardTraversalConcept >(); + } + { + typedef boost::iterator_archetype< + dummyT + , boost::iterator_archetypes::writable_lvalue_iterator_t + , boost::forward_traversal_tag + > Iter; + boost::function_requires< boost::Mutable_ForwardIteratorConcept >(); + boost::function_requires< boost_concepts::WritableLvalueIteratorConcept >(); + boost::function_requires< boost_concepts::ForwardTraversalConcept >(); + } + + // Run-time tests + dummyT array[] = { dummyT(0), dummyT(1), dummyT(2), dummyT(3), dummyT(4), dummyT(5) }; const int N = sizeof(array)/sizeof(dummyT); @@ -75,6 +176,7 @@ int main() filter_iter(one_or_four(), array, array + N), dummyT(1), dummyT(4)); + std::cout << "test successful " << std::endl; return 0; }